Video: Java Tutorial for Beginners [2019] 2024
I denna utmaning förbättrar du ditt Tic-Tac-Toe-spel genom att lägga till en Java-programmeringsklass, vilket gör att programmet kan göra en rudimentär ansträngning mot strategi när du bestämmer datorns rör sig.
I Java Programming Challenge: En enkel Tic-Tac-Toe-spel du utmanas att skriva ett program för att spela det enkla spelet Tic-Tac-Toe. I denna utmaning ändrar du källkoden för din tidigare lösning för att hjälpa datorn att strategisera.
Även om spelets regler är mycket enkla kan det vara komplicerat att skapa ett datorprogram som kan spela spelet. Ett antal potentiellt komplicerade detaljer måste införlivas i programmet. Specifikt:
-
Programmet måste ha ett sätt att internt representera statusen för var och en av de nio rutorna som utgör Tic-Tac-Toe-kortet.
-
Programmet måste ge ett sätt att registrera ett drag för någon spelare och måste se till att varje flytt är giltigt (till exempel får en spelare inte spela i en kvadrat som redan är upptagen av en X eller en O.
-
Programmet måste kunna avgöra när en spelare har vunnit genom att titta på alla åtta av de möjliga tre-i-rad-kombinationerna: De tre raderna, de tre kolumnerna, och de två diagonalerna.
-
Programmet måste också kunna avgöra när spelet är oavgjort - det vill säga när alla nio rutor har spelats och ingen spelare har vunnit.
Samtidigt har programmet måste hantera detaljerna om att interagera med användaren genom att be användaren att gå in i hans eller hennes rörelse, meddela datorns spel, visa en uppdaterad representation av brädet efter varje spel och förklara en vinnare eller meddela en oavgjort när spelet är över.
I denna utmaning är du uppmanad att skilja dessa två element i Tic-Tac-Toe-programmet: den del av e-program som hanterar spelets status och framsteg och den del av programmet som hanterar interaktionen med användaren. Du kommer att göra det genom att skapa en klass med namnet TicTacToeBoard som ger metoder som kan kallas för att spela ett komplett spel. Därefter uppmanas du att skriva ett program som använder klassen TicTacToeBoard för att tillåta en mänsklig motståndare att spela ett spel Tic-Tac-Toe mot datorn.
Från användarens perspektiv kommer programmet att fungera identiskt med det program som skapats för att lösa den enkla Tic-Tac-Toe-spelutmaningen, med en skillnad: För den här versionen av spelet, gör programmet en rudimentär ansträngning mot strategi när man bestämmer datorns rörelser.Datorn spelar inte perfekt, så det är fortfarande lätt beatable. Men det gör lite ansträngning utöver att bara spela i den första tomma torget som den ser.
I följande tabell anges de metoder som klassen TicTacToeBoard ska implementera. Kom ihåg att du måste skapa två. java-filer för att lösa denna utmaning. Den första, TicTacToeBoard. Java, implementerar TicTacToeBoard-klassen. Den andra, namngiven helt enkelt TicTacToe. java, är det program som användaren kommer att springa för att spela ett spel Tic-Tac-Toe mot datorn.
Constructor | Beskrivning |
---|---|
TicTacToeBoard | Skapar en ny TicTacToeBoard med alla rutor tomma. |
Metod | Beskrivning |
void reset () | Återställer statusen för varje kvadrat för att tömma. |
int getSquare (String square) | Returnerar status för torget som anges av kvadrat, vilket måste vara en av strängarna A1, A2, A3, B1, B2, B3, C1, C2 eller C3. Returnerar 0 om kvadraten är tom, 1 om den innehåller en X och 2 om den innehåller en O. Kasta IllegalArgumentException om kvadraten inte är en av de tillåtna värdena. |
void playAt (String Square, Int Player) | Markerar den angivna kvadraten (A1, A2, A3, B1, B2, B3, C1, C2 eller C3) för den angivna spelaren (1 för X, 2 för O). Kastar IllegalArgumentException om kvadrat inte är ett av de tillåtna värdena, spelaren är inte 1 eller 2, eller den angivna rutan är inte tom. |
int isGameOver () | Bestämmer om spelet är över. Returnerar 0 om spelet inte är över, 1 om X har vunnit spelet, 2 om O har vunnit spelet och 3 om spelet är oavgjort. Spelets slutförhållanden är följande:
1: Om någon rad, kolumn eller diagonal innehåller alla Xs. 2: Om någon rad, kolumn eller diagonal innehåller alla Os. 3: Om det inte finns några tomma rutor och varken X eller O har vunnit. |
int getNextMove () | Returnerar ett heltal som representerar nästa steg för datorns motståndare. Denna metod bör göra en rudimentär ansträngning för att välja ett bra drag, enligt följande strategi:
* Om mitten (kvadrat B2) är tom spelar du mittpunkten. * Om mitten inte är tomt men någon av de fyra hörnen (rutorna A1, A3, C1 eller C3) är tom, spelar du en av hörnen (det spelar ingen roll vilken). * Om centret inte är tomt och inga hörn är tomma, spela en av kanterna (rutorna A2, B1, B3 eller C2). |
String toString () | Returnerar en sträng som representerar styrelsens nuvarande status. Strängen innehåller nyraden tecken för att visa raderna samt separatorlinjer på separata konsollinjer, som i det här exemplet:
O | | O - | - | - | X | - | - | - | X | |
Om du är stumpad kan du hitta lösningen på fliken Downloads på Java All-in-One for Dummies, 4: e upplagans produktsida.
Lycka till!