Tic-Tac-Toe mit array's



  • ok
    @SeppJ ja ja ... ist okey
    @DirkB Danke 🙂
    So ich verstehe das in Zeile 77 nicht was dieses Warning von mir will?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <windows.h>
    
    #define Z 3
    #define S 3
    
    void programStart();
    void zeichneFeld(char feld[3][3], int n, int s);
    void eingabe(char feld[3][3],char zeile, int spalte);
    int pruefeEingabe(char zeile, int spalte);
    
    int main()
    {
        char feld[3][3] = {{0}};
        int n=0,s=0;
        int spalte=1;
        char zeile='A';
            programStart();
    
            printf("     1   2   3  \n");
            printf("   |---|---|---|\n");
            printf(" A |   |   |   |\n");
            printf(" B |   |   |   |\n");
            printf(" C |   |   |   |\n");
            printf("   |---|---|---|\n");
            printf("Noch keine Spielzuege vorhanden!\n");
    
            eingabe(feld,zeile,spalte);
            zeichneFeld(feld,n,s);
    
        system("PAUSE");
        return 0;
    }
    void programStart()
    {
        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], int n, int s)
    {
    
        printf("     1   2   3  \n");
        printf("   |---|---|---|\n");
        printf(" A |%d |%d |%d |\n",feld[n][s],feld[n][s],feld[n][s]);
        printf(" B |%d |%d |%d |\n",feld[n][s],feld[n][s],feld[n][s]);
        printf(" C |%d |%d |%d |\n",feld[n][s],feld[n][s],feld[n][s]);
        printf("   |---|---|---|\n");
    
    }
    void eingabe(char feld[3][3],char zeile, int spalte)
    {
        char enter[3], dummy;
        int ok;
        printf("Spieler X Ihre Eingabe -> ");
        gets(enter);
        ok=sscanf(enter,"%c%d%c",&zeile,&spalte,&dummy);
        printf("%c%d\n",zeile,spalte);
        if(zeile=='A')
            zeile=0;
        if(zeile=='B')
            zeile=1;
        if(zeile=='C')
            zeile=2;
        spalte=-1;
        feld[zeile][spalte]='X';
        system("PAUSE");
    
    }
    int pruefeEingabe(char zeile, int spalte)
    {
        if(zeile>='A'&&zeile<='C'&&spalte>=1&&spalte<=3)
            return 0;
        else
            return 1;
    
    }
    

    EDIT: ist doch eigentlich eine korrekte zuweisung oder?



  • Du hast ja jetzt einiges geändert.
    Wie lautet denn jetzt die Warnung?



  • So jz läufts .... hab aber immer noch 1 Warning

    75: Array subscribed has type 'char'
    

    Quellcode:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    #include <windows.h>
    
    #define Z 3
    #define S 3
    
    void programStart();
    void zeichneFeld(char feld[3][3], int n, int s);
    void eingabe(char feld[3][3],char zeile, int spalte);
    int pruefeEingabe(char zeile, int spalte);
    
    int main()
    {
        char feld[3][3] = {{0}};
        int n=0,s=0;
        int spalte=1;
        char zeile='A';
            programStart();
    
            printf("     1   2   3  \n");
            printf("   |---|---|---|\n");
            printf(" A |   |   |   |\n");
            printf(" B |   |   |   |\n");
            printf(" C |   |   |   |\n");
            printf("   |---|---|---|\n");
            printf("Noch keine Spielzuege vorhanden!\n");
    
            eingabe(feld,zeile,spalte);
            zeichneFeld(feld,n,s);
            eingabe(feld,zeile,spalte);
            zeichneFeld(feld,n,s);
    
        system("PAUSE");
        return 0;
    }
    void programStart()
    {
        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], int n, int s)
    {
    
        printf("     1   2   3  \n");
        printf("   |---|---|---|\n");
        printf(" A | %c | %c | %c |\n",feld[0][0],feld[0][1],feld[0][2]);
        printf(" B | %c | %c | %c |\n",feld[1][0],feld[1][1],feld[1][2]);
        printf(" C | %c | %c | %c |\n",feld[2][0],feld[2][1],feld[2][2]);
        printf("   |---|---|---|\n");
    
    }
    void eingabe(char feld[3][3],char zeile, int spalte)
    {
        char enter[3], dummy;
        int ok;
        printf("Spieler X Ihre Eingabe -> ");
        gets(enter);
        ok=sscanf(enter,"%c%d%c",&zeile,&spalte,&dummy);
    
        if(zeile=='A')
            zeile=0;
        if(zeile=='B')
            zeile=1;
        if(zeile=='C')
            zeile=2;
        spalte-=1;
        feld[zeile][spalte]='X';
        system("cls");
    
    }
    int pruefeEingabe(char zeile, int spalte)
    {
        if(zeile>='A'&&zeile<='C'&&spalte>=1&&spalte<=3)
            return 0;
        else
            return 1;
    
    }
    

  • Mod

    Der Compiler möchte dich darauf aufmerksam machen, dass du ohne die Zeilen 68-73 sterben würdest.



  • Gut ist logisch, aber wie bekomm ich den Warning weg?


  • Mod

    Hello World_unreg schrieb:

    Gut ist logisch, aber wie bekomm ich den Warning weg?

    Ersetz den ganzen Block durch:

    ok=sscanf(enter,"%c%d%c",&zeile,&spalte,&dummy);
    
        feld[zeile - 'A'][spalte - 1]='X';
    

    Und außerdem: Wozu ist dummy gut? Wozu ist enter gut? Warum prüfst du ok nicht?

    edit: Jaja, ganz genau genommen ist das nicht portabel, da 'B' und 'C' nicht auf 'A' folgen müssen. Dann kann man das Spiel eben nicht auf einem System mit EBCDIC-Zeichensatz spielen.



  • int als Arrayindex findet der Compiler besser.

    void eingabe(char feld[3][3],[b]int [/b]zeile, int spalte)
    

    Zeichen (Buchstaben) passen auch in ein int. 🙂



  • SeppJ schrieb:

    Dann kann man das Spiel eben nicht auf einem System mit EBCDIC-Zeichensatz spielen.

    Warum nicht? Zumindest A-I sind fortlaufend bei EBCDIC.



  • Das heißt?



  • Hello World_unreg schrieb:

    Das heißt?

    Das der Code auch auf einem System mit EBCDIC laufen würde.



  • Ok das wäre nicht gut 😉
    Aber wie kann ich diesen Warning beheben .... da er führ mich logisch erscheint -.-'



  • Habe ich um 15:45:26 geschrieben.



  • DirkB schrieb:

    Habe ich um 15:45:26 geschrieben.

    😕 😕
    Ja wie grieg ich den jz weg?


  • Mod

    Du hast jetzt schon zwei gute Antworten dazu bekommen. Einmal meine (die auch auf EBCDIC funktioniert, dessen Zeichentabelle ich nicht komplett auswendig kenne 😃 ) und die von DirkB. Bitte lies sie, sonst verlieren Helfer das Interesse.



  • Mann, Mann, Mann.

    DirkB schrieb:

    int als Arrayindex findet der Compiler besser.

    Heißt: Der Compiler hätte als Arrayindex lieber ein int statt eines char.

    Da schauen wir mal in deine Funktion rein:

    void eingabe(char feld[3][3],char zeile, int spalte)
    {
    ...
       feld[zeile][spalte]='X';
        system("cls");
    
    }
    

    und sehen: hoppla, der Index für zeile ist ja vom Typ char.

    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.

    Deinen Hintern wisch ich jetzt aber nicht ab.



  • OKEY OKEY OKEY
    Danke, Ich weiß ich bin etwas begriffsstützig 😉
    Danke für eure Hilfe 🙂



  • ok so weit so gut ... 0 warnings .... nur schreibt er mir bei int alles auf [0][0] -.-'



  • cooky451 schrieb:

    cooky451 schrieb:

    Sollten sich die Werte der Variablen die in der main() deklariert wurden irgendwann mal ändern?



  • cooky451 schrieb:

    cooky451 schrieb:

    cooky451 schrieb:

    Sollten sich die Werte der Variablen die in der main() deklariert wurden irgendwann mal ändern?

    JA! ??? tun sie auch o.O



  • Hello World schrieb:

    JA! ??? tun sie auch o.O

    Aha, echt? Wo genau? Insbesondere den Wert von "spalte" würde ich mal beobachten 😉


Anmelden zum Antworten