# sieg-bedingung für tic tac toe



## Revelationer (16. Jan 2007)

halli hallo
ich programmier gerade ein "tic tac toe"-spiel. 
unter anderem soll man die größe des feldes selbst bestimmen können. das heißt man übergibt n an die konsole und ein array mit n * n feldern wird erzeugt.

soweit so gut.
mein problem sind die gewinn-bedinungen.
zuvor hab ich das feld mit den festen maßen 3x3 erstellt und dafür alle bedinungen zum gewinnen von hand eingegeben.
ich würd die bedingung aber gerne mit einem schleifenkonstrukt automatisch auswerten lassen, was ich ja auch muss wenn die feld-größe variabel ist.

ich wollte zwei for-schleifen ineinander schachteln und dann zeile pro zeile prüfen ob in jedem arrayfeld ein x bzw. ein o liegt und einen boolean je nach ergebnis setzen der an eine andere funktion übergeben wird.

aber theoretisch müsste ich ja dann in der if-bedingung eine schleife haben, was ja nicht geht. 

das wäre die sieg-berechnung für spieler 1 so wie ich mir das gedacht habe:

```
public static void sieg1()
for( int i=0 ; i<spielfeld.feld.length ; i++ )             // hochzählen der spalten
{
    for( int j=0 ; j<spielfeld.feld[i].length ; j++ )     // hochzählen der zeilen
    {
        if( spielfeld.feld[i][j] == 'x' &&  )                  // bedingung: wenn alle elemente der zeile j gleich 'x' sind.
        {
            sieg1 = true;
        }
    }
}
```


das funktioniert so natürlich nicht wie ich festgestellt hab, aber ich komm nicht drauf was noch fehlt...

für  3 * 3 ist das ganze +bersichtlich genug um es statisch anzugeben, aber es soll ja variabel sein *seufz*

so sah die bedingung vorher aus (diesmal spieler 2):


```
public static void sieg1()
    {
        if(     (spielfeld.feld[0][0] == 'x' && spielfeld.feld[0][1] == 'x' && spielfeld.feld[0][2] == 'x') || 
                (spielfeld.feld[1][0] == 'x' && spielfeld.feld[1][1] == 'x' && spielfeld.feld[1][2] == 'x') ||
                (spielfeld.feld[2][0] == 'x' && spielfeld.feld[2][1] == 'x' && spielfeld.feld[2][2] == 'x') ||
                (spielfeld.feld[0][0] == 'x' && spielfeld.feld[1][0] == 'x' && spielfeld.feld[2][0] == 'x') ||
                (spielfeld.feld[0][1] == 'x' && spielfeld.feld[1][1] == 'x' && spielfeld.feld[2][1] == 'x') ||
                (spielfeld.feld[0][2] == 'x' && spielfeld.feld[1][2] == 'x' && spielfeld.feld[2][2] == 'x') ||
                (spielfeld.feld[0][0] == 'x' && spielfeld.feld[1][1] == 'x' && spielfeld.feld[2][2] == 'x') ||
                (spielfeld.feld[0][2] == 'x' && spielfeld.feld[1][1] == 'x' && spielfeld.feld[2][0] == 'x')     )
        {
            System.out.println("Spieler " +spielender +" hat gewonnen!");    
            sieg1 = true;        
        }
        else 
            sieg1 = false;
    }
```


ich wär euch sehr dankbar wenn ihr mir helfen könntet!

gruß,
raiden


----------



## Wildcard (16. Jan 2007)

Such mal hier nach XXO oder TicTacToe.
Du wirst einige fertige Algorithmen finden.


----------



## Revelationer (16. Jan 2007)

hab mal tic tac toe als suchbegriff angegeben, aber die threads die dabei rauskamen hatten nur die KI oder einen anderen aspekt zum them :-/


----------



## Roar (16. Jan 2007)

das is doch ganz einfach, es gibt doch für jedes spielfeld nur n*n+2 gewinnmöglichkeiten. nämlich entweder in einer zeile alle n felder nebeneinander zu belegen oder in einer spalte alle n felder untereinander zu belegen oder in einer der beiden diagonalen alle n felder zu belegen. jetz sollte das wohl kein problem mehr sein die par for schleifen drumrum zu klotzen


----------



## Guest (17. Jan 2007)

ja man solls nicht glauben, aber ich hatte da gestern abend tatsächlich schwierigkeiten mit die schleifen da drumzubauen.

aber naja, heute bin ich dann zur lösung gekommen:


```
public static void siegSpieler1()
    {
        boolean siegSpielerX1 = false;      // Teilergebnis 1
        boolean siegSpielerX2 = false;      // Teilergebnis 2
        boolean siegSpielerX3 = false;      // Teilergebnis 3
        boolean siegSpielerX4 = false;      // Teilergebnis 4
        
        int h = 0;
        for( int i=0 ; i<spielfeld.feld.length ; i++ )
        {
            for( int j=0 ; j<spielfeld.feld[i].length ; j++ )
            {
                if( spielfeld.feld[i][j] == 'x' )
                {
                    h++;
                }
            }
            if( h == spielfeld.n)
            {
                siegSpielerX1 = true;
            }
            h = 0;
        }
        
        h = 0;
        for( int i=0 ; i<spielfeld.feld.length ; i++ )
        {
            for( int j=0 ; j<spielfeld.feld[i].length ; j++ )
            {
                if( spielfeld.feld[j][i] == 'x' )
                {
                    h++;
                }
            }
            if( h == spielfeld.n )
            {
                siegSpielerX2 = true;
            }
            h = 0;
        }
        
        h = 0;
        for( int i=0 ; i<spielfeld.feld.length ; i++ )
        {
            if( spielfeld.feld[i][i] == 'x' )
            {
                h++;
            }
        }
        if( h == spielfeld.n )
        {
            siegSpielerX3 = true;
        }
        
        h = 0;
        for( int i=0 ; i<spielfeld.feld.length ; i++ )
        {
            if( spielfeld.feld[i][spielfeld.n-1-i] == 'x' )
            {
                h++;
            }
        }
        if( h == spielfeld.n )
        {
            siegSpielerX4 = true;
        }
        
        if( siegSpielerX1 == true || siegSpielerX2 == true || siegSpielerX3 == true || siegSpielerX4 == true )
        {
            sieg1 = true;
            System.out.println(spielender +" hat gewonnen!");
        }
        else
        {
            sieg1 = false;
        }
    }
```


----------



## meier.a (12. Mrz 2007)

Hi Leute,
ich habe gerade die Aufgabe "Tic Tac Toe Spiel" ohne Applet programmieren. Ich benötige hierzu eine Vorlage, um diese Aufgabe zu realisieren, da ich immoment nicht weiterkomme :autsch: . Ich hoffe, dass mir hier jemand helfen kann :meld: . 

Vielen dank schonmal im Vorraus :toll: 
euer Meier


----------



## Marco13 (12. Mrz 2007)

Wenn du eine konkrete Frage hast, sicher. Wenn du nur eine Vorlage willst (klingt halt nach "ich will was fertiges, damit ich nichts selbst machen muss") kannst du auch mal eine Websuche starten. Es gibt sicher 1000 fertige Tic-Tac-Toe-Applets. (Hab sowas auch mal geschrieben :roll: )


----------



## Herr Bert (14. Mrz 2007)

Brauchst du nur Hilfe oder brauchst du für die Schule das fertige Programm?! (so macht es den Anschein)

Also Jungs schaut doch einfach mal bei google



Gruß der Bert


----------



## Gast (14. Mrz 2007)

Wenn du ein komplettes Programm brauchst, sag Bescheid ich schreib dir grad eins


----------



## DasJavaMonsta (14. Mrz 2007)

hm sorry war nicht eingeloggt - der Gastpost kam von mir ;P


----------



## Herr Bert (15. Mrz 2007)

JA komm schreib mir eine Email, ich gebe dir den Quelltext. Ich hoffe du kannst damit dann was anfangen 


Viel Glück wünscht euch der Herr Bert


----------

