# Siegbedingungen Tic Tac Toe



## SharKu (5. Sep 2013)

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]



Spoiler: Gesamter Quelltext Hauptprogramm



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);

    }
}

_


_


Spoiler: Quelltext Button



Den Button als Ableitung von JButton zu schreiben war Aufgabe vom Lehrer


		Java:In die Zwischenablage kopieren


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._


----------



## Samuel72 (6. Sep 2013)

SharKu hat gesagt.:


> 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 (6. Sep 2013)

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.


----------

