Hem Personliga finanser Java Programmeringsutmaning: Lägga till arrayer till det enkla Tic-Tac-Toe-programmet

Java Programmeringsutmaning: Lägga till arrayer till det enkla Tic-Tac-Toe-programmet

Video: Java Tutorial for Beginners [2019] 2024

Video: Java Tutorial for Beginners [2019] 2024
Anonim

Detta Java-programutmaning bygger på de tidigare utmaningarna i denna Tic-Tac-Toe-serie och testar din förmåga att använda arrays - två av dem faktiskt.

I Java Programmeringsutmaning: En enkel Tic-Tac-Toe-spel och Java Programmeringsutmaning: Lägga till klass i det enkla Tic-Tac-Toe-programmet du utmanas att skriva ett program för att spela det enkla spelet Tic-Tac-Toe.

Som ett spel gråter Tic-Tac-Toe för att använda en array för att representera spelets status. Utan arrays måste du använda en separat variabel för att representera varje ruta av styrelsen. Med en array kan du använda en enda variabel för att representera alla nio rutor.

Den här programmeringsutmaningen är enkel: Skriv en förbättrad version av programmet som använder sig av arrayer. Du måste använda minst två arrays i din lösning:

  1. Du måste använda en array för att representera styrelsen. Mest troligt kommer du vilja använda en endimensionell array med nio element, enligt följande:

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
    

    Med andra ord lagras den övre vänstra kvadraten (A1) i matriselementet 0, och den nedre högra kvadraten (C3) lagras i matriselementet 8.

  2. Du måste också använda en array för att representera de åtta möjliga tre-i-rad-vektorerna.

    Du kan sedan använda denna array för att bestämma om endera spelaren har vunnit spelet. Mest sannolikt kommer du vilja använda en tvådimensionell array för denna uppgift. Arrayet kommer att innehålla åtta, treelementraderingar, vilka var och en representerar de tre indexerna för en viss tre-i-rad-vektor.

    Den fullständiga raden skulle innehålla följande data:

    0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
    

Ett ytterligare krav på det här programmet är att klassen TicTacToeBoard du skapar för denna utmaning måste vara helt kompatibel med den klass du skapade för den föregående utmaningen. Med andra ord måste det genomföra exakt samma metoder. För din bekvämlighet upprepas dessa metoder i följande tabell.

Eftersom dessa metoder hänvisar till kvadraterna i tic-tac-toe-kortet med hjälp av radkolonnbeteckningar som A1 eller B2, måste din implementering kartlägga dessa beteckningar till indexnummer. Om strängen A1 exempelvis passeras till playAt-metoden, måste programmet markera spjället vid index 0 i matrisen.

TicTacToeBoard Class
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.
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 X: er.

2: Om någon rad, kolumn eller diagonal innehåller alla O: er.

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 nya tecken för att visa raderna samt separatorlinjer på separata konsollinjer, som i det här exemplet:

O | | O

- | - | -

| X |

- | - | -

| X |

Som en ytterligare utmaning, för den här versionen av TicTacToeBoard-utmaningen, bör datorspelaren använda en mer intelligent strategi mot den mänskliga motståndaren. Bestäm datorns spel enligt följande:

  1. Om det är möjligt för datorn att vinna på nästa spel, ska datorn spela på vinnande torget.

  2. Om det är möjligt för den mänskliga motståndaren att vinna på sin nästa spel, ska datorn spela i den mänskliga motståndarens vinnande torg för att blockera vinsten.

  3. Om mittkvadratet är tillgängligt ska datorn ta mittfältet.

  4. Om någon hörnkant är tillgänglig ska datorn spela i en av de tillgängliga hörnen.

  5. Datorn ska spela i en tillgänglig kantkorg.

Observera att för att genomföra denna strategi måste du utveckla en rutin som kan avgöra om endera spelare kan vinna på sitt nästa steg. För att göra det måste du titta på var och en av de åtta, tre i rad-vektorerna för att bestämma om vektorn innehåller en tom kvadrat och om var och en av de andra två rutorna innehåller tecken för samma motståndare (det är två X eller två O).

Du kan göra det genom att använda 0 för att representera en tom kvadrat, 1 för att representera en X och 2 för att representera en O. Men det skulle kräva ganska komplicerad logik - något sådant skulle krävas, förutsatt att s1, s2, och s3 är heltal som innehåller innehållet i de tre rutorna i en av åtta, tre i rad-vektorerna:

om (s1 == 0 & s2 == 1 & s3 == 1) // X kan vinna genom att spela i s1 om (s2 == 0 & s1 == 1 & s3 == 1) // X kan vinna genom att spela i s2 om (s3 == 0 & s1 == 1 & s2 == 1) // X kan vinna genom att spela i s3

Så här är ett tips: I stället för att använda 0, 1 och 2 för att representera en tom kvadrat, en X och en O, använder du primärtal 2, 3 och 5 i stället.Sedan, för att bestämma om en spelare kan vinna på en given vektor, multiplicera du bara de tre värdena för den vektorn. Om resultatet är 18 kan X vinna (233 = 18). Om resultatet är 50, kan O vinna (255 = 50).

Notera också att även om den här strategin är en förbättring jämfört med strategin som används för tidigare versioner av programmet, är det fortfarande inte en perfekt strategi: Du kan fortfarande slå datorn med rätt sekvens av spelningar. Om du vill ha en extra utmaning, överväga vilken ytterligare strategi som behövs för att göra spelet oanvändbart och sedan utforma ett sätt att genomföra den nya strategin.

Du kan hitta lösningen på den här utmaningen på fliken Downloads i Java All-in-One for Dummies, 4: e utgåva produktsida.

Lycka till!

Java Programmeringsutmaning: Lägga till arrayer till det enkla Tic-Tac-Toe-programmet

Redaktörens val

Hur man redigerar bilder i Redigera snabbläge för Photoshop Elements 9 - dummies

Hur man redigerar bilder i Redigera snabbläge för Photoshop Elements 9 - dummies

I Photoshop Element, Redigera Snabbt läge är en uppskattad version av Redigera fullt läge som ger grundläggande fixverktyg tillsammans med några unika funktioner, till exempel en förhandsgranskning av bilden. Här är ett steg för steg arbetsflöde som du kan följa i Redigera snabbläge för att reparera dina foton: Välj ett eller flera foton i ...

Hur man redigerar i Photoshop Elements 10: s Snabb Fotoredigeringsläge - dummies

Hur man redigerar i Photoshop Elements 10: s Snabb Fotoredigeringsläge - dummies

Snabb Fotoredigering är en uppskattad version av Full Photo Edit-läge som bekvämt ger grundläggande fixeringsverktyg och kastar i några unika egenskaper, till exempel en förhandsgranskning av bilden. Här är ett steg för steg arbetsflöde som du kan följa i Quick Photo Edit-läget för att reparera dina foton:

Hur man förbättrar Photoshop Elements-bilder med Photo Effects - dummies

Hur man förbättrar Photoshop Elements-bilder med Photo Effects - dummies

Fotoeffekter i Photoshop Elements 11 fungerar som applicera filter; medan dialogrutan Filtreringsgalleri ger dig många alternativ för att tillämpa ett filter, ger den guidade panelen dig filtereffekter och tar dig genom steg för att justera ljusstyrka, ändra färgton och mättnad och göra andra justeringar för att perfekta resultatet. Du ...

Redaktörens val

Hur man tar bort bilder från din Canon EOS 7D Mark II - dummies

Hur man tar bort bilder från din Canon EOS 7D Mark II - dummies

När du granskar en bild, bestämmer du om det är en målvakt. Om du tittar på en bild på din Canon EOS 7D Mark II, gillar du inte bilden av någon anledning kan du radera det. Men borttagning av bilder måste ske med stor försiktighet eftersom uppgiften inte kan ångras. När du har raderat en ...

Hur man redigerar filmer på en Canon EOS 60D - dummies

Hur man redigerar filmer på en Canon EOS 60D - dummies

60D Edit-funktionen gör det härligt enkelt för att ta bort oönskade delar från början eller slutet av en film direkt på din kamera. Denna ombordredigering är praktisk men grundläggande, så förvänta dig inte mirakel. Här är de enkla stegen för att trimma början eller slutet på en film: Klicka på ikonen Redigera (det ser ut ...

Redaktörens val

Hur man arbetar med text i ett Word 2010-tabell - dummies

Hur man arbetar med text i ett Word 2010-tabell - dummies

Text hinner i ett bord i Word 2010 på en cell-vid-cell basis. Varje cell i ett Word-bord kan ha ett eget styckeformat och en egen uppsättning flikar. Grupper av celler, rader och kolumner och hela tabellen kan väljas och formateras samtidigt, om du vill. All standardtext ...

Hur man arbetar med Word 2010: s decimala flik - dummies

Hur man arbetar med Word 2010: s decimala flik - dummies

Du kan använda decimalfliken i Word 2010 till rad upp kolumner av siffror. Även om du kan använda en rätt flik för att göra detta jobb är decimalfliken ett bättre val. I stället för högerjusterad text, som den högra fliken gör, justerar decimalfliken siffror efter deras decimaldel - perioden i ...

Hur man arbetar med flera Word 2010-dokument på samma gång - dummies

Hur man arbetar med flera Word 2010-dokument på samma gång - dummies

O saker Word 2010 kan göra med dokument! Du kan öppna flera Word-dokument samtidigt och arbeta på mycket av dem, växla mellan de olika öppna dokumenten. Öppnar flera Word-dokument samtidigt Det är inte en fråga om hur Word kan fungera på mer än ett dokument åt gången. Nej, ...