Siegbedingungen Tic Tac Toe

SharKu

Neues Mitglied
Hallo zusammen,

ich bin gerade dabei ein simples TicTacToe-Spiel in Form eines GUI zu schreiben und habe bei den Siegbedingungen jetzt ein Problem.

Irgendetwas ist bei den Feldern(s. Bild) 2,5,6,7,8 fehlerhaft.

Sobald ein Zeichen auf diese Felder gesetzt wird gibt das Programm aus "Spieler xy hat gewonnen." (je nach dem welcher Spieler gerade am Zug ist)

Die Qualität von dem Programm ist erstmal irrelevant. Es ist nicht gut, aber es funktioniert.

Hier meine bisherigen Siegbedingungen:
[JAVA=59]//Siegbedingungen
if(tttb[0].getText().equals(tttb[1].getText()) && tttb[1].getText().equals(tttb[2].getText()) != tttb[0].getText().isEmpty() ||
tttb[3].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[5].getText()) != tttb[3].getText().isEmpty() ||
tttb[3].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[5].getText()) != tttb[3].getText().isEmpty() ||
tttb[6].getText().equals(tttb[7].getText()) && tttb[7].getText().equals(tttb[8].getText()) != tttb[6].getText().isEmpty() ||
tttb[0].getText().equals(tttb[3].getText()) && tttb[3].getText().equals(tttb[6].getText()) != tttb[0].getText().isEmpty() ||
tttb[1].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[7].getText()) != tttb[1].getText().isEmpty() ||
tttb[2].getText().equals(tttb[5].getText()) && tttb[5].getText().equals(tttb[8].getText()) != tttb[2].getText().isEmpty() ||
tttb[2].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[6].getText()) != tttb[2].getText().isEmpty() ||
tttb[0].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[8].getText()) != tttb[0].getText().isEmpty()){
System.out.println("Spieler "+sp+" hat gewonnen.");
}
else{
x++;
}
if(x==9){
System.out.println("Tie");
}
[/code]

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class TicTacToetestbutton extends JFrame implements ActionListener{
int sp;
int x=0;
JLabel spieler;
TTTButton tttb[];
JButton abbrechen;
JButton neu;
JPanel spiel;
public TicTacToetestbutton(){
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//Infozeile
JPanel info= new JPanel();
info.setLayout(new FlowLayout());
sp=1;
spieler = new JLabel("Spieler "+sp);
info.add(spieler);

//Spielfeld
tttb = new TTTButton[9];
spiel=new JPanel();
spiel.setLayout(new GridLayout(3,3));
for(int i=0; i<=8;i++){
spiel.add(tttb);
}


JPanel opt= new JPanel();
opt.setLayout(new FlowLayout());
neu=new JButton("Neu");
abbrechen=new JButton("Abbrechen");
abbrechen.addActionListener(this);
neu.addActionListener(this);
opt.add(neu);
opt.add(abbrechen);

//Anordnung
this.getContentPane().add(info, BorderLayout.NORTH);
this.getContentPane().add(spiel, BorderLayout.CENTER);
this.getContentPane().add(opt, BorderLayout.SOUTH);
this.getContentPane().add(new TTTButton());

}

public void actionPerformed(ActionEvent ae) {

if(ae.getSource()==abbrechen){
System.exit(0);
}
else if(ae.getSource()==neu){

}

//Siegbedingungen
if(tttb[0].getText().equals(tttb[1].getText()) && tttb[1].getText().equals(tttb[2].getText()) != tttb[0].getText().isEmpty() ||
tttb[3].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[5].getText()) != tttb[3].getText().isEmpty() ||
tttb[3].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[5].getText()) != tttb[3].getText().isEmpty() ||
tttb[6].getText().equals(tttb[7].getText()) && tttb[7].getText().equals(tttb[8].getText()) != tttb[6].getText().isEmpty() ||
tttb[0].getText().equals(tttb[3].getText()) && tttb[3].getText().equals(tttb[6].getText()) != tttb[0].getText().isEmpty() ||
tttb[1].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[7].getText()) != tttb[1].getText().isEmpty() ||
tttb[2].getText().equals(tttb[5].getText()) && tttb[5].getText().equals(tttb[8].getText()) != tttb[2].getText().isEmpty() ||
tttb[2].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[6].getText()) != tttb[2].getText().isEmpty() ||
tttb[0].getText().equals(tttb[4].getText()) && tttb[4].getText().equals(tttb[8].getText()) != tttb[0].getText().isEmpty()){
System.out.println("Spieler "+sp+" hat gewonnen.");
}
else{
x++;
}
if(x==9){
System.out.println("Tie");
}
if(sp==1){
sp++;
}
else{sp=1;}
spieler.setText("Spieler "+sp);
}
public static void main(String[] args) {
TicTacToetestbutton window = new TicTacToetestbutton();
window.setSize(600, 650);
window.setVisible(true);

}
}


Den Button als Ableitung von JButton zu schreiben war Aufgabe vom Lehrer
Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;


public class TTTButton extends TicTacToetestbutton implements ActionListener{
          private static JButton tttb;
    public TTTButton(){
          tttb=new JButton();                   
          tttb.addActionListener(this);
          tttb.setFont(new Font("Arial",Font.BOLD,150));          
    }   
    
    public void actionPerformed(ActionEvent ae) {
        
        if(ae.getSource()==tttb){
        if(sp==1){
            tttb.setText("X");
            tttb.setEnabled(false);
        }
        else{
            tttb.setText("O");
            tttb.setEnabled(false);
        }
        }
    }
}

Ich hoffe mir kann jemand dabei helfen

LG SharKu

btw Fehlermeldungen gibt es keine.
 

Anhänge

  • tictactoe.jpg
    tictactoe.jpg
    27,4 KB · Aufrufe: 27
Zuletzt bearbeitet:

Samuel72

Aktives Mitglied
Die Qualität von dem Programm ist erstmal irrelevant.

Mit Verlaub, wenn du im Forum um Hilfe bittest, ist die Qualität eben doch nicht ganz irrelevant.
Wer sollte es sich auch antun, solch einen Code zu überprüfen.
(Mir ist nur aufgefallen, dass eine Zeile doppelt ist, aber das dürfte kaum eine Rolle spielen.)

Jedenfalls schreit dieses Problem ja geradezu nach einer Lösung mit Array und Schleife.
 

Deros

Bekanntes Mitglied
zerleg die if anweisungen in 8 if-anweisungen und guck dann welche bedinung falsch zuschlägt, wenn du den debuger nicht benutzen kannst/willst.

Den unvollständigen Code wird sich so wohl kaum einer antun.
 

Neue Themen


Oben