Zuhause Persönliche Finanzen Java Programming Challenge: Hinzufügen von Arrays zum einfachen Tic-Tac-Toe-Programm

Java Programming Challenge: Hinzufügen von Arrays zum einfachen Tic-Tac-Toe-Programm

Video: Coding Challenge #4: Purple Rain in Processing 2024

Video: Coding Challenge #4: Purple Rain in Processing 2024
Anonim

Diese Java Programmierung Herausforderung baut auf den vorherigen Herausforderungen in dieser Tic-Tac-Toe-Serie und testet Ihre Fähigkeit, Arrays zu verwenden - zwei von ihnen in der Tat.

In der Java-Programmierung Herausforderung: Ein einfaches Tic-Tac-Toe-Spiel und Java-Programmierung Challenge: Hinzufügen von Klasse zum einfachen Tic-Tac-Toe-Programm Sie sind aufgefordert, ein Programm zu schreiben, um das einfache Spiel von Tic-Tac-Toe zu spielen..

Als Spiel ruft Tic-Tac-Toe nach einem Array, um den Status des Spiels darzustellen. Ohne Arrays müssen Sie eine separate Variable verwenden, um jedes Quadrat der Karte darzustellen. Mit einem Array können Sie eine einzelne Variable verwenden, um alle neun Quadrate darzustellen.

Diese Programmieraufgabe ist einfach: Schreiben Sie eine verbesserte Version des Programms, das Arrays verwendet. Sie müssen mindestens zwei Arrays in Ihrer Lösung verwenden:

  1. Sie müssen ein Array verwenden, um die Karte darzustellen. Höchstwahrscheinlich möchten Sie ein eindimensionales Array mit neun Elementen wie folgt verwenden:

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

    Mit anderen Worten, das obere linke Quadrat (A1) wird in dem Array-Element 0 gespeichert, und das untere rechte Quadrat (C3) wird in dem Array-Element 8 gespeichert.

  2. Sie müssen auch ein Array verwenden, um die acht möglichen Drei-in-einer-Reihe-Vektoren darzustellen.

    Sie können dieses Array dann verwenden, um festzustellen, ob ein Spieler das Spiel gewonnen hat. Höchstwahrscheinlich werden Sie für diese Aufgabe ein zweidimensionales Array verwenden wollen. Das Array wird acht Arrays mit drei Elementen enthalten, von denen jedes die drei Indizes eines bestimmten Drei-in-einer-Reihe-Vektors darstellt.

    Das vollständige Array würde die folgenden Daten enthalten:

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

Eine zusätzliche Anforderung dieses Programms ist, dass die TicTacToeBoard-Klasse, die Sie für Diese Herausforderung muss vollständig mit der Klasse kompatibel sein, die Sie für die vorherige Herausforderung erstellt haben. Mit anderen Worten muss es genau die gleichen Methoden implementieren. Für Ihre Bequemlichkeit werden diese Methoden in der folgenden Tabelle wiederholt.

Da sich diese Methoden auf die Quadrate der Tic-Tac-Toe-Karte beziehen, die Zeilen-Spaltenbezeichnungen wie A1 oder B2 verwenden, muss Ihre Implementierung diese Bezeichnungen auf Indexnummern abbilden. Wenn beispielsweise die Zeichenfolge A1 an die playAt-Methode übergeben wird, muss das Programm die Wiedergabe am Index 0 im Array markieren.

Die TicTacToeBoard Klasse
Konstruktor Beschreibung
TicTacToeBoard

Erzeugt ein neues TicTacToeBoard mit allen Feldern leer.
Methode Beschreibung
void reset () Setzt den Status jedes Quadrats auf leer zurück.
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 Spielendbedingungen lauten wie folgt:

1: Wenn eine Zeile, Spalte oder Diagonale alle X enthält.

2: Wenn eine Zeile, Spalte oder Diagonale alle O enthält.

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 (es spielt keine Rolle, 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 sowie Trennlinien in separaten Konsolenzeilen anzuzeigen, wie in diesem Beispiel:

O | | O

- | - | -

| X |

- | - | -

| X |

Als weitere Herausforderung sollte der Computerspieler bei dieser Version der TicTacToeBoard-Herausforderung eine intelligentere Strategie gegen den menschlichen Gegner einsetzen. Bestimmen Sie das Spiel des Computers wie folgt:

  1. Wenn es dem Computer möglich ist, bei seinem nächsten Spiel zu gewinnen, sollte der Computer auf dem Gewinnfeld spielen.

  2. Wenn es für den menschlichen Gegner möglich ist, bei seinem nächsten Spiel zu gewinnen, sollte der Computer auf dem Gewinnfeld des menschlichen Gegners spielen, um den Gewinn zu blockieren.

  3. Wenn das mittlere Quadrat verfügbar ist, sollte der Computer das mittlere Quadrat einnehmen.

  4. Wenn ein Eckquadrat verfügbar ist, sollte der Computer in einer der verfügbaren Ecken spielen.

  5. Der Computer sollte in einem verfügbaren Kantenquadrat spielen.

Beachten Sie, dass Sie zur Durchführung dieser Strategie eine Routine entwickeln müssen, die bestimmen kann, ob ein Spieler bei seinem nächsten Zug gewinnen kann. Um dies zu tun, müssen Sie jeden der acht, drei-in-einer-Reihe-Vektoren betrachten, um zu bestimmen, ob der Vektor ein leeres Quadrat enthält und ob jedes der anderen zwei Felder Markierungen für denselben Gegner enthält (ist, zwei X's oder zwei O's).

Sie können das tun, indem Sie 0 verwenden, um ein leeres Quadrat darzustellen, 1 um ein X darzustellen und 2 um ein O zu repräsentieren. Aber das würde ziemlich komplizierte Logik erfordern - so etwas wäre erforderlich, vorausgesetzt, dass s1, s2, und s3 sind ganze Zahlen, die den Inhalt der drei Quadrate eines der acht, drei in einer Reihe liegenden Vektoren enthalten:

if (s1 == 0 & s2 == 1 & s3 == 1) // X kann Gewinn durch Spielen in s1 if (s2 == 0 & s1 == 1 & s3 == 1) // X kann gewinnen durch Spielen in s2 if (s3 == 0 & s1 == 1 & s2 == 1) // X kann gewinnen, indem man in s3

spielt. Hier ein Tipp: Anstatt 0, 1 und 2 zu verwenden, um ein leeres Quadrat, ein X und ein O darzustellen, verwende stattdessen die Primzahlen 2, 3 und 5.Um dann zu bestimmen, ob ein Spieler einen bestimmten Vektor gewinnen kann, multiplizieren Sie einfach die drei Werte für diesen Vektor. Wenn das Ergebnis 18 ist, kann X gewinnen (233 = 18). Wenn das Ergebnis 50 ist, kann O gewinnen (255 = 50).

Beachten Sie auch, dass, obwohl diese Strategie eine Verbesserung gegenüber der Strategie ist, die für frühere Versionen des Programms verwendet wurde, es immer noch keine perfekte Strategie ist: Sie können den Computer immer noch mit der richtigen Abfolge von Spielen schlagen. Wenn Sie eine zusätzliche Herausforderung haben möchten, überlegen Sie sich, welche zusätzliche Strategie notwendig wäre, um das Spiel unwinnbar zu machen, und überlegen Sie dann, wie Sie die neue Strategie umsetzen können.

Die Lösung für diese Herausforderung finden Sie auf der Registerkarte Downloads der Produktseite Java All-in-One für Dummies, 4th Edition.

Viel Glück!

Java Programming Challenge: Hinzufügen von Arrays zum einfachen Tic-Tac-Toe-Programm

Die Wahl des Herausgebers

Bearbeiten in Photoshop Elements 10 Schnellfoto-Bearbeitungsmodus - Schnuller

Bearbeiten in Photoshop Elements 10 Schnellfoto-Bearbeitungsmodus - Schnuller

Schneller Foto-Bearbeitungsmodus ist eine abgespeckte Version des Modus "Full Photo Edit", der einfach grundlegende Fixingtools bereitstellt und mit einigen einzigartigen Funktionen aufwartet, z. B. eine Vorher-Nachher-Vorschau Ihres Bildes. Hier ist ein Schritt-für-Schritt-Workflow, den Sie im Schnellfoto-Bearbeitungsmodus verwenden können, um Ihre Fotos zu reparieren:

Zum Optimieren von Photoshop Elements-Bildern mit Fotoeffekten - Dummies

Zum Optimieren von Photoshop Elements-Bildern mit Fotoeffekten - Dummies

Fotoeffekte in Photoshop Elements 11 funktionieren wie Anwenden von Filtern; Das Dialogfeld "Filtergalerie" bietet Ihnen zahlreiche Optionen zum Anwenden eines Filters. Das geführte Bedienfeld bietet Ihnen Filtereffekte und führt Sie dann durch die Schritte zum Anpassen von Helligkeitswerte, Ändern von Farbton und Sättigung und Durchführen weiterer Anpassungen zum Vervollkommnen des Ergebnisses. Sie ...

Eingeben des Absatztyps in Photoshop Elements 11 - Dummies

Eingeben des Absatztyps in Photoshop Elements 11 - Dummies

Absatztyp in Photoshop Elements 11 ist ähnlich zu dem Text, den Sie in ein Textverarbeitungsprogramm eingeben, mit der Ausnahme, dass er in einem Textfeld oder einem Begrenzungsrahmen enthalten ist. Wenn Sie größere Textabschnitte haben, die Sie in ein Bild eingeben möchten, ist die Eingabe des Textes als Absatztyp die praktischste Option. Während ...

Die Wahl des Herausgebers

PHP-Anweisungen - Dummys

PHP-Anweisungen - Dummys

PHP ist eine Skriptsprache, die speziell für die Verwendung im Internet entwickelt wurde. Es enthält Funktionen, die Sie bei der Programmierung der Aufgaben unterstützen, die für die Entwicklung dynamischer Webanwendungen erforderlich sind. Diese Tabelle gibt einen kurzen Überblick über einige der Anweisungen, die Sie häufig verwenden werden: Anweisung Beschreibung array ("key" => "value", ...); Casts a ...

PHP-Schablonen-Systeme - Schablonen-Systeme

PHP-Schablonen-Systeme - Schablonen-Systeme

Können die Menge an Arbeit reduzieren, die Sie für die Erstellung einer Website in PHP benötigen. Wenn Sie eine Website erstellen, verwenden Sie häufig das gleiche Layout für die gesamte Website. Sie haben eine obere Portion, vielleicht mit einem Menü; ein Hauptinhaltsbereich; und ein unterer Teil, vielleicht mit Links oder ...

Make MySQL Datenbank Änderungen mit den ALTER Query - Dummies

Make MySQL Datenbank Änderungen mit den ALTER Query - Dummies

Die ALTER Query wird verwendet, um die Struktur von eine MySQL-Datenbank. In dieser Liste wird die Syntax für die Änderungen angezeigt, die Sie wahrscheinlich vornehmen möchten: ADD-Spaltenbezeichnung ALTER-Spaltenname SET-DEFAULT-Wert ALTER-Spaltenname DROP DEFAULT CHANGE-Spaltenname newcolname-Definition DROP-Spaltenname MODIFY-Spaltenname RENAME newtablename

Die Wahl des Herausgebers

Hochgeschwindigkeitsdatencaching mit NoSQL - Dummies

Hochgeschwindigkeitsdatencaching mit NoSQL - Dummies

Mit NoSQL haben Sie Hochgeschwindigkeits-Caching. Stellen Sie sich vor, Sie sind Bankangestellte und arbeiten mit drei anderen Kollegen zusammen. Jeder hat eine Reihe von Leuten, die bedient werden sollen. Einer der Kunden bleibt jedoch in der Schlange, um zu fragen, ob sein Scheck bereits eingelöst und der Betrag seinem Konto gutgeschrieben wurde. Wenn Sie ...

Wie man Einsichten aus Big Data kommuniziert - Dummies

Wie man Einsichten aus Big Data kommuniziert - Dummies

Big Data kann helfen, Einblicke zu gewinnen. Unternehmen gewinnen Wettbewerbsvorteile, wenn die richtigen Informationen zur richtigen Zeit an die richtigen Leute geliefert werden. Dies bedeutet, Erkenntnisse und Informationen aus Daten zu extrahieren und sie Entscheidungsträgern auf eine Weise zu vermitteln, die sie leicht verstehen. Schließlich sind Menschen weniger wahrscheinlich zu handeln, wenn sie ...

Zookeeper und HBase Reliability - dummies

Zookeeper und HBase Reliability - dummies

Zookeeper ist ein verteiltes Cluster von Servern, das gemeinsam zuverlässige Koordinations- und Synchronisationsdienste für Cluster-Anwendungen bereitstellt. .. Zugegeben, der Name "Zookeeper" mag auf den ersten Blick eine seltsame Wahl sein, aber wenn Sie verstehen, was es für einen HBase-Cluster tut, können Sie die Logik dahinter sehen. Beim Erstellen und Debuggen von verteilten Anwendungen ...