# Tic Tac Toe programmieren



## Tomsen1410 (19. Oktober 2010)

Hi,
ich hab jetzt vor einer Woche mit C++ angefangen. Und wollte mal meine "Skills" testen
Ich wollt jetzt mal ein Tic tac Toe erstellen. Erstmal mit zwei Spielern am selben PC. nur zur übung. Aber ich häng leider schon am Anfang 
Eins schonmal vorweg. Ich denke ich weiß, dass ich richtig beschis.... gecodet hab^^
Mein Problem hier ist, dass wenn ich eine Nummer einsetzte, gleich das ganze Feld immer wiederholt... Also wenn ihr so lieb wärt und nen Anfänger helfen könntet 


```
#include <cstdlib>
#include <iostream>

using namespace std;

int X = 0;
int O = 0;

 
int main(int argc, char *argv[]){
    
    
    
    
    do
    { cout << "Eingabe fuer den Spieler X (1-9): \n";
      cin >> X;
      
      if (X == 0)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            
      }
      
      if (X == 1)
      {
            cout << "   |   |   \n";
            cout << " X |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            
      }
      if ( X == 2)
      {
            cout << "   |   |   \n";
            cout << "   | X |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
      }
      if ( X == 3)
      {
            cout << "   |   |   \n";
            cout << "   |   | X \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
      }
        if ( X == 4)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << " X |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
      }
        if ( X == 5)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   | X |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
      }
        if ( X == 6)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   | X \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
      }
        if ( X == 7)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "  X|   |   \n";
            cout << "   |   |   \n";
      }
        if ( X == 8)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |  X|   \n";
            cout << "   |   |   \n";
      }
        if ( X == 9)
      {
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   |   \n";
            cout << "___|___|___\n";
            cout << "   |   |   \n";
            cout << "   |   | X \n";
            cout << "   |   |   \n";
      }
      
    
    }while(X <= 9 );
      
      
    
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
```


----------



## badday (19. Oktober 2010)

Was genau meinst du mit "Feld wiederholt"?


----------



## Tomsen1410 (19. Oktober 2010)

badday hat gesagt.:


> Was genau meinst du mit "Feld wiederholt"?


 
Das ganze Tic Tac Toe Feld wird nochmal neu hingeschrieben


----------



## badday (19. Oktober 2010)

Welche Ausgabe willst du denn? z. B. sowas?


```
cout << "   |   |   \n";
cout << " X |   |   \n";
cout << "___|___|___\n";
cout << "   | X |   \n";
cout << "   |   |   \n";
cout << "___|___|___\n";
cout << "   |   |   \n";
cout << "   |   |   \n";
cout << "   |   |   \n";
```

Sry, aber ich versteh nicht ganz was du willst...


----------



## Tomsen1410 (19. Oktober 2010)

badday hat gesagt.:


> Welche Ausgabe willst du denn? z. B. sowas?
> 
> 
> ```
> ...


 
Ja, genau so. Also, dass ich neue Steine setzten kann, aber sich das Feld nicht immer verdoppelt


----------



## fc90 (19. Oktober 2010)

du willst sozusagen, dass das Spielfeld immer an die selbe Stelle ausgegeben wird.

Dazu kannst du vor der Ausgabe die Konsole leeren:

```
cout << "\E[H\E[2J";
```
Das ist eine Escape-Frequenz. Also ein Steuerbefehl für die Konsole (hier eben Bildschirm leeren).

Dann sind aber jedes Mal deine bisherigen Züge weg.
Die solltest du dann in einer Matrix abspeichern und jedes mal mit neu zeichnen.


```
if(feld[1][1] == 1) //Spieler 1
    cout << "X";
else if(feld[1][1] == 2) //Spieler 2
    cout << "O"
else
    cout << " " //kein Spieler
```

Im guten alten C gab es auch mal eine gotoxy-Funktion. Die gibts hier aber glaube ich nicht.


----------



## sheel (19. Oktober 2010)

gotoxy? Sicher, dass die Funktion in einer Standardlib war? 

Unter Windows gibts für den Zweck WriteConsoleOutputCharacter.


----------



## fc90 (20. Oktober 2010)

sheel hat gesagt.:


> gotoxy? Sicher, dass die Funktion in einer Standardlib war?


ähm...nein...

hab grade nochmal nachgeforscht. Das ist (war) eine Funktion von Borland, die in der conio.h zu finden ist.

Ich habe allerdings auch eine Alternative gefunden:

```
#include <windows.h>
 
void gotoxy(int xpos, int ypos)
{
    COORD scrn;    
    HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
    scrn.X = xpos; scrn.Y = ypos;
    SetConsoleCursorPosition(hOuput,scrn);
}
```
Quelle:  StarShaper @ board.gulli.com

Damit sollte es auch einfacher möglich sein die Spielermarkierungen zu setzen, ohne jedes mal die Konsole komplett neu zu schreiben.


----------



## Matthias Reitinger (20. Oktober 2010)

Hallo,

man könnte auch eine Bibliothek verwenden, die diese plattformabhängigen Sachen wegabstrahiert, bspw. ncurses.

Grüße,
Matthias


----------



## badday (20. Oktober 2010)

Ich verwende auch ncurses, das sollte damit kein Problem sein.

Gruß,

badday


----------



## Hunter3 (21. Oktober 2010)

hallo,
also ich hatte in meinen c++ anfängen auch mal so ein tic tac toe gemacht mein spielfeld hatte ich mir aber mühsam ausgerechnet und dann mit verschiedenen bustaben und der selbst gebastelten funktion gotoxy(x,y) das spielfeld gezeichnet 
wo dann nachher wiederum die spieler symbole  reingeschrieben wurden auch wieder mit gotoxy und cout blöcken 
weil für jeden zug das spielfeld irgendwie neu zu malen oder wie auch ist ja lästig und viel schreibarbeit war auch mein erster gedankenschritt aber dann hab ich eine dynamischere lösug gefunden

hier mal die funktion gotoxy:
einfach die coords als paramter übergeben und der cursor springt

```
void gotoxy(int x,int y)
{
   COORD cur={x,y};
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cur);
}
```

ich wirde gerne auch noch meine methode zum spielfeld zeichnen posten aber mir sind irgendwie meine quellcode dateien abhanden gekommen 

bei fragen einfach melden hoffe geholfen zu haben


----------

