x-o-Spiel

Status
Nicht offen für weitere Antworten.
I

igelsalat

Gast
Hallo Leute,
Ich versuche gerade ein TicTacToe oder x-o-Spiel zu programmieren. Es ist eigentlich eine blöde Frage, aber ich schaffe es nicht, dass ich abwechselnd ein x und ein o angezeigt bekomme. Bisher habe ich entweder nur x- oder nur o-Ausgaben oder mitunter ganz lustige aber ungewollte Neuschöpfungen (ein x und der Rest o etc...).
Hat jemand die Zeit und die Lust, mir zu helfen?
Hier sind die drei Klassen, die benötigt werden:
Main-Klasse:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TicTacToe extends FensterMitController implements ActionListener
{

  JButton spielfeld[][] = new JButton[3][3];
  

  public TicTacToe() 
  {
    initialisiereAttribute();

    erzeugeMenue();
    setSize(500,500); 
    setVisible( true );
    
  }
  
  private void initialisiereAttribute()
  {
    JPanel spielfeldPanel = new JPanel();
    // Layout: drei Zeilen x drei Spalten
    spielfeldPanel.setLayout( new GridLayout(3,3) );  
    
    for( int i=0; i<3; i++ )
    {
      for( int j=0; j<3; j++ )
      {
        spielfeld[i][j] = new JButton();
        spielfeld[i][j].addActionListener( this ); 
        spielfeldPanel.add( spielfeld[i][j] );
      }
    }

    getContentPane().setLayout( new BorderLayout() );
    getContentPane().add( "Center", spielfeldPanel );
    
  }

  public void actionPerformed(ActionEvent event) 
  {
  	
    String Kommando = event.getActionCommand();
    //System.out.println( Kommando );

    if( Kommando.equals( "Ende" ) )
    {
      System.out.println( "Ende" );
    }	

    if( Kommando.equals( "Neues Spiel" ) )
    {
      System.out.println( "Neues Spiel" );
    }	
	
    for( int i=0; i<3; i++ )
    {
      for( int j=0; j<3; j++ )
      {
        // Ausloeser des Events ermitteln und mit den Buttons vergleichen  
        if( event.getSource().equals( spielfeld[i][j] ) )
        {
          spielfeld[i][j].setText(("x"));
          {
          do 
          	{
        	  spielfeld[i][j].setText(("o"));  
          	}
          while (spielfeld[i][j].equals("x"));
          }
        }
        	
        
        	
      }
    }
    
  }
  
  void erzeugeMenue()
  {
    // Menuebestandteile
    // neues Spiel mit Ctrl-N
    JMenuItem mi_neu = new JMenuItem( "Neues Spiel" );
    mi_neu.setActionCommand( "Neues Spiel" );
    mi_neu.addActionListener( this );

    // Ende mit Ctrl-E
    JMenuItem mi_ende = new JMenuItem( "Ende" );
    mi_ende.setActionCommand( "Ende" );
    mi_ende.addActionListener( this );
    
    JMenu m_spiel = new JMenu( "Spiel" );
    m_spiel.add( mi_neu );
    m_spiel.add( mi_ende );
    
    JMenuBar dieMenueleiste = new JMenuBar();
    dieMenueleiste.add( m_spiel );
  
    setJMenuBar( dieMenueleiste );
  }

  public static void main (String args[]) 
  {
    new TicTacToe();
  }

}

WindowController:
Code:
import java.awt.event.*;

public class WindowController implements WindowListener
{

  FensterMitController einFenster;
 
  public WindowController(FensterMitController fenster) 
  {
    einFenster = fenster;
  }
  
  public void windowClosing( WindowEvent event )
  {
    einFenster.setVisible(false);
    einFenster.dispose();
    System.exit(0);
  }
  
  public void windowDeactivated(WindowEvent p1) 
  {
  }
  public void windowClosed(WindowEvent p1) 
  {
  }
  public void windowDeiconified(WindowEvent p1) 
  {
  }
  public void windowOpened(WindowEvent p1) 
  {
  }
  public void windowIconified(WindowEvent p1) 
  {
  }
  public void windowActivated(WindowEvent p1) 
  {
  }
}

FensterMitController:
Code:
import java.awt.*;
import javax.swing.JFrame;

public class FensterMitController extends JFrame 
{
  private WindowController einFensterController;
  
  public FensterMitController() 
  {
    super();
    setSize( 200,100 );
    setTitle ("Fenster");
    setVisible( true );
    
    einFensterController = new WindowController( this );
    addWindowListener( einFensterController ); 
  }

  
}
Das Problem liegt im ersten Quellcode irgendwo zwischen Zeile 63 und 73, glaube ich. Aber mit vielen anderen Schleifenkombinationen habe ich leider Gewünschtes nicht erreichen können.
 

Campino

Top Contributor
Code:
for( int i=0; i<3; i++ )
    {
      for( int j=0; j<3; j++ )
      {
        // Ausloeser des Events ermitteln und mit den Buttons vergleichen 
        if( event.getSource().equals( spielfeld[i][j] ) )
        {
          spielfeld[i][j].setText(("x"));
          {
          do
             {
             spielfeld[i][j].setText(("o")); 
             }
          while (spielfeld[i][j].equals("x"));
          }
        }
           
       
           
      }
    }

Was soll das eigentlich sein? Im Moment ist das so:

Für Zeile i gehe alle Buttons(?) j durch (die beiden for- Schleifen)
Prüfe für jeden Button, ob er die Quelle des Events ist (also angeklickt wurde), wenn ja setzte den Text auf "x".
anschließend setzte solange den Buttontext auf "o", wie der Button "x" ist.

Das hat zwei Probleme:
1) Eine Schleife, in der immer wieder das selbe passiert, ist überflüssig. Und hier setzt die while- Schleife bei jedem Durchlauf den Text desselben Buttons wie im letzten Durchlauf, ab dem zweiten Durchlauf ändert sich also garnichts mehr.
2) In der Bedingung der while- Schleife prüfst du, ob der Button "x" ist. Ein Button ist aber kein String, deshalb wird diese Überprüfung IMMER false zurückgeben und ist überflüssig. Die Funktionsweise deines Programms wird sich garnicht ändern, wenn du statt der Schleife einfach nur spielfeld[j].setText("o"); schreibst. Und das das dann zur Folge hat, das ein auf "x" gesetzter Button sofort auf "o" gesetzt wird ist dir doch klar, oder?

Um den angeklickten Button zu finden ist deine doppelte for- Schleife schon okay. Dann willst du immer abwechselnd ein "x" und ein "o" setzten. Also musst du dir merken, was du zuletzt gesetzt hast und dann immer das Andere nehmen. Okay?

campino

PS:
Das Problem liegt im ersten Quellcode irgendwo zwischen Zeile 63 und 73, glaube ich. Aber mit vielen anderen Schleifenkombinationen habe ich leider Gewünschtes nicht erreichen können.
Wenn du das weißt, warum postest du dann alles? Glaubst du wir haben soviel Langeweile, dass wir mal eben ganz viel Code lesen wollen?
 
G

Guest

Gast
Erstmal sorry fürs Massenposten. Ich bin noch nicht so lange dabei.
Danke für die ausführliche Problembeschreibung. Das habe ich sogar fast zur Gänze verstanden :wink: . Aber wie "merke" ich mir denn, was ich zuletzt gesetzt habe?
 

Shadeo

Mitglied
Am einfachsten mit einem boolean, ich nenn den jetzt mal xTurn. Sagen wir mal true steht für ein "x" und false für ein "o". Setz ihn am Start des Spiels auf true oder false, je nachdem ob du mit "x" oder "o" beginnen willst.

Und dann bei deiner Überprüfung in der Schleife:

Wenn xTurn == true: Schreibe ein "x" und setze xTurn auf false
Wenn xTurn == false: Schreibe ein "o" und setze xTurn auf true
 
I

igelsalat

Gast
Ah, boolean. Das ist natürlich eine Idee. Ich weiß nicht, ob du es genau so meintest, aber ich habe jetzt Folgendes:
Code:
private boolean xturn;
  // hier findet die Ereignisverarbeitung der Buttons statt
  public void actionPerformed(ActionEvent event) 
  {
  	
    ...
	
    for( int i=0; i<3; i++ )
    {
      for( int j=0; j<3; j++ )
      {
        // Ausloeser des Events ermitteln und mit den Buttons vergleichen  
        if( event.getSource().equals( spielfeld[i][j] ) )
        {
        	if (xturn)
                spielfeld [i][j].setText (("x"));
        	else
                spielfeld [i][j].setText (("o"));
        	xturn = !xturn; 
        }
      }
    }
    
  }
Klappt auf jeden Fall sehr gut. Dankeschön. Der nächste Schritt, den ich versuchen werde, ist, dass das Spiel beendet ist bzw. (k)ein Sieger feststeht, sobald eine Reihe (waagerecht, senkrecht oder diagonal) mit jeweils einem x oder o belegt ist. Meine Idee ist, zur Prüfung der Buttons, je eine for-Schleife zum Durchlaufen der Spalten und der Zeilen und irgendwas mit if-Schleifen zum Prüfen der Diagonalen, anzuwenden. Mal gucken, ob ich das hinkriege ... :D .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
PrograJan Poker Spiel ruückfrage Java Basics - Anfänger-Themen 8
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
I Threads Spiel gol Java Basics - Anfänger-Themen 6
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
J ArrayList vergleichen im spiel Mastermind Java Basics - Anfänger-Themen 2
enesss tictactoe spiel Java Basics - Anfänger-Themen 5
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
Ekooekoo Hilfe spiel Java Basics - Anfänger-Themen 5
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
Kennewick Basketball Spiel Ergebnisse Java Basics - Anfänger-Themen 11
X Erste Schritte Hilfe bei einem kleinen Spiel. Java Basics - Anfänger-Themen 19
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
R Hangman-Spiel-zufälliges Wort ermitteln Java Basics - Anfänger-Themen 4
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
I Simples Risiko-Spiel Java Basics - Anfänger-Themen 5
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
T Startbildschirm für ein Spiel erstellen Java Basics - Anfänger-Themen 0
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
C Java Spiel Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Kamy Ein einfaches "Vier Gewinnt" Spiel für Anfängerin Java Basics - Anfänger-Themen 51
A Breakout-Spiel , Ball mit Platten abprallen lassen Java Basics - Anfänger-Themen 1
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
J Spiel mit Button klick starten Java Basics - Anfänger-Themen 9
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
M Spiel programmieren Java Basics - Anfänger-Themen 16
Spencer Reid Feedback zu kleinem Spiel Java Basics - Anfänger-Themen 4
kokojamboo92 Spiel programmieren Java Basics - Anfänger-Themen 1
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
I Spiel Java Basics - Anfänger-Themen 34
H ein einfaches Tic Tac Toe Spiel Java Basics - Anfänger-Themen 1
I Spiel programmieren. Java Basics - Anfänger-Themen 16
B Hilfe bei Escape - Spiel Java Basics - Anfänger-Themen 6
S Java-Spiel Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
K Klassen Registrierungsseite für ein Spiel Java Basics - Anfänger-Themen 6
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 3
J Programmierung Quiz Spiel Java Basics - Anfänger-Themen 2
M Brauche Tipps für ein Spiel Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
Mxxxt Mosaik Spiel - Steuerpanel wird nicht angezeigt Java Basics - Anfänger-Themen 5
M Erste Schritte Zufallszahl Spiel Problem Java Basics - Anfänger-Themen 7
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
H Spiel Kniffel: Gesamtes Array untersuchen. Java Basics - Anfänger-Themen 15
Tacofan Hangman als fertiges Spiel Java Basics - Anfänger-Themen 7
M Array und Objektorientierung? - TicTacToe Spiel Java Basics - Anfänger-Themen 43
C Klassen Sudoku-Spiel Werte werden nicht gesetzt Java Basics - Anfänger-Themen 4
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
W Tic Tac Toe Spiel ohne Arrays Java Basics - Anfänger-Themen 7
S Im objektorientiertem "Spiel" kämpfen Java Basics - Anfänger-Themen 3
I Klassen Umsetzungsfrage zu Spiel "Zuul" Java Basics - Anfänger-Themen 3
F Mastermind Spiel Java Basics - Anfänger-Themen 9
H Liste ausgeben (Spiel Hey Fisch (software-challenge) ändern Anzahl Fische) Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2
J Java Spiel Zufallsauswahl für Zugbeginn Java Basics - Anfänger-Themen 3
J Frage Antwort Spiel - Wie Zeitcountdown realisieren? Java Basics - Anfänger-Themen 2
L Erste Schritte Spiel: Glückliches Sieben Java Basics - Anfänger-Themen 3
T Hangman spiel Java Basics - Anfänger-Themen 5
J 2 Pc's - Spiel gegeneinander ?! Java Basics - Anfänger-Themen 3
V Spiel Programmieren Java Basics - Anfänger-Themen 9
P 2D-Spiel und Bildschirmgröße Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
T Blöcke für ein Jump and Run Spiel Java Basics - Anfänger-Themen 8
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
S 2D-Spiel im Vollbild an größe anpassen? Java Basics - Anfänger-Themen 3
M hangman spiel Java Basics - Anfänger-Themen 1
K JTextField in ein Spiel einfügen Java Basics - Anfänger-Themen 2
S Mosaik Spiel Java Basics - Anfänger-Themen 19
pinar memory spiel Java Basics - Anfänger-Themen 10
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
K Erste Schritte Wie mache ich weiter? (Spiel-Menü) Java Basics - Anfänger-Themen 9
C Java Applet in html. Pong - old school Spiel Java Basics - Anfänger-Themen 10
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
K Schere Stein Papier Spiel Java Basics - Anfänger-Themen 3
A Feedback zum Spiel Java Basics - Anfänger-Themen 5
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
C Lotto Spiel Java Basics - Anfänger-Themen 23
Jagson Dotcom Spiel - Dots Random setzen Java Basics - Anfänger-Themen 8
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
K Diverse Bugs in einem Snake Spiel Java Basics - Anfänger-Themen 4
2 Lotto-Spiel Java Basics - Anfänger-Themen 9
X Datentypen Probleme mit Char bei meinem 1. Spiel Java Basics - Anfänger-Themen 20
D Erste Schritte Einstieg in die Java Spiel Programmierung Java Basics - Anfänger-Themen 7
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
K Hilfe, komme nicht weiter in meinem JAVA-Spiel Java Basics - Anfänger-Themen 3
J Programm(Spiel) neustarten Java Basics - Anfänger-Themen 8
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben