PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dringend HILFE in C !!!!



Lumberjacker
22-06-2005, 15:35
Hallo Ihr!

Ich muss morgen mein Projekt in Programmieren abgeben (Tic-Tac-Toe spiel), und find einfach die fehler in meinem Programm nicht. Irgendwas haut mit der abbruchbedingung nicht hin, und ich glaub der PC überschreibt teilweise auch belegte felder:

Wär ur super wenn wer den fehler findet, hab nämlich schon ur kopfweh von der vielen herumsitzerei.


hier der Code:


/*______________________________________


TIC TAC TOE


Karl Distl

______________________________________*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define X 'X'
#define O 'O'
#define BLANK ' '


//Spieler 1 = Computer = X
char Spieler1 = X;
//Spieler 2 = Benutzer = O
char Spieler2 = O;


//2D-Array für Spielfeld
char TicTacToe[3][3] = { {' ', ' ', ' '},
{' ', ' ', ' '},
{' ', ' ', ' '} };

//Spielfeldausgabe
void print_spielfeld(void)
{
int i;

system("cls");
printf(" 1 2 3 \n +---+---+---+\n");
for(i = 0; i < 3; i++)
{
printf(" %d | ",i+1);
printf("%c",TicTacToe[i][0]);
printf(" | ");
printf("%c",TicTacToe[i][1]);
printf(" | ");
printf("%c",TicTacToe[i][2]);
printf(" | \n");
if(i != 2) {
printf(" +---+---+---+\n");
}
else {
printf(" +---+---+---+\n");
}
}
}

//Setzen Spieler 2
void play2(char ch)
{
int row,
column;

printf("Wo wollen sie setzen?\n");
printf("Zeile (1-3) < >\b\b");
scanf("%d",&row);
getchar();

printf("\nSpalte (1-3) < >\b\b");
scanf("%d",&column);
getchar();

if(TicTacToe[row-1][column-1] == BLANK) //Zeichen in Feld eintragen
{
TicTacToe[row-1][column-1] = ch;
print_spielfeld();
}
else
{
printf("Dieses Feld ist bereits belegt\n");

printf("Wählen sie neu:\n");
printf("Zeile (1-3) < >\b\b");
scanf("%d",&row);
getchar();

printf("\nSpalte (1-3) < >\b\b");
scanf("%c",&column);
getchar();
}
}

//Computer-Setzfunktion
void play1(char h)
{
//Überprüfen für spieler 1
if (TicTacToe[0][0] == Spieler2 && TicTacToe[0][1] == Spieler2)
{
TicTacToe[0][2] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[1][2] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[1][0] = h;
}
else if (TicTacToe[0][1] == Spieler2 && TicTacToe[2][1] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[1][2] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[0][2] == Spieler2)
{
TicTacToe[0][1] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[2][0] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[2][1] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[0][1] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[0][0] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[1][2] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[2][0] == Spieler2 && TicTacToe[2][1] == Spieler2)
{
TicTacToe[2][2] = h;
}
else if (TicTacToe[2][1] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[2][0] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[1][0] == Spieler2)
{
TicTacToe[2][0] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[0][0] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[2][1] == Spieler2)
{
TicTacToe[0][1] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[2][2] = h;
}
else if (TicTacToe[1][2] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[0][2] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[2][2] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[0][0] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[2][0] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[0][2] = h;
}


//überprüfen für Spieler 2
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[0][1] == Spieler2)
{
TicTacToe[0][2] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[1][2] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[1][0] = h;
}
else if (TicTacToe[0][1] == Spieler2 && TicTacToe[2][1] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[1][2] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[0][2] == Spieler2)
{
TicTacToe[0][1] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[2][0] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[2][1] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[0][1] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[0][0] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[1][2] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[1][1] = h;
}
else if (TicTacToe[2][0] == Spieler2 && TicTacToe[2][1] == Spieler2)
{
TicTacToe[2][2] = h;
}
else if (TicTacToe[2][1] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[2][0] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[1][0] == Spieler2)
{
TicTacToe[2][0] = h;
}
else if (TicTacToe[1][0] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[0][0] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[2][1] == Spieler2)
{
TicTacToe[0][1] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[1][2] == Spieler2)
{
TicTacToe[2][2] = h;
}
else if (TicTacToe[1][2] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[0][2] = h;
}
else if (TicTacToe[0][0] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[2][2] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[2][2] == Spieler2)
{
TicTacToe[0][0] = h;
}
else if (TicTacToe[0][2] == Spieler2 && TicTacToe[1][1] == Spieler2)
{
TicTacToe[2][0] = h;
}
else if (TicTacToe[1][1] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
TicTacToe[0][2] = h;
}
}



//Überprüfen ob Sieg


int if_win()
{
//Spieler 1
if(TicTacToe[0][0] == Spieler1 && TicTacToe[0][1] == Spieler1 && TicTacToe[0][2] == Spieler1 ||
TicTacToe[1][0] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[1][2] == Spieler1 ||
TicTacToe[2][0] == Spieler1 && TicTacToe[2][1] == Spieler1 && TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][0] == Spieler1 && TicTacToe[1][0] == Spieler1 && TicTacToe[2][0] == Spieler1 ||
TicTacToe[0][1] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[2][1] == Spieler1 ||
TicTacToe[0][2] == Spieler1 && TicTacToe[1][2] == Spieler1 && TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][0] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][2] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[2][0] == Spieler1)
{
return 1;
}
//Spieler 2
else if( TicTacToe[0][0] == Spieler2 && TicTacToe[0][1] == Spieler2 && TicTacToe[0][2] == Spieler2 ||
TicTacToe[1][0] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[1][2] == Spieler2 ||
TicTacToe[2][0] == Spieler2 && TicTacToe[2][1] == Spieler2 && TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][0] == Spieler2 && TicTacToe[1][0] == Spieler2 && TicTacToe[2][0] == Spieler2 ||
TicTacToe[0][1] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[2][1] == Spieler2 ||
TicTacToe[0][2] == Spieler2 && TicTacToe[1][2] == Spieler2 && TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][0] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][2] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
return 2;
}
else
{
return 0;
}
}


//Mainfunktion
int main(int argc, char *argv[])
{

char c;
int b,
zahl,
z;

printf("**********************\n");
printf(" TIC TAC TOE\n");
printf("**********************\n\n");
printf("\nComputer.....X\n");
printf("Spieler......O\n");
printf("Der Zufall entscheidet, wer beginnt. Viel Spass!!!\n");
printf("\nUm ein neues Spiel zu starten, druecken sie ENTER");
getchar();

//Menü für Spiel & WH
do
{
// Zufallszahlengenerator 1 od 2, um festzulegen, wer beginnt
srand(time(0));
zahl=1+rand()%2; // zahl entw 1 od 2

if (zahl == 1) //Computer beginnt
{

//1. Zug des Computers = Standardzug in mitte
TicTacToe[1][1] = X;
print_spielfeld();
play2(O);

print_spielfeld();

//2. Zug des Computers = Standardzug links oben od rechts unten
if(TicTacToe[0][0] == BLANK) //Zeichen in Feld eintragen
{
TicTacToe[0][0] = X;
print_spielfeld();
}
else
{
TicTacToe[2][0] = X;
}

do //Schleife für neue Züge
{
print_spielfeld();
z = if_win();
play2(O);

print_spielfeld();
z = if_win();
play1(X);

} while (z == 0); //bis Sieg festgestellt
}
else //Spieler beginnt
{
print_spielfeld();
play2(O);

print_spielfeld();
//1. Zug des Computers = Standardzug links unten od links oben
if(TicTacToe[2][0] == BLANK) //Zeichen in Feld eintragen
{
TicTacToe[2][0] = X;
print_spielfeld();
}
else
{
TicTacToe[0][0] = X;
}

do //Schleife für neue Züge
{
print_spielfeld();
z = if_win();
play2(O);

print_spielfeld();
//z = if_win();
play1(X);

} while (z == 0); //bis Sieg festgestellt
}

if (z == 1) //Auswertung
{
printf("Sie haben verloren, sie Trottel!");
}
else if (z == 2)
{
printf("Sie haben gewonnen!!!");
}
else
{
printf("Unentschieden");
}


//Menüabfrage für WH
printf("\n\n\nWollen sie nochmal? Druecken sie J/N und ENTER < >\b\b");
scanf("%c",&c);
getchar();
} while (c != 'n' || c != 'N');


getchar();
return 0;
}

step
22-06-2005, 16:07
alles klar, abbruch und vermutetes überschreiben sind derselbe fehler.

das problem ist die funktion play1(), die ja eigentlich nur eine endlose aneinanderreihung von möglichen gewinnzügen ist.
da gibts mehrere probleme; schauen wir uns mal einen teil an:

//Computer-Setzfunktion
void play1(char h)
{
//Überprüfen für spieler 1
if (TicTacToe[0][0] == Spieler2 && TicTacToe[0][1] == Spieler2)
{
TicTacToe[0][2] = h;
}


1. du überprüfst nicht, ob das feld [0][2] überhaupt noch frei ist, dh. derselbe zug wird möglicherweise wiederholt
2. deine strategie ist rein passiv; der PC gewinnt nicht selbst wenn er die möglichkeit hätte.
3. du suchst nur nach feldern, bei denen der nächste zug zum sieg für den spieler führt.
4. wenn keine der möglichkeiten zutrifft, macht der pc keinen zug. zb. folgendes spielfeld:

+---+---+---+
|...|.O.|...|
+---+---+---+
|.O.|...|...|
+---+---+---+
|.X.|...|...|
+---+---+---+


eine sinnvolle strategie habe ich hier (http://vsg.cape.com/~pbaum/ttt/intro.htm) gefunden:

The machine first looked to see if it had played in 2 cells along a row with the third cell empty. If not, it looked to see if its opponent had played 2 cells along a row with the third cell empty. If neither of these situations had arisen, it played the first vacant cell in the sequence 5,1,6,7,2,9,4,3,8. As this strategy sometimes led to a loss, a special defense mode was in effect under certain "exceptional circumstances.
die numerierung in dem beispiel ist einfach
1 2 3
4 5 6
7 8 9

hoffe ich hab dir damit geholfen :)

lg
-step

Lumberjacker
22-06-2005, 16:53
danke für die antwort. Geholfen hast mir auf jeden fall. Schaut so aus als ob ihc jetzt die KI neu programmieren muss. Hab aber noch keinen richtigen plan wie ichs angehen soll. vor allem is a bissl wenig zeit glaub ich

walter67
22-06-2005, 18:20
Sodala, hab mal eine "simultanübersetzung von englisch nach C" :sm: des links von step gemacht und bei dir eingefügt ....

Einige Fehler im drumherum hab' ich schon ausgebessert aber folgende Probs solltest du noch selbst lösen:
= nach einer abgelehnten eingabe werden die nächsten versuche nicht eingetragen
= der Programmabbruch mit 'n' funktioniert bei mir noch nicht ...

Viel Spaß :wink: ,
Walter


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define X 'X'
#define O 'O'
#define BLANK ' '


//Spieler 1 = Computer = X
char Spieler1 = X;
//Spieler 2 = Benutzer = O
char Spieler2 = O;


//2D-Array für Spielfeld
char TicTacToe[3][3] = { {' ', ' ', ' '},
{' ', ' ', ' '},
{' ', ' ', ' '} };

//Spielfeldausgabe
void print_spielfeld(void)
{
int i;

system("cls");
printf(" 1 2 3 \n +---+---+---+\n");
for(i = 0; i < 3; i++)
{
printf(" %d | ",i+1);
printf("%c",TicTacToe[i][0]);
printf(" | ");
printf("%c",TicTacToe[i][1]);
printf(" | ");
printf("%c",TicTacToe[i][2]);
printf(" | \n");
if(i != 2) {
printf(" +---+---+---+\n");
}
else {
printf(" +---+---+---+\n");
}
}
}

//Setzen Spieler 2
void play2(char ch)
{
int row,
column;

printf("Wo wollen sie setzen?\n");
printf("Zeile (1-3) < >\b\b");
scanf("%d",&row);
getchar();

printf("\nSpalte (1-3) < >\b\b");
scanf("%d",&column);
getchar();

if(TicTacToe[row-1][column-1] == BLANK) //Zeichen in Feld eintragen
{
TicTacToe[row-1][column-1] = ch;
print_spielfeld();
}
else
{
printf("Dieses Feld ist bereits belegt\n");

printf("Wählen sie neu:\n");
printf("Zeile (1-3) < >\b\b");
scanf("%d",&row);
getchar();

printf("\nSpalte (1-3) < >\b\b");
scanf("%c",&column);
getchar();
}
}

//Computer-Setzfunktion
void play1(char h)
{
int i;
int row, column;
int p1,p2;
int frei_row, frei_column;
int row_sequence[] = {1,0,1,2,0,2,1,0,2};
int column_sequence[] = {1,0,2,0,1,2,0,2,1};

// Siegchance zeile prüfen
for (row=0; row<3; row++)
{
p1=p2=0;
for (column=0; column<3; column++)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
frei_column = column;
}

if (p1==2 && p2 == 0)
break;
}

if (row<3) //jetzt machen wir den Sack zu!!!
{
TicTacToe[row][frei_column] = h;
return;
}


// Siegchance spalte prüfen
for (column=0; column<3; column++)
{
p1=p2=0;
for (row=0; row<3; row++)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
frei_row = row;
}

if (p1==2 && p2 == 0)
break;
}

if (column<3) //jetzt machen wir den Sack zu!!!
{
TicTacToe[frei_row][column] = h;
return;
}

// Diagonalen nicht vergessen ..
p1=p2=0;
for (row=0, column=0; row<3; row++, column++)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
{
frei_row = row;
frei_column = column;
}

if (p1==2 && p2 == 0)
break;
}

if (row<3) //jetzt machen wir den Sack zu!!!
{
TicTacToe[frei_row][frei_column] = h;
return;
}


// Diagonalen nicht vergessen ..
p1=p2=0;
for (row=0, column=2; row<3; row++, column--)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
{
frei_row = row;
frei_column = column;
}

if (p1==2 && p2 == 0)
break;
}

if (row<3) //jetzt machen wir den Sack zu!!!
{
TicTacToe[frei_row][frei_column] = h;
return;
}


//Nicht gewonnen, dann mal in die Defensive ...

// zeile prüfen
for (row=0; row<3; row++)
{
p1=p2=0;
for (column=0; column<3; column++)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
frei_column = column;
}

if (p1==0 && p2 == 2)
break;
}

if (row<3) //Siegchance vereitelt!!!
{
TicTacToe[row][frei_column] = h;
return;
}


// spalte prüfen
for (column=0; column<3; column++)
{
p1=p2=0;
for (row=0; row<3; row++)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
frei_row = row;
}

if (p1==0 && p2 == 2)
break;
}

if (column<3) //Siegchance vereitelt!!!
{
TicTacToe[frei_row][column] = h;
return;
}

// Diagonalen nicht vergessen ..
p1=p2=0;
for (row=0, column=0; row<3; row++, column++)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
{
frei_row = row;
frei_column = column;
}

if (p1==0 && p2==2)
break;
}

if (row<3) //vereitelt!!!
{
TicTacToe[frei_row][frei_column] = h;
return;
}


// Diagonalen nicht vergessen ..
p1=p2=0;
for (row=0, column=2; row<3; row++, column--)
{
if (TicTacToe[row][column] == X)
p1++;
if (TicTacToe[row][column] == O)
p2++;
if (TicTacToe[row][column] == BLANK)
{
frei_row = row;
frei_column = column;
}

if (p1==0 && p2==2)
break;
}

if (row<3) //vereitelt!!!
{
TicTacToe[frei_row][frei_column] = h;
return;
}

// nun beides nicht moeglich/notwendig, dann ein freies Feld suchen mit der Serie 5,1,6,7,2,9,4,3,8 ...

for (i=0; i<9; i++)
{
if (TicTacToe[row_sequence[i]][column_sequence[i]] == BLANK)
{
TicTacToe[row_sequence[i]][column_sequence[i]] = h;
break;
}
}

return;
}



//Überprüfen ob Sieg


int if_win()
{
//Spieler 1
if(TicTacToe[0][0] == Spieler1 && TicTacToe[0][1] == Spieler1 && TicTacToe[0][2] == Spieler1 ||
TicTacToe[1][0] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[1][2] == Spieler1 ||
TicTacToe[2][0] == Spieler1 && TicTacToe[2][1] == Spieler1 && TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][0] == Spieler1 && TicTacToe[1][0] == Spieler1 && TicTacToe[2][0] == Spieler1 ||
TicTacToe[0][1] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[2][1] == Spieler1 ||
TicTacToe[0][2] == Spieler1 && TicTacToe[1][2] == Spieler1 && TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][0] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[2][2] == Spieler1 ||
TicTacToe[0][2] == Spieler1 && TicTacToe[1][1] == Spieler1 && TicTacToe[2][0] == Spieler1)
{
return 1;
}
//Spieler 2
else if( TicTacToe[0][0] == Spieler2 && TicTacToe[0][1] == Spieler2 && TicTacToe[0][2] == Spieler2 ||
TicTacToe[1][0] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[1][2] == Spieler2 ||
TicTacToe[2][0] == Spieler2 && TicTacToe[2][1] == Spieler2 && TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][0] == Spieler2 && TicTacToe[1][0] == Spieler2 && TicTacToe[2][0] == Spieler2 ||
TicTacToe[0][1] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[2][1] == Spieler2 ||
TicTacToe[0][2] == Spieler2 && TicTacToe[1][2] == Spieler2 && TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][0] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[2][2] == Spieler2 ||
TicTacToe[0][2] == Spieler2 && TicTacToe[1][1] == Spieler2 && TicTacToe[2][0] == Spieler2)
{
return 2;
}
else
{
return 0;
}
}


//Mainfunktion
int main(int argc, char *argv[])
{

char c;
int b, zahl, z;
int i;

printf("**********************\n");
printf(" TIC TAC TOE\n");
printf("**********************\n\n");
printf("\nComputer.....X\n");
printf("Spieler......O\n");
printf("Der Zufall entscheidet, wer beginnt. Viel Spass!!!\n");
printf("\nUm ein neues Spiel zu starten, druecken sie ENTER");
getchar();

//Menü für Spiel & WH
do
{
// Zufallszahlengenerator 1 od 2, um festzulegen, wer beginnt
srand(time(0));
zahl=1+rand()%2; // zahl entw 1 od 2

if (zahl == 1) //Computer beginnt
{

//1. Zug des Computers = Standardzug in mitte
TicTacToe[1][1] = X;
print_spielfeld();
play2(O);

print_spielfeld();

//2. Zug des Computers = Standardzug links oben od rechts unten
if(TicTacToe[0][0] == BLANK) //Zeichen in Feld eintragen
{
TicTacToe[0][0] = X;
print_spielfeld();
}
else
{
TicTacToe[2][0] = X;
}

for (i=0; i<3; i++) //feld ist voll nach 3*2 zuegen!!!
{
print_spielfeld();
play2(O);
if ( (z=if_win()) != 0)
break;

print_spielfeld();
play1(X);
if ( (z=if_win()) != 0)
break;

}
}
else //Spieler beginnt
{
print_spielfeld();
play2(O);

print_spielfeld();
//1. Zug des Computers = Standardzug links unten od links oben
if(TicTacToe[2][0] == BLANK) //Zeichen in Feld eintragen
{
TicTacToe[2][0] = X;
print_spielfeld();
}
else
{
TicTacToe[0][0] = X;
}

print_spielfeld();
play2(O);

for (i=0; i<3; i++) //feld ist voll nach 3*2 zuegen!!!
{
print_spielfeld();
play1(X);
if ( (z=if_win()) != 0)
break;

print_spielfeld();
play2(O);
if ( (z=if_win()) != 0)
break;

}
}

print_spielfeld();

if (z == 1) //Auswertung
{
printf("Sie haben verloren, sie Trottel!");
}
else if (z == 2)
{
printf("Sie haben gewonnen!!!");
}
else
{
printf("Unentschieden");
}


//Menüabfrage für WH
printf("\n\n\nWollen sie nochmal? Druecken sie J/N und ENTER < >\b\b");
scanf("%c",&c);
getchar();

memset (&TicTacToe[0][0], BLANK, 9 ); // Spielfeld löschen!!!!

} while (c != 'n' || c != 'N');


getchar();
return 0;
}

wuphi
22-06-2005, 18:24
oiiiidaaaaaaaaaaa....bin i froh, dass i mir sowas nimmer anschaun muss :f: :k: ;)

Lumberjacker
22-06-2005, 19:58
sehr oag!!!

ich dank euch allen 1000mal
habst mein leben gerettet *g* :klatsch: :wink: :jump:

walter67
22-06-2005, 20:07
bevor du aber jetzt behauptest C programmieren zu können, tust dich schon noch ein bisserl näher damit auseinandersetzen, gell :look:

... gern geschehen, hab ja schließlich seit fast 18 Jahren damit zu tun :cool: ;) ( :eek: komm gerade drauf, dass ich alt werde/bin) und falls du mal in Linz bist, wird natürlich ein Seiterl verrechnet ... :)