TitcTacToe Java

Quidamsheart

Mitglied
Guten Tag, ( falls das das falsche Forum ist, tut es mir wahnsinnig Leid!)
Mir ist bewusst, dass es zu diesem Thema wahnsinnig viele Foren gibt, aber im keinen habe ich wirklich eine Antwort auf meine Frage finden können, vielleicht bin ich auch zu doof.


Code:
 import java.util.*;
public class TicTacToe1 {

   public static void main(String[] args) {
       static char[] spielfeld= new char [9];
       static Scanner sc= new Scanner(System.in);
       boolean doRepeat=true;
       int i;
       for( i= 0; i<9;i++) {
           spielfeld[I]='_';
       }
   }
do {
   do {
       System.out.println("Computer x und Spieler o");
       int c = (int)(Math.random()*9);
       static int benutzer= sc.nextInt(); ;
     
     
       if(spielfeld[0]==c ) {
           System.out.println("");
       } else (benutzer == spielfeld[0]) {
         
       }
   }
}
if (spielfeld[0]==spielfeld[1] && spielfeld[1]= spielfeld[2]){
system.out.println (" Gewonnen")

Das ist mein Quellcode und bestimmt 100000 Versuch ein Spiel zu programmieren. Dieses Spiel soll gegen den Computer sein und es soll immer wieder geprüft werden, ob schon jemand gewonnen hat, ebenso soll man in der Konsole eine Abbildung des Spiels haben.
Wahrscheinlich habe ich alles falsch gemacht, aber ich bin blutiger Anfänger und das ist eine Hausaufgabe.
Meine Fragen sind also, wie bekomme ich es hin, dass der Computer auf das Spielfeld sein Kreuz macht, aber nichts überschreibt und wie kann ich dafür sorgen, dass der Spieler halt ins Feld sein o machen kann? Kann man mich verstehen? Eine Freundin gab mir folgenden Denkanstoß:if( Zug Spieler) -> lese Zug ein, prüfe auf korrekte Angaben, setze "steinchen"
Else( Zug Computer) -> zufällige Platzierung, prüfe Korrektheit (Spielfeld frei?) wenn nicht wiederhole, ansonsten setze steinchen

Aber wie bekomme ich das umgesetzt? Wahrscheinlich ist es wirklich total einfach und ich stelle mich nur sehr doof an ._. Kann mir bitte irgendjemand helfen?
 
Zuletzt bearbeitet:

Quidamsheart

Mitglied
Unser Professer hat gesagt, dass wir es mit einem 1d Array machen sollen, ich dachte auch an 2d, aber ich dachte, dass das nicht geht oder ich einen Denkfehler habe.
 

SchwarzWeiß

Bekanntes Mitglied
Oder noch besser: [code=java
Nein du hast keinen Denkfehler, aber wenn er das gesagt hat, muss man sich wohl daran halten.
Also mein Tipp wäre, die Teilprobleme in einzelne Methoden zu zerlegen und dann nach und nach versuchen zu implementieren. Du kannst ja damit anfangen, eine Methode für die Überprüfung der Benutzereingabe zu schreiben. Das wäre dann zum Beispiel, ob eine Zahl innerhalb des Array-Bereichs eingegeben wurde oder ob das Feld schon besetzt ist.
 

Robat

Top Contributor
Ein 1d array reicht hier völlig aus. ;)
Fang erstmal mit den leichteren an: wie lässt man in java den User eine Eingabe machen?
Wenn du dein Programm soweit hast dass die Eingaben des Benutzers funktionieren dann kannst du dich an den Computer wagen.
 

Quidamsheart

Mitglied
Oder noch besser:
Code:
Das wäre doch dann so, dass ich für alles, quasi sowas wie eine neue Klasse eröffne und dann später in einer Main zusammenfüge oder?


und eine Eingabe durch den Benutzer mache ich doch, in dem ich einen Datentyp, wie zum Beispiel eine Int Zahl benutze und durch den Benutzer quasi eine Zahl bekommt, so wie hier:
Java:
scanner eingabe= new Scanner(System.in);

int benutzer= eingabe.nextInt();
 

SchwarzWeiß

Bekanntes Mitglied
Ja das mit der Eingabe sollte so passen.
Mehrere Klassen wäre der nächste Schritt, aber für dieses kleine Projekt noch nicht zwingend. Ich meinte Methoden, also quasi so:
Java:
public class TicTacToe1  {

  public static void main(String[] args) {
    ...
    ueberpruefeEingabe(...)
    ...
  }
 
  private static ... ueberpruefeEingabe(...){
    ...
  }
}
 

Quidamsheart

Mitglied
Java:
import java.util.Arrays;
import java.util.*;

public class TicTacToe {

   public static void main(String[] args) {
   private char[] spielfeld;
   
   
       public TicTacToe() {
       { spielfeld= new char[9]; //3
   for (int i= 0; i< spielfeld.length; i++)
   {
       Arrays.fill(spielfeld [i],' ');
   
   } }
       }
   public void displayBoard()
   { for (int i=0; i < spielfeld.length; i++) {
       if (i== 0 || i==3 || i==6) {
           System.out.println("_");
       }  if (i== 1 || i==4 || i==7) {
           System.out.println("|"+"_"+"|");
       }if (i== 2|| i==5 || i==8) {
           System.out.println("_");
       }
   }
   }
   
   /* Also ich habe versucht das Spielbrett zu erstellen,
   daher habe ich eben diesen 1d Char und eben auch diese for Abfrage, damit es eben innerhalb des Feldes bleibt.
   Des Weiteren habe ich durch diese Funktion nach public void dem Ding eine Gestalt zu geben */
   
   public boolean makeMove(char player, int i)
   { if (i >=0 && i <=9) {
       
       if (spielfeld [i] !=' ')
      return false;
       else { spielfeld[i]= player;
       return true;
       }
           }
        else
           return false;
   } }
   
   /* und ab Boolean habe ich versucht klar zu machen, was erlaubt ist, also wie sich der Speiler im Feld bewegen darf
   bzw. wie er sein späteres o platzieren darf */
}

so, dass habe ich nun versucht. Ergibt das irgendwie Sinn oder war das eher für die Katz?
Wenn ich versuche die eine geschweifte Klammer zu machen für die main funktion, beginnt er zu meckern. Warum? So meckert er ja leider auch, also eclipse und ich versteh nicht warum... Vermutlich habe ich wieder riesige Fehler eingebaut und seh sie nicht. Danke für eure Geduld!
 

JStein52

Top Contributor
Wenn du es richtig formatierst siehst du wo was mit den Klammern nicht stimmt:
Code:
import java.util.Arrays;


import java.util.*;

public class TicTacToe {

    public static void main(String[] args) {
    private char[] spielfeld;

    public TicTacToe() {
        {
            spielfeld = new char[9]; //3
            for (int i = 0; i < spielfeld.length; i++) {
                Arrays.fill(spielfeld[i], ' ');

            }
        }
    }

    public void displayBoard() {
        for (int i = 0; i < spielfeld.length; i++) {
            if (i == 0 || i == 3 || i == 6) {
                System.out.println("_");
            }
            if (i == 1 || i == 4 || i == 7) {
                System.out.println("|" + "_" + "|");
            }
            if (i == 2 || i == 5 || i == 8) {
                System.out.println("_");
            }
        }
    }

    /* Also ich habe versucht das Spielbrett zu erstellen,
   daher habe ich eben diesen 1d Char und eben auch diese for Abfrage, damit es eben innerhalb des Feldes bleibt.
   Des Weiteren habe ich durch diese Funktion nach public void dem Ding eine Gestalt zu geben */
    public boolean makeMove(char player, int i) {
        if (i >= 0 && i <= 9) {

            if (spielfeld[i] != ' ') {
                return false;
            } else {
                spielfeld[i] = player;
                return true;
            }
        } else {
            return false;
        }
    }
}

/* und ab Boolean habe ich versucht klar zu machen, was erlaubt ist, also wie sich der Speiler im Feld bewegen darf
   bzw. wie er sein späteres o platzieren darf */
}
 

Quidamsheart

Mitglied
oh, danke, wie formatiere ich es richtig? Gibt es dafür ein Tastenkürzel?


trotzalledem verstehe ich das Problem nicht, wenn ich
Arrays.fill
schreibe, weil dann immer wieder kommt, dass ich das nicht machen kann, weil ich da ein Space in die Klammer mache und das auch ein Char geht. Bei meinen Mitschülern geht das jedoch o_O
 
Zuletzt bearbeitet:

JStein52

Top Contributor
Also ich arbeite mit NetBeans und da ist es Alt+Umschalt+f
und das mit dem fill geht so:
Code:
public class TicTacToe {

    private char[] spielfeld;

    public static void main(String[] args) {

    }

    public TicTacToe() {
        spielfeld = new char[9]; //3
        Arrays.fill(spielfeld, ' ');
    }

    public void displayBoard() {
        for (int i = 0; i < spielfeld.length; i++) {
            if (i == 0 || i == 3 || i == 6) {
                System.out.println("_");
            }
            if (i == 1 || i == 4 || i == 7) {
                System.out.println("|" + "_" + "|");
            }
            if (i == 2 || i == 5 || i == 8) {
                System.out.println("_");
            }
        }
    }

    /* Also ich habe versucht das Spielbrett zu erstellen,
   daher habe ich eben diesen 1d Char und eben auch diese for Abfrage, damit es eben innerhalb des Feldes bleibt.
   Des Weiteren habe ich durch diese Funktion nach public void dem Ding eine Gestalt zu geben */
    public boolean makeMove(char player, int i) {
        if (i >= 0 && i <= 9) {

            if (spielfeld[i] != ' ') {
                return false;
            } else {
                spielfeld[i] = player;
                return true;
            }
        } else {
            return false;
        }
    }

/* und ab Boolean habe ich versucht klar zu machen, was erlaubt ist, also wie sich der Speiler im Feld bewegen darf
   bzw. wie er sein späteres o platzieren darf */
}

Du brauchst da keine Schleife drum sondern fill(...) füllt das ganze Array auf einen Schlag mit Blanks
 

JStein52

Top Contributor
Und einen Tip noch: ich würde mir eine Methode
Code:
private int getLocation(int row, int column)
machen die mir Zeile und Spalte in den passenden Index deines linearen Arrays umrechnet. Ich glaube nämlich dass dein Benutzer die Spielzuege sicher per Zeile, Spalte eingeben möchte und dass du diese Umrechnung des öfteren brauchen wirst.

Edit: es gibt da eine passende "Formel" dafür ;)
 

Quidamsheart

Mitglied
Benutzer gegen den Computer, das ist ja meine persönliche Schwierigkeit... Wenn es zwei Benutzer wären, hätte ich auch etwas im Internet gefunden, aber wegen des PCs versteh ich es bei den meisten nicht wirklich, also was ich dann da anders machen muss.
 

JStein52

Top Contributor
Es gibt auch für Computer gegen Mensch Beispiele im Internet, je nachdem wie weit du mit Java umgehen kannst.
Ich finde z.B. diese Seite ganz gut weil es da einige Strategien für Computerzüge zur Auswahl gibt:
https://www.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html
Die muss man natürlich für sein "Spielbrett" anpassen aber die Ideen sind ganz gut. Von ganz einfach, kann spielen bis sehr gut und du hast keine Chance gegen den.
 

JStein52

Top Contributor
Zu der Seite da oben gibt es auch noch eine vorherige Seite wo TicTacToe schrittweise von einem Consolenprogramm mit Scanner und println bis zu einer SWING-Gui erweitert wird. Und für alle Versionen kannst du diese Computerstrategien anwenden weil du im Prinzip nur die int[] move() - Methode an der Stelle aufrufen musst wo der Computer am Zug ist un du kriegst dann in dem zurückgegebenen Array zeile und spalte des Computer-Zuges zurück, genau so als hätte der Spieler es per Scanner eingegeben.

Edit: sorry, hatte den Link vergessen https://www.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe.html
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
Gokul Java chart library suggestion for web application? Java Basics - Anfänger-Themen 2
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
S Text Formatierung in Java Java Basics - Anfänger-Themen 2
B Erste Schritte yaml parsen in Java Java Basics - Anfänger-Themen 19
C Methoden Umlaute in Java Java Basics - Anfänger-Themen 18
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 3
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
G Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
G Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben