Video: Java Tutorial for Beginners [2019] 2025
Dette Java programmering udfordring bygger på de tidligere udfordringer i denne Tic-Tac-Toe serie og tester din evne til at bruge arrayer - to af dem faktisk.
I Java Programmering Udfordring: En simpel Tic-Tac-Toe-spil og Java Programmering Udfordring: Tilføjelse af klasse til det enkle Tic-Tac-Toe-program du udfordres til at skrive et program til at spille det enkle spil Tic-Tac-Toe.
Som et spil græder Tic-Tac-Toe til brug af et array for at repræsentere status for spillet. Uden arrays skal du bruge en separat variabel til at repræsentere hver firkant i brættet. Med et array kan du bruge en enkelt variabel til at repræsentere alle ni firkanter.
Denne programmeringsudfordring er enkel: Skriv en forbedret version af programmet, der bruger arrayer. Du skal bruge mindst to arrays i din løsning:
-
Du skal bruge et array til at repræsentere bestyrelsen. Mest sandsynligt vil du bruge et endimensionelt array med ni elementer, som følger:
0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
Med andre ord opbevares den øverste venstre firkant (A1) i arrayelementet 0, og den nederste højre firkant (C3) er lagret i arrayelementet 8.
-
Du skal også bruge et array til at repræsentere de otte mulige tre-i-en-række vektorer.
Du kan derefter bruge dette array til at bestemme, om en spiller har vundet spillet. Mest sandsynligt vil du bruge et todimensionelt array til denne opgave. Arrayet vil indeholde otte, tre-element arrays, der hver repræsenterer de tre indekser af en bestemt tre-i-en-række vektor.
Det komplette array vil indeholde følgende 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
Et yderligere krav til dette program er, at TicTacToeBoard klassen du opretter til Denne udfordring skal være fuldstændig kompatibel med den klasse, du lavede til den foregående udfordring. Med andre ord skal den gennemføre nøjagtig samme metoder. For nemheds skyld gentages disse metoder i den følgende tabel.
Fordi disse metoder henviser til tic-tac-toe bordets kvadrater ved hjælp af kolonnebetegnelser som A1 eller B2, skal din implementering kortlægge disse betegnelser til indeksnumre. Hvis for eksempel strengen A1 overføres til playAt-metoden, skal programmet markere afspilningen ved indeks 0 i arrayet.
Constructor | Beskrivelse |
---|---|
TicTacToeBoard | Opretter en ny TicTacToeBoard med alle tommer tomme. |
Metode | Beskrivelse |
void reset () | Gendanner status for hver firkant for at tømme. |
void playAt (String square, int player) | Markerer det angivne firkant (A1, A2, A3, B1, B2, B3, C1, C2 eller C3) for den angivne afspiller (1 for X, 2 for O). Kaster ulovligArgumentException, hvis firkant ikke er en af de tilladte værdier, afspilleren ikke er 1 eller 2, eller den angivne firkant er ikke tom. |
int isGameOver () | Bestemmer, om spillet er overstået. Returnerer 0, hvis spillet ikke er overstået, 1 hvis X har vundet spillet, 2 hvis O har vundet spillet, og 3 hvis spillet er uafgjort. Spillets afslutningsbetingelser er som følger:
1: Hvis en række, kolonne eller diagonal indeholder alle X'er. 2: Hvis en række, kolonne eller diagonal indeholder alle O'er. 3: Hvis der ikke er tomme pladser, har hverken X eller O vundet. |
int getNextMove () | Returnerer et helt tal, der repræsenterer det næste træk til computerens modstander. Denne metode bør gøre en rudimentær indsats for at vælge et godt træk i henhold til følgende strategi:
* Hvis midten (kvadrat B2) er tom, skal du spille midtfeltet. * Hvis midten ikke er tomt, men en af de fire hjørner (firkanterne A1, A3, C1 eller C3) er tomme, skal du spille et af hjørnerne (det betyder ikke noget hvilket). * Hvis midten ikke er tom, og ingen hjørner er tomme, skal du spille en af kanterne (kvadrater A2, B1, B3 eller C2). |
String toString () | Returnerer en streng, som repræsenterer styrets nuværende status. Strengen indeholder nye linjer for at vise rækker såvel som separatorlinjer på separate konsollinjer, som i dette eksempel:
O | | O - | - | - | X | - | - | - | X | |
Som en yderligere udfordring, for denne version af TicTacToeBoard udfordringen, skal computerspilleren bruge en mere intelligent strategi mod den menneskelige modstander. Bestem computerens spil som følger:
-
Hvis det er muligt for computeren at vinde på sit næste spil, skal computeren spille på den vindende firkant.
-
Hvis det er muligt for den menneskelige modstander at vinde på hans eller hendes næste spil, skal computeren spille i den menneskelige modstanderens vindende firkant for at blokere vinderen.
-
Hvis center square er tilgængelig, skal computeren tage centerfeltet.
-
Hvis der er nogen hjørneplads, skal computeren spille i et af de tilgængelige hjørner.
-
Computeren skal afspilles i et tilgængeligt kantfelt.
Bemærk at for at gennemføre denne strategi skal du udvikle en rutine, der kan bestemme, om en spiller kan vinde på hans eller hendes næste træk. For at gøre det skal du se på hver af de otte, tre i en række vektorer for at afgøre, om vektoren indeholder et tomt firkant, og hvis hver af de to andre firkanter indeholder karakterer for den samme modstander (det er to X'er eller to O'er).
Du kan gøre det ved at bruge 0 til at repræsentere et tomt firkant, 1 for at repræsentere en X og 2 for at repræsentere en O. Men det ville kræve ret kompliceret logik - noget som dette ville være nødvendigt, forudsat at s1, s2, og s3 er heltal indeholdende indholdet af de tre firkanter af en af de otte, tre i en række vektorer:
hvis (s1 == 0 & s2 == 1 & s3 == 1) // X kan vinde ved at spille i s1 hvis (s2 == 0 & s1 == 1 & s3 == 1) // X kan vinde ved at spille i s2 hvis (s3 == 0 & s1 == 1 & s2 == 1) // X kan vinde ved at spille i s3
Så her er et tip: I stedet for at bruge 0, 1 og 2 for at repræsentere en tom firkant, en X og en O, skal du bruge de primære tal 2, 3 og 5 i stedet.Derefter for at bestemme, om en spiller kan vinde på en given vektor, simpelthen multiplicere de tre værdier for den vektor. Hvis resultatet er 18, kan X vinde (233 = 18). Hvis resultatet er 50, kan O vinde (255 = 50).
Bemærk også, at selv om denne strategi er en forbedring i forhold til den strategi, der er anvendt til tidligere versioner af programmet, er det stadig ikke en perfekt strategi: Du kan stadig slå computeren med den rigtige række af spiller. Hvis du vil have en ekstra udfordring, skal du overveje, hvilken yderligere strategi der ville være nødvendigt for at gøre spillet ubrudt og derefter udtænke en måde at implementere den nye strategi på.
Du kan finde løsningen på denne udfordring på fanen Downloads i Java All-in-One for Dummies, 4. udgave produktside.
Held og lykke!