Methoden Tic Tac Toe PC

santobi2

Mitglied
Ich würde gernin einem tic tac toe spiel einen computer-gegner programmieren. Allerdings hab ich eine methode vorgegeben und zwar :
Java:
public int Zufallszahl(int bis)
{
        java.util.Random r = new java.util.Random();
        return r.nextInt(bis);
}
ich weiß aber nicht wie ich nun weiter machen muss, da ich recht neu mit java programmiere
 
Zuletzt bearbeitet von einem Moderator:
Die Methode (bitte in Zukunft die passenden Code-Tags verwenden) gibt dir ja bisher nur eine Zufallszahl zurück. Wie möchtest/sollst du denn den Gegner gestalten? Soll er nur zufällig ein Kästchen taggen, was noch nicht ausgewählt wurde? Oder soll er tatsächlich eine Strategie verfolgen?
Das ist ja bisher nicht viel, hast du noch nichts anderes?
 
Nur zufällig ein noch nicht belegtes Kästchen.
ich habe bereits einen automatischen Spielerwechsel(man könnte schon manuell spielen) ,Fehlermeldung bei belegtem Feld, Überprüfung ob jemand gewonnen hat, und eine funktion um das Feld wieder zurück zu setzen
Achja und inwiefern richtige code-tags?
 
Und was entscheidet, welche Zahl der Methode übergeben wird?

Edit: Wäre wohl am einfachsten, wenn du mal ein wenig mehr vom Code postest (Die Code-Tags nicht vergessen!)
 
Java:
//
//konstruktor
    private ZELLE [][] Spielfeld;
    int Spieler = 1;
    private int [][] prüffeld;
    public SPIEL()
    {
        Spielfeld = new ZELLE [3][3];
     
        prüffeld = new int [3][3];
        //erzeugung der Zellen
        for(int i=0;i<3;i++){
            for(int n=0;n<3;n++){
                Spielfeld[n][i] = new ZELLE (200*i+20,200*n+50);
            }
        }
    }
das is das erzeugen vom spielfeld mit Konstruktor
Java:
//
public void Setzen(int x, int y){
         //Überprüfung des Spielerwerts, entsprechender Buchstabe wird gesetzt
         if (Spieler == 1){
             if(prüffeld[x][y]== 1||prüffeld[x][y]==2)
             {System.out.println("Feld belegt");
                }else
            {
             Spielfeld[x][y].TextSetzen("   X");
             prüffeld[x][x]=1;
             Spieler = 2;
            }
           
        }
        else {
             if(prüffeld[x][y]== 1||prüffeld[x][y]==2)
            { System.out.println("Feld belegt");
            }
            else{
             Spielfeld[x][y].TextSetzen("   O");
             prüffeld[x][y]=2;
             Spieler = 1;}
        }
        // Methode zum Sieg überprüfen wird aufgerufen
        Sieg();
und das zum manuell spielen

Die methode Sieg ist einfach eine widerholung aus
Java:
//
if (Spielfeld[0][0].getText().equals("   X")&& Spielfeld[0][1].getText().equals("   X")&& Spielfeld[0][2].getText().equals("   X"))
        {
           System.out.println("Spieler 1 hat gewonnen");
           Zurücksetzen();
        }
nur mit jeweils anderen zahlenwerten für die koordinaten bzw der Buchstabe des Spielers
 
Für mich ergibt sich jetzt leider weiterhin nicht, warum der Methode eine Zahl übergeben wird. Ansonsten hätte ich gedacht, dass du einfach den Feldern Nummern zuweist, eine Zahl zwischen 0 und 8 würfelst und dann geprüft wird, ob das Feld schon belegt ist, falls dies der Fall ist natürlich neu würfeln und so weiter.
Vielleicht hat ja wer anders noch eine Idee - ich sehe aber grade leider nicht, was du genau mit dieser Methode machen sollst.
 
ich hab ne neue methode erstellt und zwar
Java:
 public void SetzenPC(int x, int y){
       int X = Zufallszahl(2);
       int Y = Zufallszahl(2);
       if (prüffeld[x][y]==(1)||prüffeld[x][y]==(2))
            {System.out.println("Feld belegt");
                }else
            {
             Spielfeld[x][y].TextSetzen("   X");
          }
       if (prüffeld[X][Y]== 1||prüffeld[X][Y]==2){
          X = Zufallszahl(2);
          Y = Zufallszahl(2);
        }
        else{
           Spielfeld[X][Y].TextSetzen("   O");
        }
    }
ich habs mit == gemacht, da bei .equals ein fehler aufgetreten ist. Nun ist allerdings das problem, dass ich nicht weiß was ich einprogrammieren muss damit der Computer kein Feld überschreibt (obwohl ich es probiert habe mit dem prüffeld)
 
Mittlerweile hab ich es geschafft. Ich musste eine funktion importieren und dann einfach solange zufallszahlen erstellen lassen, bis ein Feld gefunden wurde das nicht belegt war. Für diejenigen die es interessiert :
Java:
import java.util.Random;
sowie
Java:
        do{
        X = rand.nextInt(3) + 0;
        Y = rand.nextInt(3) + 0;
        } while(prueffeld[X][Y]== 1||prueffeld[X][Y]==2);
 
Das hast du gut gemacht. 🙂

Damit es aber nich zum Super-Gau kommt solltest du aber unbedingt den Rat von @VfL_Freak beherzigen und equals() für JEDE String vergleichs operation schreiben.

Denn es könnte ein Vergleich false sein wo du das gar nicht willst.
 

Zurück
Oben