ITI0011:Trips Traps Trull
Tagasi ITI0011 lehele.
Üldine
Programmikood tuleb kirjutada selliselt, et checkstyle plugin Eclipse'is ei näita vigu.
Tähtaeg: 22. - 26. september (vastavalt rühma tunnile)
Enne seda nädalat esitamine annab +1 lisapunkti.
Tuleb programmeerida Trips-Traps-Trulli mängimiseks käsurea programm ning kasutaja vastu mängiva arvuti strateegia.
Põhiosa - 5p
Programm kuvab mängulaua ja võimaldab kasutajal mängida arvutiga.
Arvuti mängib "0"-idega, kasutaja "X"-idega.
Näiteks:
+---+---+---+ | 0 | 0 | | +---+---+---+ | | X | | +---+---+---+ | | | | +---+---+---+
Kasutaja sisestab käigud mänguruutude indeksitena järgmiselt:
+---+---+---+ | 1 | 2 | 3 | +---+---+---+ | 4 | 5 | 6 | +---+---+---+ | 7 | 8 | 9 | +---+---+---+
Seega, kui kasutaja sisestab "5", siis märgitakse "X" keskmisele ruudule.
Programmi struktuur
Ülesande lahendamisel kasutage laua seisu hoidmiseks ühemõõtmelist massiivi, kus iga ruudu jaoks on üks element. Elemendi väärtus tähistab seda, mis selles ruudus on: 0 - ruut on tühi, 1 - ruudul on kasutaja nupp, -1 - ruudul on arvuti nupp.
Programm peab sisaldama järgmisi meetodeid (funktsioone):
/** * Takes the current state of the board * and returns the cell index where computer * makes its move. * * The one-dimensional board is indexed as follows: * * +---+---+---+ * | 0 | 1 | 2 | * +---+---+---+ * | 3 | 4 | 5 | * +---+---+---+ * | 6 | 7 | 8 | * +---+---+---+ * * So, the following state: * * +---+---+---+ * | X | | | * +---+---+---+ * | | O | X | * +---+---+---+ * | | | | * +---+---+---+ * * is given as an array: * {1, 0, 0, 0, -1, 1, 0, 0, 0} * where 1 indicates a player stone ("X") and * -1 indicates a computer stone ("O") * * @param board Current state of the board. * See the description of the method for more information. * @return Cell index where the computer makes its move. */ public static int makeMove(int[] board)
Programm peab mõistlikult lahendama kasutaja väär-sisestused:
- kui kasutaja ei sisestanud numbrit, annab vastava teate ja küsib uuesti
- kui kasutaja sisestas käigu, mis on juba käidud - annab programm vastava teate ja küsib uuesti
- ebakorrektne määramispiirkond 0 < x < 9
Programm võimaldab käike käia mängijatel ainult vaheldumisi. Üks mängija ei saa kunagi kaks käiku järjest teha.
Pärast igat käiku kuvatakse mängulaua uus seis.
Programm suudab tuvastada, kui mängulaual ei ole rohkem legaalseid käike ja lõpetab mängu. St. massiivi kõik elemendid on väärtustatud, ei ole 0-id.
Märkused:
- "põhiosas" on täiesti piisav, et arvuti vaatab mängulauda ja valib esimese või juhusliku käigu, mis ei ole veel võetud, - midagi keerulisemat tegema ei pea.
/** * Reads a number from the standard input and returns it. * Beware: this method needs some improvements! * @return Number read from the input */ public static int readInput() { Scanner scanner = new Scanner(System.in); if (scanner.hasNextInt()) { int nr = scanner.nextInt(); } scanner.close(); return 0; }
I lisaosa - 2p
Arvuti eelistab käike:
- kõigepeal keskele
- siis nurkadesse
- ülejäänud
Programm suudab tuvastada, et mäng on lõppenud - kumbki mängijatest on 3-märki ritta saanud. Teatab mängu võitja.
II lisaosa - 3p
- Arvuti käib mängu võitva käigu, kui selline laual leidub: arvutil on kaks märki juba reas ja arvuti kord on käia.
- Sarnaselt suudab arvuti blokeerida Kasutaja võitvat käiku: kasutajal on kaks märki juba reas, aga arvuti kord on käia.