Tic-Tac-Toe mit array's
-
also ich dachte da so ....
void eingabe(char feld[3][3],char zeile, int spalte,char player);
in
void eingabe(char feld[3][3],int *zeile, int *spalte,char player);
-
so und jetzt passiert genau ..... gar nix mehr -.-
und das bei 0 errors und 0 warnings -.-'#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <windows.h> #include <time.h> void programStart(); void zeichneFeld(char feld[3][3]); void eingabe(char feld[3][3],int *zeile, int *spalte,char player); void eingabeUndPc(char feld[3][3],int *zeile, int *spalte,char player); int pruefeEingabe(int *zeile, int *spalte); int pruefeFeld(char feld[3][3],int *zeile,int *spalte); int pruefeFeldPc(char feld[3][3],int *zeile,int *spalte); int checkDiagonal(char feld[3][3]); int checkZeile(char feld[3][3]); int checkSpalte(char feld[3][3]); int checkUnentschieden(int zuege, int zuege_x,int zuege_o); int main() { char feld[3][3] = {{0}}; int i=0,x=0,o=0, xz=0,oz=0, xs=0,os=0, zuege=0, zuege_o=0, zuege_x=0, draw, auswahl; int spalte=1; int zeile='A'; programStart(); system("cls"); printf("\n\t\t\t(1) Um gegen einen Freund zu spielen\n"); printf("\n\t\t\t(2) Um gegen den Computer zu spielen\n"); scanf("%d",&auswahl); if(auswahl==1) { printf("\n\n\n\t\t\t TIC TAC TOE\n\n"); printf("\t\t\t 1 2 3 \n"); printf("\t\t\t +---+---+---+\n"); printf("\t\t\t A | | | |\n"); printf("\t\t\t |---+---+---|\n"); printf("\t\t\t B | | | |\n"); printf("\t\t\t |---+---+---|\n"); printf("\t\t\t C | | | |\n"); printf("\t\t\t +---|---|---+\n"); for(i=0;i<=5;i++) { zuege++; eingabe(feld,&zeile,&spalte,'X'); zuege_x++; zeichneFeld(feld); x=checkDiagonal(feld); if(x==2) { printf("Gratulation Player X Sie haben gewonnen!\n"); system("PAUSE"); return 0; } xz=checkZeile(feld); if(xz==2) { printf("Gratulation Player X Sie haben gewonnen!\n"); system("PAUSE"); return 0; } xs=checkSpalte(feld); if(xs==2) { printf("Gratulation Player X Sie haben gewonnen!\n"); system("PAUSE"); return 0; } draw=checkUnentschieden(zuege,zuege_x,zuege_o); if(draw==1) return 0; eingabe(feld,&zeile,&spalte,'O'); zuege_o++; zeichneFeld(feld); o=checkDiagonal(feld); if(o==1) { printf("Gratulation Player O Sie haben gewonnen!\n"); system("PAUSE"); return 0; } oz=checkZeile(feld); if(oz==1) { printf("Gratulation Player O Sie haben gewonnen!\n"); system("PAUSE"); return 0; } os=checkSpalte(feld); if(os==1) { printf("Gratulation Player O Sie haben gewonnen!\n"); system("PAUSE"); return 0; } checkUnentschieden(zuege,zuege_x,zuege_o); if(draw==1) return 0; } system("PAUSE"); return 0; } if(auswahl==2) { fflush(stdin); printf("\n\n\n\t\t\t TIC TAC TOE\n\n"); printf("\t\t\t 1 2 3 \n"); printf("\t\t\t +---+---+---+\n"); printf("\t\t\t A | | | |\n"); printf("\t\t\t |---+---+---|\n"); printf("\t\t\t B | | | |\n"); printf("\t\t\t |---+---+---|\n"); printf("\t\t\t C | | | |\n"); printf("\t\t\t +---|---|---+\n"); for(i=0;i<=5;i++) { zuege++; /** Eingabe des Spieler X **/ eingabeUndPc(feld,&zeile,&spalte,'X'); zuege_x++; zeichneFeld(feld); /** Überprüfung ob 3 X in einer Diagonale vorkommen **/ x=checkDiagonal(feld); if(x==2) { printf("Gratulation Player X Sie haben gewonnen!\n"); system("PAUSE"); return 0; } /** Überprüfung ob 3 X in einer Zeile vorkommen **/ xz=checkZeile(feld); if(xz==2) { printf("Gratulation Player X Sie haben gewonnen!\n"); system("PAUSE"); return 0; } /** Überprüfung ob 3 X in einer Spalte vorkommen **/ xs=checkSpalte(feld); if(xs==2){ printf("Gratulation Player X Sie haben gewonnen!\n"); system("PAUSE"); return 0; } /** Überprüft ob noch ein Spieler gewinnen kann **/ draw=checkUnentschieden(zuege,zuege_x,zuege_o); if(draw==1) return 0; /** Eingabe des Computer **/ eingabeUndPc(feld,&zeile,&spalte,'O'); zuege_o++; zeichneFeld(feld); /** Überprüfung ob 3 O in einer Diagonale vorkommen **/ o=checkDiagonal(feld); if(o==1){ printf("Gratulation Player O Sie haben gewonnen!\n"); system("PAUSE"); return 0; } /** Überprüfung ob 3 O in einer Zeile vorkommen **/ oz=checkZeile(feld); if(oz==1){ printf("Gratulation Player O Sie haben gewonnen!\n"); system("PAUSE"); return 0; } /** Überprüfung ob 3 O in einer Zeile vorkommen **/ os=checkSpalte(feld); if(os==1){ printf("Gratulation Player O Sie haben gewonnen!\n"); system("PAUSE"); return 0; } /** Überprüft ob noch ein Spieler gewinnen kann **/ checkUnentschieden(zuege,zuege_x,zuege_o); if(draw==1) return 0; } system("PAUSE"); return 0; } return 0; } void programStart(){ /** Ausgabe der Regeln und so **/ printf("Herzlich Willkomen bei Tic-Tac-Toe!\n\n" "Der Spieler X beginnt, Die Eingabe erfolgt im Format\n" "ZeileSpalte, z.B.: B2!\nWenn sie soweit sind kann das Spiel beginnen!\n\n"); system("PAUSE"); system("cls"); } void zeichneFeld(char feld[3][3]){ /** Ausgebe des kompletten Tic-Tac-Toe stand **/ printf("\n\n\n\t\t\t TIC TAC TOE\n\n"); printf("\t\t\t 1 2 3 \n"); printf("\t\t\t +---+---+---+\n"); printf("\t\t\t A | %c | %c | %c |\n",feld[0][0],feld[0][1],feld[0][2]); printf("\t\t\t |---+---+---|\n"); printf("\t\t\t B | %c | %c | %c |\n",feld[1][0],feld[1][1],feld[1][2]); printf("\t\t\t |---+---+---|\n"); printf("\t\t\t C | %c | %c | %c |\n",feld[2][0],feld[2][1],feld[2][2]); printf("\t\t\t +---|---|---+\n"); } void eingabe(char feld[3][3],int *zeile, int *spalte, char player){ char enter[3], dummy; int ok; if(player=='X'){ do{ do{ /** Eingabe **/ printf("\n \t\tSpieler X Ihre Eingabe -> "); gets(enter); ok=sscanf(enter,"%d%d%c",zeile,spalte,&dummy); }while(pruefeEingabe(zeile,spalte)!=0&& dummy!='\n'); /** Wandelt Buchstaben in Positionen (Zahlen) um **/ if(*zeile=='A') *zeile=0; if(*zeile=='B') *zeile=1; if(*zeile=='C') *zeile=2; spalte-=1; }while(pruefeFeld(feld,zeile,spalte)==1); /** Beschreibt das entsprechende Feld **/ feld[*zeile][*spalte]='X'; system("cls"); } if(player=='O'){ do{ do{ printf("\n \t\tSpieler O Ihre Eingabe -> "); gets(enter); ok=sscanf(enter,"%d%d%c",zeile,spalte,&dummy); }while(pruefeEingabe(zeile,spalte)!=0&&dummy!='\n'); /** Wandelt Buchstaben in Positionen (Zahlen) um **/ if(*zeile=='A') *zeile=0; if(*zeile=='B') *zeile=1; if(*zeile=='C') *zeile=2; spalte-=1; }while(pruefeFeld(feld,zeile,spalte)==1); /** Beschreibt das entsprechende Feld **/ feld[*zeile][*spalte]='O'; system("cls"); } } void eingabeUndPc(char feld[3][3],int *zeile, int *spalte, char player){ char enter[3], dummy; int ok; if(player=='X'){ do{ do{ printf("\n \t\tSpieler X Ihre Eingabe -> "); gets(enter); ok=sscanf(enter,"%d%d%c",zeile,spalte,&dummy); }while(pruefeEingabe(zeile,spalte)!=0&&dummy!='\n'); /** Wandelt Buchstaben in Positionen (Zahlen) um **/ if(*zeile=='A') *zeile=0; if(*zeile=='B') *zeile=1; if(*zeile=='C') *zeile=2; spalte-=1; }while(pruefeFeld(feld,zeile,spalte)==1); /** Beschreibt das entsprechende Feld **/ feld[*zeile][*spalte]='X'; system("cls");} if(player=='O'){ printf("\n \t\tDer Computer ist dran! "); time_t t; int i,j; do{ time(&t); srand((unsigned int)t); /** Zufallsgenerator initialisieren **/ i=0;j=0;t=0; /** Erzeugung der Zufallszall für die Position in der Zeile **/ for (i=0;i<9;i++) if(feld[0][0]!=0&&feld[0][1]!=0&&feld[0][1]!=0) *zeile=rand()%3+1; *zeile=rand()%3+0; /** Erzeugung der Zufallszall für die Position in der Spalte **/ for (j=0;j<9;j++) if(feld[0][0]!=0&&feld[1][0]!=0&&feld[2][0]!=0) *spalte=rand()%3+1; *spalte=rand()%3+1; }while(pruefeFeldPc(feld,zeile,spalte)==1); /** Beschreibt das entsprechende Feld **/ feld[*zeile][*spalte]='O'; system("cls"); } } int pruefeEingabe(int *zeile, int *spalte){ if(*zeile>='A'&&*zeile<='C'&&*spalte>=1&&*spalte<=3) return 0; else return 1; } int pruefeFeld(char feld[3][3],int *zeile,int *spalte){ /** Überprüft ob auf dem geplannten, zu beschreibenden Feld nicht bereits ein Wert gespeichert ist **/ if(feld[*zeile][*spalte]!=0){ printf("Position schon vergeben!\n"); return 1; } else return 0; } int pruefeFeldPc(char feld[3][3],int *zeile,int *spalte){ /** Überprüft ob auf dem geplannten, zu beschreibenden Feld nicht bereits ein Wert gespeichert ist **/ if(feld[*zeile][*spalte]!=0){ return 1; } else return 0; } int checkDiagonal(char feld[3][3]){ char help1,help2,help3; /** Überprüft ob drei gleiche in einer Diagonale sind **/ help1=feld[0][0]; help2=feld[1][1]; help3=feld[2][2]; if(help1==help2&&help2==help3&&help1==help3){ if(help1=='X'){ printf("Spieler X gewinnt\n"); system("PAUSE"); return 2; } if(help1=='O'){ printf("Spieler O gewinnt\n"); system("PAUSE"); return 1; } } /** Überprüft ob drei gleiche in einer Diagonale sind **/ help1=feld[0][2]; help2=feld[1][1]; help3=feld[2][0]; if(help1==help2&&help2==help3&&help1==help3){ if(help1=='X'){ printf("Spieler X gewinnt\n"); system("PAUSE"); return 2; } if(help1=='O'){ printf("Spieler O gewinnt\n"); system("PAUSE"); return 1; } } return 0; } int checkZeile(char feld[3][3]){ char help1,help2,help3; int i; /** Überprüft ob drei gleiche in einer Zeile sind **/ for(i=0;i<=3;i++){ help1=feld[i][0]; help2=feld[i][1]; help3=feld[i][2]; if(help1==help2&&help2==help3&&help1==help3){ if(help1=='X'){ printf("Spieler X gewinnt\n"); system("PAUSE"); return 2; } if(help1=='O'){ printf("Spieler O gewinnt\n"); system("PAUSE"); return 1; } } } return 0; } int checkSpalte(char feld[3][3]){ char help1,help2,help3; int i; /** Überprüft ob drei gleiche in einer Spalte sind **/ for(i=0;i<=3;i++) { help1=feld[0][i]; help2=feld[1][i]; help3=feld[2][i]; if(help1==help2&&help2==help3&&help1==help3){ if(help1=='X'){ printf("Spieler X gewinnt\n"); system("PAUSE"); return 2; } if(help1=='O'){ printf("Spieler O gewinnt\n"); system("PAUSE"); return 1; } } } return 0; } int checkUnentschieden(int zuege, int zuege_x,int zuege_o){ /** Überprüft ob ein Spieler noch geweinnen könnte **/ if(zuege>=9||zuege_o>=5||zuege_x>=5){ printf("Unentschieden!\n"); system("PAUSE"); return 1; } return 0; }
-
Hello World schrieb:
so und jetzt passiert genau ..... gar nix mehr -.-
und das bei 0 errors und 0 warnings -.-'Dann jag das Ding durch einen Debugger und guck was passiert! Niemand schaut sich 500 Zeilen Code durch.
-
So hab jez noch mal meinen Lehrer gefragt .... es gibt da eine ganz simple Lösung
-->
stattfeld[zeile][spalte]='X';
einfach so
feld[(int)zeile][spalte]='X';
einfach ein (int) davor schreiben und .... 0 errors 0 warnings und das programm läuft
Danke für eure Mühe und die Tipps
-
Der Vorschlag von deinem Lehrer heißt cast
aber am 16:19:16 15.06.2011DirkB schrieb:
Was kann man da machen? (achte auf das fett gedruckte)
DirkB schrieb:void eingabe(char feld[3][3],[b]int [/b]zeile, int spalte)
denn:
DirkB schrieb:
Zeichen (Buchstaben) passen auch in ein int.oder du
castest
zeile nach int. Dann ist der Compiler auch ruhig.Wenn du die Antworten nicht durchliest ist das dein Problem.
Wer hat überhaupt mit dem * für Zeile und Spalte angefangen?
-
aaaaaa .... sry wusste nicht dass das casten heißt xD