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.