ITI0011:HW02 Droptris Juhend

Allikas: Kursused
Redaktsioon seisuga 20. märts 2016, kell 23:18 kasutajalt Ago (arutelu | kaastöö) (Uus lehekülg: '== Üldine == Siin on mõned näpunäited, mida Droptrise ülesande juures võiks arvess võtta. == Nõuded == === Põhiosa === Põhiosa (4p) jaoks ...')
(erin) ←Vanem redaktsioon | Viimane redaktsiooni (erin) | Uuem redaktsioon→ (erin)
Mine navigeerimisribale Mine otsikasti

Üldine

Siin on mõned näpunäited, mida Droptrise ülesande juures võiks arvess võtta.

Nõuded

Põhiosa

Põhiosa (4p) jaoks tuleb mängida nii "O" kui "I" kujunditega vähemalt 2000 punkti.

Võimalik on saada ka 2p (+1 palli siis ei rakendu) kui vaid "O" kujunditega saab 2000 punkti.

Lisaosa

Põhiosa on võimalik realiseerida kasutades meie etteantud teeki DroptrisConnection. Kõik lisaosad eeldavad, et realiseerida socket ühenduse ise.

Ülesande lisaosade jaoks peab teie algoritm suutma mängida kõikide kujunditega.

Lisaosade eest on võimalik saada täiendavalt 4p. Täpsed kriteeriumid selguvad.

Võistlus

Täiendavalt on võimalik saada kuni 2 lisapunkti. Teie realiseeritud algoritmid pannakse mängima samade klotside järjestustega. Parimad saavad lisapunkte.

Socket ühendus

Socket ühenduse realiseerimiseks on soovitatav kasutada järgmisi klasse:

  • PrintWriter andmete kirjutamiseks.
  • InputStreamReader andmete lugemiseks.

Kasutades PrintWriter klassi, saate kasutada println meetodit, et oma päringud saata. Oluline on just saata ka reavahetus (server eeldab seda).

Andmeid tuleb lugeda sümbolhaaval. Kuna server ei saada reavahetusi, ei saa mõne muu lugejaga (nt BufferedReader) toimetada. Kuidas toimida:

  • InputStreamReader'il on meetod read(char[], int, int): https://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html#read%28char[],%20int,%20int%29
  • Looge enda char massiiv, näiteks char[] input = new char[100];
  • Andke loodud massiiv read meetodile ette. Samuti määrake ära algus ja lõpp. Te ei pea täpselt pihta saama lõpule. Pigem lugege natuke rohkem (kuna server on jõudnud vaid ühe kujundi info saata, ei tohiks seal ka mingit muud infot tulla).
  • Sisend pannakse char massiivi, selle saate String objektiks muuta (näiteks String konstruktoriga).

Mõistlik oleks lugemise jaoks teha mingi eraldi meetod. Ja veel vingem oleks teha kogu socket ühenduse jaoks eraldi klass, millel on read/write vms meetodid. Näiteks võiks teie loodud klassi kasutamine välja näha selliselt:

<source lang="java"> UltimateDroptrisConnection c = new UltimateDroptrisConnection(jsonString); c.read(); // reads welcome message BlockInformation bi = c.readBlockInformation(); char block = bi.getBlock(); char[] nextBlocks = bi.getNextBlocks();

int score = c.readScore();

int[][] state = c.readState(); </source>

Eelnev on lihtsalt näide. Te ei pea üldse oma klassi looma ühenduse jaoks.

API kirjeldus