# Ein einfaches Spiel: TicTacToe. Fehler und Vorschläge



## Purgatory (11. Dez 2006)

Es geht um das einfach Spiel "TicTacToe", in dem man versuchen muss 3 richtige in einer Reihe zu kriegen, egal ob horizontal, vertikal oder diagonal.. Nun bin ich soweit: Ich habe das layout und dass die buttons sich ändern bzw auch blockiert werden, dies jedoch mit einer if else konstruktion (auch andere ideen erwünscht). Hab in Zeile 248 und 250 noch einen Fehler, weiss aber gerade nicht was, weil ich hundemüde bin =) Hier das, was ich habe:



> import java.awt.*;
> import java.awt.event.*;
> class TicTacToe extends Frame
> {
> ...



Nun, kann mir jemand sagen, wie ich es schaffe, dass er mir das Spiel zugunsten des entsprechende Spielers entscheidet bzw ein unentschieden erkennt? Dachte da an eine sache mit integer wobei der integer immer weiter ansteigt pro gedrückte taste und dann bei 9 halt abfragt wo was steht um zu entscheiden wer gewinnt... Bin wie gesagt noch relativer anfänger und würde mich freuen, wenn mir jemand mit wenig fachbefehlen weiterhelfen kann  

EDIT: Ist unübersichtlich, hier noch ein DateiDownload von der java datei:
TicTacToe


----------



## SlaterB (11. Dez 2006)

cooles Programm, geht auch kürzer 


```
import java.awt.Button;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TicTacToe extends Frame {

	Button[] b = new Button[9];

	int i = 1;

	public TicTacToe() {
		setTitle("TicTacToe version 0.015 by Michael S.");
		setSize(500, 500);
		setLayout(new GridLayout(3, 3));
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		ActionListener listy = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Button b = (Button) e.getSource();
				if (i % 2 == 0) {
					b.setLabel("O");
				} else {
					b.setLabel("X");
				}
				b.setEnabled(false);
				i++;
			}
		};

		Font f = new Font("Times New Roman",0,72);
		for (int i = 0; i < 9; i++) {
			b[i] = new Button("?");
			b[i].addActionListener(listy);
			b[i].setFont(f);
			add(b[i]);
		}
		setVisible(true);
	}
	public static void main(String[] args) {
		new TicTacToe();
	}

}
```

dir fehlt noch eine Operation die das Spielfeld prüft,
diese muss alle Reihen und Spalten anschauen,

a la


```
spieler = "X" // oder "O"

// erste Reihe:
if (spieler.equals(ol.getText()) && zweites && drittes)
  gewonnen
else
..
```

wenn du so wie in meinem Beispiel mit Array arbeitest lässt sich da noch ein wenig mathematisch tricksen, 
um Codewiederholung zu sparen,

aber bei 3 Zeilen + 3 Spalten + 2 Diagonalen lohnt sich das kaum,
dann eben die 8 Zeilen ausschreiben,

die Array-Positionen 0,1,2 entsprechen ol, om und or usw.

------

wenn du übrigens Arrays generell nicht magst, dann beschränke dich wenigstens auf einen ActionListener listy wie in meinem Code,
kannst dann

ol.addActionListener(listy);
om.addActionListener(listy);
or.addActionListener(listy);
usw. schreiben,
das ist immer noch deulich kürzer


----------



## Purgatory (12. Dez 2006)

oh nein, equals, ich hab jetzt voll viel rumprobiert, aber er erkennt den spieler nicht als variable... dann hab ichs mit string versucht, den erkennt er aber auch nicht! Weiss jemand wie ich die equals sache in mein programme bekomme?


----------



## SlaterB (13. Dez 2006)

erkläre genauer was nicht geht


String spieler = "X";
String buttonText = ol.getText();

if (spieler.equals(buttonText )) {
 ..
}


----------

