# Tic-Tac-Toe



## BlueJ_Noob (8. Feb 2011)

Hi wir sollen ein Tic-Tac-Toe Spiel machen und ich bin gerade bei der Klasse "Spiel" und komme nicht weiter. Zu Der Klasse Feld ist zu wissen, dass das int die Position angibt.
In dieser Version kann man jetzt nur für jedes Feld spezifisch die Methode "setKreuz" oder "setKreis" machen. also für f1, f2, f3... immer spezielle methoden. Ich hätte aber gerne das man mit einer Methode direkt das Feld auswählen kann und dann eintragen ob es ein Kreuz oder Kreis sein soll.
Wäre nett wenn jemand mir bei diesem trivial Problem helfen könnte ^^

```
/**
 * 
 */
public class Spiel
{
   private Feld F1;
   private Feld F2;
   private Feld F3;
   private Feld F4;
   private Feld F5;
   private Feld F6;
   private Feld F7;
   private Feld F8;
   private Feld F9;
   

    /**
     * 
     */
    public Spiel()
    {
        F1 = new Feld(1);
        F2 = new Feld(2);
        F3 = new Feld(3);
        F4 = new Feld(4);
        F5 = new Feld(5);
        F6 = new Feld(6);
        F7 = new Feld(7);
        F8 = new Feld(8);
        F9 = new Feld(9);
        
    }

    /**
     * 
     */
    public void setKreuzF1()
    {
        F1.setKreuz();

    }
    
        
    /**
     * 
     */
    public void setKreisF1()
    {
        F1.setKreis();

    }
    
    
}

//
EIn Ausschnitt der Klasse Feld:

   private boolean Frei;
   public int Position;
   private String Symbol;

    /**
     * 
     */
    public void setKreuz() { 
        if (Frei) { 
        this.Symbol = "Kreuz";
        this.Frei = false;  
        } 
        else {
            System.out.println("Feld ist schon belegt.");
        }
```


----------



## SlaterB (8. Feb 2011)

es bietet sich unbedingt an, die 9 Felder in einem Array zu speichern,
dann etwa
[c]array[position].setKreuz();[/c]


----------



## Nicer (8. Feb 2011)

Ich hab in meiner Freizeit mal ein TicTacToe mit KI und allen spielereien programmiert. Ich hab das über Buttons gemacht. Hier meine Methode zum setzen der Zeichen auf die Buttons :


```
private void feldklick(JButton button) { // Methode für Spielklick

			button.setText(spieler);
			button.setEnabled(false);

			if (spieler.equals("O")) {
				button.setForeground(Color.RED);
				klicksO = klicksO + 1;
				spieler = "X";
				spielerAmZug.setText(spieler + " " + "ist am Zug!");
			} else {
				button.setForeground(Color.BLUE);
				klicksX = klicksX + 1;
				spieler = "O";
				spielerAmZug.setText(spieler + " " + "ist am Zug!");
			}

		}
```

Dadurch dass ich den Button mit dem Klick auf Enabled = false setze habich auch schon keine Probleme mehr gehabt dass man ein Feld doppelt klicken könnte. Falls du mal den ganzen Source haben willst schick mir ne PM


----------



## Andi_CH (9. Feb 2011)

Na ja

```
public class Spiel {
   private Feld F1;
   private Feld F2;
   private Feld F3;
   ......

    public Spiel()
    {
        F1 = new Feld(1);
        F2 = new Feld(2);
        F3 = new Feld(3);
        ......        
    }
```

besser

```
public class Spiel {
	private static final int anzahlFelder = 9;
	private Feld[] spielfeld;
	
	public Spiel() {
		spielfeld = new Feld[anzahlFelder];
		for (int i = 0; i < anzahlFelder; i++) {
			spielfeld[i] = new Feld();
		}
	}
```

Wenn dir die Zählerei ab 0 zu doof ist, kannst du auch 10 Wählen und das Feld 0 verschwenden - darauf kommt es auch nicht an.

Im Web findes du zig Lösungen, aber nicht alle sind auch schön implemetiert :-(

z.B. Das da (das Original ist ja --- ts ts ts)

```
@Override
	public void actionPerformed(ActionEvent a) {
		// Write the letter to the button and deactivate it
// war original so
//		for(int i = 1; i<10; i++){
//			if(a.getSource() == buttons[i]) {
//				buttons[i].setText("X");
//				buttons[i].setEnabled(false);
//			}
//		}
//
// Wieso nicht gleich so? Ist doch eleganter
		((JButton)a.getSource()).setText("X");
		((JButton)a.getSource()).setEnabled(false);
//
// das ist wieder original
		count++;        
		AI();
	}
```


----------

