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;
    }
    

  • Mod

    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
    -->
    statt

    feld[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.2011

    DirkB 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


Anmelden zum Antworten