Tic Tac Toe - Gebt eure Meinung zu meinem Code ab!
-
Hay,
hab soeben meine Projekt arbeit für die Schule fertig getippt,
z.zt. erfüllt es seinen Zweck, sprich man kann es Spielen etcwerde noch n bischen dran ändern
hier mal der Code// Tic Tac Toe.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #include "stdafx.h" #include <stdlib.h> #include <math.h> #include <time.h> #include "stdio.h" /************************************************************************************/ /** **/ /** void arrayfuellen(int *feld, int len) **/ /** **/ /*#**********************************************************************************/ /* Parameter: (i) int len : Groesse des Von len, kann verschieden geaendert werden (Feld muss feld[len][len] gross sein) (o) int *feld : Fuellt das ganze Array mit leerzeichen Return: Beschreibung: Ein feld (der groesse feld[len][len] wird mit leerzeichen gefuellt) und mit dem *feld an die entsprechene Stelle geschrieben. */ void arrayfuellen(int *pointer, int len){ len=len*len; for(int i=0;i<len;i++){ *(pointer+i)=' '; } } /************************************************************************************/ /** **/ /** void spielfeldaus(int *feld, int len) **/ /** **/ /*#**********************************************************************************/ /* Parameter: (i) int len : Groesse von len, kann verschieden geaendert werden (Feld muss feld[len][len] gross sein) (i) int *feld : Zugriff auf Spielfeldspeicher Return: Beschreibung: Hier wird das Tic Tac Toe Spielfeld ausgegeben */ void spielfeldaus(int *feld,int len){ int j=1; system("cls"); printf("\n\n\n"); printf("\t\t\t\t y-Koordinate \n"); printf("\t\t\t\t 1 2 3\n\n"); for(int i=0;i<9;i=i+3){ printf("\t\t\t\tx = %d %c | %c | %c\n",j,*(feld+i),*(feld+i+1),*(feld+i+2)); if(i==0||i==3){ printf("\t\t\t\t -----------\n"); } j++; } printf("\n\n"); } /************************************************************************************/ /** **/ /** void spielereingabe(int *eingabe1ptr) **/ /** **/ /*#**********************************************************************************/ /* Parameter: (o) int *eingabe1ptr : Eingabe des 1. Spielers Return: Beschreibung: Die Koordinaten zum Punkt setzen werden hiereingegeben. In der Form XY ohne Leerzeichen o.a. */ void spielereingabe(int *eingabe1ptr){ int eingabe1; do{ printf("Bitte geben Sie den Punkt an wo Sie Setzen wollen:\n"); printf("xy-Koordinaten: "); scanf("%d",&eingabe1); fflush(stdin); if(eingabe1<11||eingabe1>13&&eingabe1<21||eingabe1>23&&eingabe1<31||eingabe1>33){ printf("Koordinaten nicht vorhanden!\n"); printf("Bitte erneut eingeben!\n\n"); } }while(eingabe1<11||eingabe1>13&&eingabe1<21||eingabe1>23&&eingabe1<31||eingabe1>33); *eingabe1ptr=eingabe1; } /************************************************************************************/ /** **/ /** void koordinaten(int koordinaten,int *xptr,int *yptr) **/ /** **/ /*#**********************************************************************************/ /* Parameter: (i) int koordinaten : Eingabe aus der Funktion 'spielereingabe' (o) int *xptr : Die Ausgabe der x-Koordinate (o) int *yptr : Die Ausgabe der y-Koordinate Return: Beschreibung: Hier wird die Eingabe der Form XY in seine bestandteile x und y zerlegt und in den entsprechenden Variablen abgespeichert. */ void koordinaten(int koordinaten,int *xptr,int *yptr){ *yptr=koordinaten%10; *xptr=koordinaten/10; } /************************************************************************************/ /** **/ /** void gewinnerkennung(int *feld,int *gewonnen) **/ /** **/ /*#**********************************************************************************/ /* Parameter: (i) int *feld : Eingabe aus der Funktion 'spielereingabe' (o) int *gewonnen : Ausgabe des Gewinners Return: Beschreibung: Hier wird geprueft wer gewonnen hat. 1==Spieler 1 hat gewonnen 2==Spieler 2 hat gewonnen */ void gewinnerkennung(int *feld,int *gewonnen){ //diagonale Gewinnpruefung if(*feld=='x'&&*(feld+4)=='x'&&*(feld+8)=='x'|| *(feld+2)=='x'&&*(feld+4)=='x'&&*(feld+6)=='x'){ *gewonnen=1; //Gewonnen hat Spieler 1 } if(*feld=='o'&&*(feld+4)=='o'&&*(feld+8)=='o'|| *(feld+2)=='o'&&*(feld+4)=='o'&&*(feld+6)=='o'){ *gewonnen=2; //Gewonnen hat Spieler 2 } //horizontale Gewinnpruefung if(*feld=='x'&&*(feld+1)=='x'&&*(feld+2)=='x'|| *(feld+3)=='x'&&*(feld+4)=='x'&&*(feld+5)=='x'|| *(feld+6)=='x'&&*(feld+7)=='x'&&*(feld+8)=='x' ){ *gewonnen=1; //Gewonnen hat Spieler 1 } if(*feld=='o'&&*(feld+1)=='o'&&*(feld+2)=='o'|| *(feld+6)=='o'&&*(feld+7)=='o'&&*(feld+8)=='o'|| *(feld+3)=='o'&&*(feld+4)=='o'&&*(feld+5)=='o'){ *gewonnen=2; //Gewonnen hat Spieler 2 } //vertikale Gewinnpruefung if(*feld=='x'&&*(feld+3)=='x'&&*(feld+6)=='x'|| *(feld+1)=='x'&&*(feld+4)=='x'&&*(feld+7)=='x'|| *(feld+2)=='x'&&*(feld+5)=='x'&&*(feld+8)=='x'){ *gewonnen=1; //Gewonnen hat Spieler 1 } if(*feld=='o'&&*(feld+3)=='o'&&*(feld+6)=='o'|| *(feld+1)=='o'&&*(feld+4)=='o'&&*(feld+7)=='o'|| *(feld+2)=='o'&&*(feld+5)=='o'&&*(feld+8)=='o'){ *gewonnen=2; //Gewonnen hat Spieler 2 } } int main(){ const int len=3; int spielfeld[len][len]; int *ptr; int eingabe; int x,y; //Koordinatenvariablen int gewonnen; arrayfuellen(&spielfeld[0][0],len); spielfeldaus(&spielfeld[0][0],len); ptr=&spielfeld[0][0]; gewonnen=0; for(int i=1;i<10;i++){ do{ spielereingabe(&eingabe); koordinaten(eingabe,&x,&y); if(spielfeld[x-1][y-1]=='x'||spielfeld[x-1][y-1]=='o'){ printf("\nAn den eingegebenen Koordinaten sitz schon was.\n"); printf("Bitte erneut eingeben\n"); } }while(spielfeld[x-1][y-1]=='x'||spielfeld[x-1][y-1]=='o'); if(i%2){ //EDIT if(i==1||i==3||i==5||i==7||i==9){ //spieler 1 spielfeld[x-1][y-1]='x'; spielfeldaus(&spielfeld[0][0],len); } else{ //spieler 2 spielfeld[x-1][y-1]='o'; spielfeldaus(&spielfeld[0][0],len); } gewinnerkennung(&spielfeld[0][0],&gewonnen); if(gewonnen==1||gewonnen==2){ break; } } if(gewonnen==1){ printf("\nSpieler 1 hatt gewonnen\n"); } else if(gewonnen==2){ printf("\nSpieler 2 hat gewonnen\n"); } else{ printf("\nUnentschieden\n"); } return 0; }
Wie findet ihr den Code ?
Wenn Ihr es an machen stellen zu kompliziert gelöst findet, lasst euch gesagt sein das es so gewollt ist. Dennoch bin ich für verbesserungsvorschläge dankbar.
-
Wenn Ihr es an machen stellen zu kompliziert gelöst findet, lasst euch gesagt sein das es so gewollt ist.
glaub ich weniger
so beim überfliegen
fflush(stdin);
und deklaration z.b. in einer schleife ...
das ist kein ansi c
-
nya ist eigentlich normales C, kein C++ oder etc, daher dachte ich kommt nur der begriff ansi c in frage ^^ sry
-
//statt if (i==1||i==3||i==5||i==7||i==9) //kürzer if (i%2)
-
Also sowas:
void gewinnerkennung(int *feld,int *gewonnen)
finde ich tatal daneben, eher
int gewinnerkennung(int *feld)
und die rueckgabe liefert dann den gewinner. Solche sachen hast du oeffter in dem Quellcode.
void spielereingabe(int *eingabe1ptr)
Ansonsten wuerde ich meinen Vorredner anschliessen.
-
@gerie thx stimmt is einfacher ^^
@moe joa das ist beabsichtigt, ich arbeite lieber mit pointern, ka wieso aber so muss ich nicht umdenken
-
Die "gewinnerkennung ()" könnte schon verlassen werden sobald ein Gewinner feststeht.
-
Adi schrieb:
nya ist eigentlich normales C, kein C++ oder etc, daher dachte ich kommt nur der begriff ansi c in frage ^^ sry
Er wollte Dir damit auch nicht sagen dass Du im falschen Forum bist