4 Gewinnt in C programmieren (Gewinnüberprüfung)

... komplette Frage anzeigen

3 Antworten

Ich würde jedes Mal wenn ein "Stein" gesetzt wurde, von diesem aus in alle Richtungen (horizontal, vertikal und beide Diagonalrichtungen) zählen, auf wieviele gleichfarbige Steine ich vom zuletzt gesetzten Stein aus komme.

Du brauchst nicht weiter als 3 Schritte in jede Richtung gehen. Leere oder fremdbesetzte Felder unterbrechen die Kette. Sobald du 4 oder mehr zusammen hast kannst du abbrechen.

Also z.B. horizontal: 2 links und 2 rechts -> 5 eigene Steine in einer Reihe -> gewonnen!

Das dürfte viel effizienter sein, als jedes mal das komplette Spielfeld abzugrasen!

Antwort bewerten Vielen Dank für Deine Bewertung

Du könntest das Feld einmal komplett durchlaufen lassen und von jedem Element aus testen, ob die 3 von diesem Feld aus danebenliegenden Felder das gleiche Zeichen beinhalten.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von KilerAffe
27.06.2013, 13:14

ja, aber das horizontale geht jetzt schon. Jetzt ist nur noch das Vertikale und das Diagonale...

0
// 4_Gewinnt.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>


int main()
{
    //Variabeldefinitionen
    char Spielfeld[8][8];
    char SpielerA = 'A';
    char SpielerB = 'X';
    int SpielerEingabe1 = 0;
    int SpielerEingabe2 = 0;
    int ZaehlerA = 0;
    int ZaehlerB = 0;
    int GewinnerA = 0;
    int GewinnerB = 0;
    //int xyz = 1;  //War für  Endlosschleife VOR Gewinnüberprüfung...

    //printf("Vier Gewinnt\\\\n");
    //printf("by Marco Laim\\\\n\\\\n\\\\n");

    //Alle Felder mit einem Unterstrich füllen damit es einheitlich aussieht
    for(int i=0;i<=7;i++)
    {
        for(int fuellen=0;fuellen<=7;fuellen++)
        {
            Spielfeld[i][fuellen] = ' ';
        }
    }

    //Spielfeld[0][4] = 'A';
    //Spielfeld[2][7] = 'X';
    do
    {
    printf("4_Gewinnt\\\\n");
    printf("by Marco L.\\\\n\\\\n\\\\n");

    //Gewinnprüfung
    for(int i=0;i<=7;i++)
    {
        int counter = 0;
        for(int j=0;j<=7;j++)
        {
            //Spielfeld[i][j] = SpielerA;
        }
    }

    //Ausgabe Spielfeld
    printf("    0   1   2   3   4   5   6   7\\\\n");
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("0 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[0][0],Spielfeld[0][1],Spielfeld[0][2],Spielfeld[0][3],Spielfeld[0][4],Spielfeld[0][5],Spielfeld[0][6],Spielfeld[0][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("1 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[1][0],Spielfeld[1][1],Spielfeld[1][2],Spielfeld[1][3],Spielfeld[1][4],Spielfeld[1][5],Spielfeld[1][6],Spielfeld[1][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("2 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[2][0],Spielfeld[2][1],Spielfeld[2][2],Spielfeld[2][3],Spielfeld[2][4],Spielfeld[2][5],Spielfeld[2][6],Spielfeld[2][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("3 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[3][0],Spielfeld[3][1],Spielfeld[3][2],Spielfeld[3][3],Spielfeld[3][4],Spielfeld[3][5],Spielfeld[3][6],Spielfeld[3][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("4 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[4][0],Spielfeld[4][1],Spielfeld[4][2],Spielfeld[4][3],Spielfeld[4][4],Spielfeld[4][5],Spielfeld[4][6],Spielfeld[4][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("5 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[5][0],Spielfeld[5][1],Spielfeld[5][2],Spielfeld[5][3],Spielfeld[5][4],Spielfeld[5][5],Spielfeld[5][6],Spielfeld[5][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("6 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[6][0],Spielfeld[6][1],Spielfeld[6][2],Spielfeld[6][3],Spielfeld[6][4],Spielfeld[6][5],Spielfeld[6][6],Spielfeld[6][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");
    printf("7 | %c | %c | %c | %c | %c | %c | %c | %c |\\\\n",Spielfeld[7][0],Spielfeld[7][1],Spielfeld[7][2],Spielfeld[7][3],Spielfeld[7][4],Spielfeld[7][5],Spielfeld[7][6],Spielfeld[7][7]);
    printf("  +---+---+---+---+---+---+---+---+\\\\n");

    //Welcher Spieler ist dran?
    if(ZaehlerA<=ZaehlerB)
    {
    printf("Spieler 1 ist dran!\\\\n");
    printf("Bitte gib die Zeile an: ");
    scanf("%i", &SpielerEingabe1);
    fflush(stdin);
    printf("Bitte gib die Spalte an: ");
    scanf("%i", &SpielerEingabe2);
    fflush(stdin);
    Spielfeld[SpielerEingabe1][SpielerEingabe2] = SpielerA;
    ZaehlerA++;
    }
    else if(ZaehlerA>ZaehlerB)
    {
        printf("Spieler 2 ist dran!\\\\n");
        printf("Bitte gib die Zeile an: ");
        scanf("%i", &SpielerEingabe1);
        fflush(stdin);
        printf("Bitte gib die Spalte an: ");
        scanf("%i", &SpielerEingabe2);
        fflush(stdin);
        Spielfeld[SpielerEingabe1][SpielerEingabe2] = SpielerB;
        ZaehlerB++;
    }

    //Spielfeld neu ausgeben
    system("CLS");
    }
    //Solange bis jemand gewonnen hat
    while(GewinnerA != 1 || GewinnerB != 1);
    printf("Bitte ENTER drücken");
    getchar();
    return 0;
}
Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?