4 Gewinnt in "C" programmieren ?
Servus , folgendes Problem ich habe hier einen Quellcode zu 4 gewinnt ich bekomme es aber leider nicht auf die Reihe eine Gewinnermittlung in das Programm einzuarbeiten. Eventuell würde sich jemand dazu bereit erklären mir auf die Sprünge zu helfen :)
Vorab vielen danke
Hier is mein bisheriger Code
include <stdlib.h> include <conio.h> include <stdio.h> include <windows.h> // Bibliothek für die Windows-APIs einbinden define false 0 define true 1//--------------------------------------------------------------------------- // Globale Variable und Konstanten //---------------------------------------------------------------------------
// Spielfeld hat 8 Spalten(x) und 7 Zeilen (y)
int feld[8][7]; int spalte,y; int spaltevoll; char t;
int gewonnen=false, voll=false, abgebrochen=false;
//--------------------------------------------------------------------------- // Funktionsdeklarationen //--------------------------------------------------------------------------- void erklaerung(); void spielen(); int nochmal(); void neufeld(); void setzen(int s); void pruefen(); void siegerehrung(int s);
void gotoxy(int x, int y) // gotoxy()-Funktion { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // Standardhandle anfordern
COORD pos; // Struktur für die Koordinaten
pos.X = x; // x-Koordinate übernehmen
pos.Y = y; // y-Koordinate übernehmen
SetConsoleCursorPosition(hConsole, pos); // Cursorposition setzen
}
//--------------------------------------------------------------------------- // Hauptprogramm //--------------------------------------------------------------------------- void main() { // Erklärung für Benutzer erklaerung();
do spielen(); while ( nochmal() );
} //--------------------------------------------------------------------------- // Funktionsdefinitionen //--------------------------------------------------------------------------- void erklaerung() { printf("\n"); getchar(); }
//---------------------------------------------------------------------------
void spielen() { int spieler;system("cls");
// Spielfeld zeichnen und Variable initialisieren
neufeld();
spieler=2;
do
{
// Spielerwechsel
if (spieler==1) spieler=2; else spieler=1;
// Stein setzen
setzen(spieler);
gewonnen=false;
// Prüfen
if (!abgebrochen) pruefen();
// Wenn gewonnen dann Siegerehrung, sonst weiter mit nächstem Spieler
if (gewonnen ) siegerehrung(spieler);
}
while( !gewonnen && !voll && !abgebrochen);
} //---------------------------------------------------------------------------
int nochmal() { char t; printf("Nochmal? j/n\n"); t=getchar(); if(t=='j')
3 Antworten
schreibe dazu einen kleinen Algorithmus der die umliegenden felder prüft.
bei einem oder mehren matches
hast du die richtung und prüfst dahin weiter
bei 4 matchs in folge steht ein sieger fest.
Ich frage mich immer wieder, warum hier immer Fragen mit der grässlichen Konsole kommen, wenn ohnehin Windows im Programm verankert wird.
Du musst Dir doch irgendeine programmtechnische Darstellung der 8x7-Matrix vorgestellt haben?
Zur Vereinfachung kannst Du die Prüfung immer über alle Spalten, Zeilen und Diagonalen laufen lassen. Später kannst Du das einschränken auf den zuletzt gespielten Stein.
Zu setzt einen Merker auf "unbelegt" und einen Zähler auf 0.
Findest Du denselben Stein, inkrementierst Du den Zähler (ist er 4, hat die gemerkte Farbe gewonnen), ansonsten merkst Du Dir di neue Farbe und setzt den Zähler auf 1.
Schreibe dir dazu eine Funktion, die nach jedem Setzen eines Steines aufgerufen wird (bzw. erst, nachdem mindestens vier Steine gesetzt wurden).
Die Funktion prüft jede Reihe und jede Spalte auf vier nebeneinanderliegende gleichfarbige Steine. Im Anschluss wird noch für jeden Stein geprüft, ob in den Feldern um ihn noch ein gleichfarbiger Stein liegt. Ist das der Fall, so wird rekursiv so lange weitergeprüft, bis vier gleichfarbige Steine diagonal gefunden wurden.
Ich hoffe, ich konnte dir helfen; wenn du noch Fragen hast, kommentiere einfach.
LG Willibergi