C-Code für Tic Tac Toe



  • Hallo,

    soll für die Uni den Code für ein Tic-Tac-Toe-Spiel schreiben.

    Bisher hab ich folgendes:

    #include <stdio.h>
    
    // Unterprogramm: anzeige
    void anzeige(int spielfeld[][3])
    {
         //declare local vars
     int z,s;
     printf("1 2 3\n");
     for(z=0;z<3;z++)
     {
      for(s=0;s<3;s++)
      {
       if(spielfeld[z][s] == 0) {
        printf("  ");
       }
       if(spielfeld[z][s] == 1) {
        printf("X ");
       }
       if(spielfeld[z][s] == 2) {
        printf("O ");
       }      
      }
     }
    }
    // Unterprogramm: spielerwahl
    void spielerwahl (int spielfeld[][3], int *spieler) {
         //declare local vars
     int nullen = 0;
     int z,s;
     for(z=0;z<3;z++)
     {
      for(s=0;s<3;s++)
      {
       if(spielfeld[z][s] == 0)
       {
        nullen = nullen + 1;
       }
      }
     }
     if( nullen == 9 || nullen == 7 || nullen == 5 || nullen == 3 || nullen == 1)
     {
      *spieler = 1;
     } else if( nullen == 8 || nullen == 6 || nullen == 4 || nullen == 2)
     {
      *spieler = 2;
     } else if( nullen == 0)
        {
      *spieler = 0;
     }
    }
    // Unterprogramm: gewonnen
    int  gewonnen (int spielfeld[][3])
    {
         //declare local vars
     int gewonnen = 0;
     int z,s;
     for(z=0;z<3;z++)
     {
      if (spielfeld[z][0] == spielfeld[z][1] && spielfeld[z][1] == spielfeld[z][2] && spielfeld[z][2]!=0)
      {
       gewonnen = 1;
      }
     }
     for(s=0;s<3;s++)
     {
      if (spielfeld[0][s] == spielfeld[1][s] && spielfeld[1][s] == spielfeld[2][s] && spielfeld[2][s]!=0)
      {
       gewonnen = 1;
      }
     }
     if( spielfeld[0][0] == spielfeld[1][1] && spielfeld[1][1] == spielfeld[2][2] && spielfeld[2][2]!=0)
     {
      gewonnen = 1;
     }
     if( spielfeld[2][0] == spielfeld[1][1] && spielfeld[1][1] == spielfeld[0][2] && spielfeld[0][2]!=0)
     {
      gewonnen = 1;
     }
     return gewonnen;
    }
    
    // Spielerzug
    void spielerzug(int spielfeld[][3],int *spieler)
    {
         //declare local vars     
     int zug[2]={0}; // Array von 0-1 initial mit value 0
     int nochmal = 1;
     printf("Sie sind dran, Spieler",*spieler);
     do
     {
      printf("\nBitte erst Zeile, dann Spalte eingeben!");
      scanf("%d",zug[0]);
      scanf("%d",zug[1]);  
      if(zug[0] < 1 || zug[0] > 3 || zug[1] < 1 || zug[1] > 3 )
      {
       printf("Bitte nur Zahlen zwischen 1 und 3 eingeben\n");
       nochmal = 1;
      }
      else if(spielfeld[zug[0]][zug[1]]!=0)
      {
       printf("Feld ist bereits belegt!\n");
       nochmal = 1;
      }
            else
            {
                nochmal = 0;
            }
     } while(nochmal == 0);
     spielfeld[zug[0]][zug[1]] = *spieler;
    }
    
    // Unterprogramm: zweispieler
    void zweispieler(int spielfeld[][3])
    {
         //declare local vars
     int spieler = 0,aus=1;
     do
     {
            //ruft Unterpogramm anzeige auf
      anzeige(spielfeld);
      //ruft spielerwahl spielerzug auf
      spielerwahl(spielfeld, &spieler);
    
      if( spieler != 0)
      {
                //ruft Unterpogramm spielerzug auf
          spielerzug (spielfeld, &spieler);
      }
      //ruft Unterpogramm gewonnen auf
      aus = gewonnen(spielfeld);
    
     } while (spieler == 0 || aus == 1);
     //ruft Unterpogramm anzeige auf
     anzeige(spielfeld);
     if( aus == 1)
     {
      printf("Glückwunsch, Spieler",spieler," sie haben gewonnen\n");
     }
     if( aus == 0)
     {
      printf("Unentschieden\n");
     }
    
    }
    
    // main
    int main()
    {
    
     // declare variables
     int spielfeld[3][3];
     int z,s;
     int auswahl = 0;
     // set/reset spielfeld
     for(z=0;z<3;z++)
     {
      for(s=0;s<3;s++)
      {
                // set alle z,s werte auf 0
       spielfeld[z][s] = 0;
      }
     }
     // mainmenu
     do
     {
    
      printf("\t\tHauptmenue\n");
      printf("Neues Spiel starten:\n");
      printf("1. 2-Spieler-Modus\n");
      printf("2. Mensch vs. Computer\n");
      printf("Bitte wählen sie einen Menüpunkt aus\n");
      printf("\n");
      printf("Spielstand laden:\n");
      printf("3. 2-Spieler-Modus\n");
      printf("4. Mensch vs. Computer\n");;
      printf("5. Ende\n");
      scanf("%d",auswahl);
      if(auswahl == 1)
      {
       //ruft Unterpogramm zweispieler auf       
       zweispieler(spielfeld);
      }
      else if (auswahl == 2)
      {
       printf("Spiel gegen den Computer");
      }
      else if (auswahl == 3)
      {
       printf("Hier kann ein Zweispielerspiel geladen werden.");
      }
      else if (auswahl == 4)
      {
       printf("Hier kann ein Spiel gegen den Comp. geladen werden.");
      }
      else if (auswahl == 5)   
      {
       printf("Auf Wiedersehn!");
      }     
      else
      {
       printf("Fehler\n");
      }
     } while(auswahl != 5);
    
    }
    

    Aber irgendwie funktioniert das nich ganz.
    Woran könnts liegen?
    Und außerdem wär es sehr hilfreich wenn mir jemand sagen könnte, wie ich die Unterprogramme am besten in Einzeldateien (sollen dann werden main.c, anzeige.c, gewonnen.c und so weiter).

    Wichtige Info: es sollte möglichst gut zu folgendem Struktogramm passen: http://hattrick-wm.de/aufgabe.pdf

    Vielen Vielen Dank für jegliche Hilfe.



  • Das schmiert schon bei der Eingabe ab, wegen scanf("%d",auswahl);
    Muss heissen: scanf("%d", &auswahl);



  • Mach dich mal schlau wozu switch, case und default gut sind.

    MfG f.-th.


Anmelden zum Antworten