Mr.T66 Geschrieben 5. Mai 2010 Teilen Geschrieben 5. Mai 2010 Hallo Leuts . Ich habe vor kurzem das Spiel 4-Gewinnt in C programmiert. Bin noch im ersten Lehrjahr, und auf dem guten Wege, C zu erlernen. Leider funktioniert es nicht so, wie ich gedacht habe. So sieht meine Idee aus: Ein Zweidimensionales Array gefüllt mit 0'en. Wenn Spieler 1 am Zug ist, wird die gewählte Position mit einer 1 gefüllt, bei Spieler 2 mit einer 2. Nach jedem Zug startet eine Gewinnüberprüfung, der das Array kompett durchgeht und guckt, ob eine 4er Reihe gefüllt ist. Es klappt schon soweit, dass die Zahl in die unterste freie Position gelangt, (wie üblich bei 4-Gewinnt). Mein Problem: Wenn ich eine Position auswähle, wird der Stein (1 oder 2) immer in das erste Feld geworfen, und die 0 füllt sich mit der eingegeben Zahl und nicht mit einer 1 oder einer 2. Im Anhang findet Ihr den Quelltext. Wäre für jede Art von Hilfe dankbar.4gewinnt.txt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 5. Mai 2010 Teilen Geschrieben 5. Mai 2010 Zuweisungen mit = Vergleiche mit == Diesbzüglich solltest du den gesamten Code nochmal durchgehen Und im nächsten Schritt solltest du versuchen, von den globalen Variablen wegzukommen, das ist schlechter Stil. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
oxygen Geschrieben 5. Mai 2010 Teilen Geschrieben 5. Mai 2010 ich versteh c zwar nur aus meinen C++- und C#-Kenntnissen, aber das dürfte auch hier so sein: In ueberpruefeundsetze() analysierst du zwar die Eingabe, ob sie im erlaubten Bereich ist, verwendest sie dann aber nicht, um die Spalte auszuwählen, da hast du die Variable X. Ich denke mal, dass du deshalb immer den Stein in der ersten Spalte bekommst. Warum du allerdings nicht den Stein, sondern deine Eingabe ins Feld bekommst, hab ich auf die Schnelle nicht gefunden, wahrscheinlich schreibst du irgentwo ausversehen deine Eingabe in Spielstein, das hab ich dann aber auch übersehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 5. Mai 2010 Teilen Geschrieben 5. Mai 2010 Zuweisungen mit = Vergleiche mit == Diesbzüglich solltest du den gesamten Code nochmal durchgehen Um solche Fehler zu vermeiden hilft es sich anzugewöhnen links vom == Operator den Wert und rechts die Variable zu schreiben wenn man nicht 2 Variablen miteinander vergleichen will. Denn bei if (5 = myInt) bekommt man im gegesatz zu if (myInt = 5) einen Compilerfehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Shamharoth Geschrieben 14. Mai 2010 Teilen Geschrieben 14. Mai 2010 Zwar ist das Thema schon 10 Tage alt, trotzdem möcht ich mal mein Senf dazugeben ;D Hallo Leuts . ... Nach jedem Zug startet eine Gewinnüberprüfung, der das Array kompett durchgeht und guckt, ob eine 4er Reihe gefüllt ist. Es klappt schon soweit, dass die Zahl in die unterste freie Position gelangt, (wie üblich bei 4-Gewinnt). ... 1. if (iaktuellerspieler == 1) { stein == '1'; } if (iaktuellerspieler == 2) { stein == '2'; }[/PHP] Klar ist ja schon wbezgülich dem Vergleich (==) und der Zuweisung (=) Jedoch ist mir aufgefallen: stein ist doch int. warum gibst du ihm dann den ascii Wert von der Nummer? Ich rate dir das etwas einheitlicher zu machen: Mach am besten das ganze Brett als 2D-Chararray. Nur so reine Anregungen: Mach doch ein globales Array bezüglich Steinnummern: [PHP]char csteinspieler[2] = {'1','2'}; dann kannst du beim seitzen wie folgt machen: void ueberpruefeundsetze() { x = ieingabe; if ((ieingabe < 1) || (ieingabe > 7) || (ieingabe == 0)) //Eingabe�berpr�fung { printf("\nUngueltiger Zug.Bitte erneut eingeben!"); eingabe(); } for (y=6; y>0; y--) { if (iSpielfeld[x][y] == 0) //Das ist dafür da, dass der Stein auf die unterste Position im Array kommt, die mit einer 0 belegt ist. { // da so, die Spielregeln von 4 gewinnt ist. iSpielfeld[x][y] == csteinspieler[iaktuellerspieler-1]; system("cls"); zeigespielfeld(); } } gewinnabfrage(); }[/PHP] Weitere Anregung Warum gleich das ganze Array abprüfen? Überprüf doch einfach die 5 Möglichkeiten, die der aktuelle Stein "hervorruft"? So in etwa (mal dahingschreibselt ): [PHP]void gewinnabfrage() { //Prüfe alle X-Linie if(x > 2) { for(int i = 1; i < 4; i++) { if(iSpielfeld[x][y] != iSpielfeld[x-i][y]) break; } igewinn = true; } if(x < 3) { for(int i = 1; i < 4; i++) { if(iSpielfeld[x][y] != iSpielfeld[x+i][y]) break; } igewinn = true; } //Prüfe Y-Linie if(y < 4) { for(int i = y; i > x-4; i++) { if(iSpielfeld[x][y] != iSpielfeld[x][i]) break; } igewinn = true; } //Prüfe Diagonalen if(y < 4 && x > 2) { for(int i = 1; i <= 3; i++) { if(iSpielfeld[x][y] != iSpielfeld[x-i][y-i]) break; } igewinn = true; } if(y < 4 && x < 3) { for(int i = 1; i <= 3; i++) { if(iSpielfeld[x][y] != iSpielfeld[x+i][x-i]) break; } igewinn = true; } } Kann Fehler haben aber auch weil ich das ma hingeklatschd hab. Alle Angaben ohne Gewehr (*PENG*) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.