Video: Coding Challenge #4: Purple Rain in Processing 2024
In dieser Herausforderung verbessern Sie Ihr Tic-Tac-Toe-Spiel, indem Sie eine Java-Programmierklasse hinzufügen, die es dem Programm ermöglicht, rudimentäre Strategien zu entwickeln, wenn bewegt sich.
In der Java-Programmier-Challenge: Ein einfaches Tic-Tac-Toe-Spiel. Du musst ein Programm schreiben, um das einfache Tic-Tac-Toe-Spiel zu spielen. In dieser Herausforderung ändern Sie den Quellcode für Ihre vorherige Lösung, um die Strategie des Computers zu unterstützen.
Obwohl die Spielregeln sehr einfach sind, kann die Erstellung eines Computerprogramms, das das Spiel spielen kann, komplex sein. Eine Reihe von möglicherweise komplizierten Details müssen in das Programm aufgenommen werden. Insbesondere:
-
Das Programm muss eine Möglichkeit haben, den Status jedes der neun Quadrate, aus denen das Tic-Tac-Toe-Board besteht, intern darzustellen.
-
Das Programm muss eine Möglichkeit bieten, einen Zug für einen Spieler zu registrieren und muss sicherstellen, dass jeder Zug gültig ist (zum Beispiel darf ein Spieler nicht in einem Feld spielen, das bereits von einem X oder einem O besetzt ist).
-
Das Programm muss in der Lage sein zu bestimmen, wann ein Spieler gewonnen hat, indem es alle acht der drei möglichen Kombinationen betrachtet: Die drei Reihen, die drei Spalten und die beiden Diagonalen.
-
Das Programm muss auch in der Lage sein zu bestimmen, wann das Spiel unentschieden ist - das heißt, wenn alle neun Felder gespielt wurden und keiner der Spieler gewonnen hat.
Zur gleichen Zeit muss die Details der Interaktion mit dem Benutzer verwalten, indem er den Benutzer auffordert, seinen Zug einzugeben, das Spiel des Computers anzukündigen, nach jedem Spiel eine aktualisierte Darstellung des Spielbretts anzuzeigen und einen Gewinner zu deklarieren oder eine Ziehung anzukündigen, wenn das Spiel vorbei ist.
In dieser Übung werden Sie gebeten, diese beiden Elemente des Tic-Tac-Toe-Programms zu trennen: Das Programm verwaltet den Status und den Fortschritt des Spiels und den Teil des Programms, der die Interaktion mit dem Benutzer übernimmt. Sie werden das tun, indem Sie eine Klasse namens TicTacToeBoard erstellen, die Methoden bereitstellt, die aufgerufen werden können, um ein komplettes Spiel zu spielen. Dann werden Sie gebeten, ein Programm zu schreiben, das die TicTacToeBoard-Klasse verwendet, um einem menschlichen Gegner zu erlauben, ein Tic-Tac-Toe-Spiel gegen den Computer zu spielen.
Aus Sicht des Benutzers funktioniert dieses Programm identisch mit dem Programm, das erstellt wurde, um die einfache Tic-Tac-Toe-Spielherausforderung zu lösen, mit einem Unterschied: Für diese Version des Spiels unternimmt das Programm rudimentäre Anstrengungen zur Strategie bei der Bestimmung. der Computer bewegt sich.Der Computer spielt nicht perfekt, also ist er immer noch leicht zu schlagen. Aber es macht etwas Mühe, nicht nur auf dem ersten leeren Platz zu spielen, den es sieht.
Die folgende Tabelle listet die Methoden auf, die die TicTacToeBoard-Klasse implementieren sollte. Denken Sie daran, dass Sie zwei erstellen müssen. Java-Dateien, um diese Herausforderung zu lösen. Das erste, TicTacToeBoard. Java implementiert die TicTacToeBoard-Klasse. Die zweite, einfach TicTacToe genannt. Java, ist das Programm, das der Benutzer ausführen wird, um ein Spiel von Tic-Tac-Toe gegen den Computer zu spielen.
Konstruktor | Beschreibung |
---|---|
TicTacToeBoard | Erzeugt ein neues TicTacToeBoard mit allen Feldern leer. |
Methode | Beschreibung |
void reset () | Setzt den Status jedes Quadrats auf leer zurück. |
int getSquare (String square) | Gibt den Status des durch square angegebenen Quadrats zurück, das einer der Strings A1, A2, A3, B1, B2, B3, C1, C2 oder C3 sein muss. Gibt 0 zurück, wenn das Quadrat leer ist, 1, wenn es ein X enthält, und 2, wenn es ein O enthält. Löst IllegalArgumentException aus, wenn square nicht zu den zulässigen Werten gehört. |
void playAt (String square, int player) | Markiert das angegebene Quadrat (A1, A2, A3, B1, B2, B3, C1, C2 oder C3) für den angegebenen Spieler (1 für X, 2 für O). Löst IllegalArgumentException aus, wenn square nicht zu den zulässigen Werten gehört, player nicht 1 oder 2 ist oder das angegebene Quadrat nicht leer ist. |
int isGameOver () | Legt fest, ob das Spiel beendet ist. Gibt 0 zurück, wenn das Spiel noch nicht beendet ist, 1, wenn X das Spiel gewonnen hat, 2, wenn O das Spiel gewonnen hat, und 3, wenn das Spiel unentschieden ist. Die Spielbeendigungsbedingungen lauten wie folgt:
1: Enthält eine beliebige Zeile, Spalte oder Diagonale alle Xs. 2: Enthält eine beliebige Zeile, Spalte oder Diagonale alle Os. 3: Wenn es keine leeren Quadrate gibt und weder X noch O gewonnen haben. |
int getNextMove () | Gibt eine ganze Zahl zurück, die den nächsten Zug für den Computergegner darstellt. Diese Methode sollte eine rudimentäre Anstrengung unternehmen, um einen guten Zug gemäß der folgenden Strategie auszuwählen:
* Wenn das Zentrum (Quadrat B2) leer ist, spielen Sie das mittlere Quadrat. * Wenn die Mitte nicht leer ist, aber eine der vier Ecken (Quadrate A1, A3, C1 oder C3) leer ist, spielen Sie eine der Ecken (egal welche). * Wenn die Mitte nicht leer ist und keine Ecken leer sind, spielen Sie eine der Kanten (Quadrate A2, B1, B3 oder C2). |
String toString () | Gibt eine Zeichenfolge zurück, die den aktuellen Status der Karte darstellt. Die Zeichenfolge enthält Zeilenumbruchzeichen, um die Zeilen anzuzeigen, sowie Trennlinien in separaten Konsolenlinien, wie in diesem Beispiel:
O | | O - | - | - | X | - | - | - | X | |
Wenn Sie stumpfen, finden Sie die Lösung auf der Registerkarte Downloads auf der Produktseite Java All-in-One für Dummies, 4th Edition.
Viel Glück!