HILFE 4 gwinnt in c++

MasterOfTheDark

Grünschnabel
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   
    char screen[6][7];
    
    char jn;
    int i,j,x;
    int fertig1,fertig2;
    int Zug[3];
    char elements[3]={0,176,219};
    char Spieler1[20],Spieler2[20];

    
    falscheeingabe:;
    system("cls");
   for(i=0;i<6;i++)
        {
            for(j=0;j<7;j++)
            {    screen[i][j]=' ';}
        }
        fertig1=0;  
        fertig2=0;
        printf("Geben sie bitte den Namen des ersten Spielers ein.(maximal 20 Zeichen)\n");
        gets(Spieler1);
        fflush(stdin);
        printf("Geben sie bitte den Namen des zweiten Spielers ein.(maximal 20 Zeichen)\n");
        gets(Spieler2);
        do
        {   
            printf(" 0 1 2 3 4 5 6\n"); 
            for(i=0;i<6;i++)
            {
                for(j=0;j<7;j++)
                {
                    printf("|%c",screen[i][j]);
                }
                printf("|\n");
            }
            do
            {
               if(((screen[0][6]==elements[2])||(screen[0][6]==elements[3]))&&((screen[0][5]==elements[2])||(screen[0][5]==elements[3]))&&((screen[0][4]==elements[2])||(screen[0][4]==elements[3]))&&((screen[0][3]==elements[2])||(screen[0][3]==elements[3]))&&((screen[0][2]==elements[2])||(screen[0][2]==elements[3]))&&((screen[0][1]==elements[2])||(screen[0][1]==elements[3]))&&((screen[0][0]==elements[2])||(screen[0][0]==elements[3]))) 
                {
                    goto ende;
                }
                printf("\n\nSpieler '%s' ist dran.Bitte waehlen sie die spalte,in der sie ihren Stein einwerfen moechten.",Spieler1);
                scanf("%d",&Zug[1]);
                if((screen[0][Zug[1]]==elements[1])||(screen[0][Zug[1]]==elements[2])||(Zug[1]>6))
                {
                    system("cls");
                    printf(" 0 1 2 3 4 5 6\n");
                    for(i=0;i<6;i++)
                    {
                        for(j=0;j<7;j++)
                        {
                            printf("|%c",screen[i][j]);
                        }
                        printf("|\n");
                    }
                    printf("Falsche Eingabe!Sie muessen eine Zahl eingeben,die zwischen 0 und 6 liegt.\nUnd die Spalte darf nicht voll sein!");
                }
            }while((Zug[1]>6)||(screen[0][Zug[1]]==elements[1])||(screen[0][Zug[1]]==elements[2]));
            for(i=5;i>0-1;i--)
            {
                if(screen[i][Zug[1]]!=elements[1]&&screen[i][Zug[1]]!=elements[2])
                {
                    screen[i][Zug[1]]=elements[1];
                    break;
                }
            }
      //ANFANG der Überprüfung ob das Spiel beendet ist
            char a=176;
            for(i=0;i<6;i++)
            {
                for(j=0;j<7;j++)
                {
                    if((screen[i][j]==a && screen[i+1][j]==a && screen[i+2][j]==a && screen[i+3][j]==a) ||
                    (screen[i][j]==a && screen[i+1][j+1]==a && screen[i+2][j+2]==a && screen[i+3][j+3]==a) || 
                    (screen[i][j]==a && screen[i][j+1]==a && screen[i][j+2]==a && screen[i][j+3]==a) || 
                    (screen[i][j]==a && screen[i-1][j+1]==a && screen[i-2][j+2]==a && screen[i-3][j+3]==a) ||
                    (screen[i][j]==a && screen[i-1][j]==a && screen[i-2][j]==a && screen[i-3][j]==a) ||
                    (screen[i][j]==a && screen[i-1][j-1]==a && screen[i-2][j-2]==a && screen[i-3][j-3]==a) || 
                    (screen[i][j]==a && screen[i][j-1]==a && screen[i][j-2]==a && screen[i][j-3]==a) || 
                    (screen[i][j]==a && screen[i+1][j-1]==a && screen[i+2][j-2]==a && screen[i+3][j-3]==a))
                    {
                        fertig2=4;
                    }
                }
            }
            if(fertig2==4)
            {
                printf("Gratuliere '%s' Sie haben in 4 gewinnt gegen '%s' gewonnen!",Spieler1,Spieler2);
                goto finish;
            }
      //ENDE der Überprüfung ob das Spiel beendet ist
            system("cls");
            printf(" 0 1 2 3 4 5 6\n"); 
            for(i=0;i<6;i++)
            {
                for(j=0;j<7;j++)
                {
                    printf("|%c",screen[i][j]);
                }
                printf("|\n");
            }
            do
            {
                if(((screen[0][6]==elements[2])||(screen[0][6]==elements[3]))&&((screen[0][5]==elements[2])||(screen[0][5]==elements[3]))&&((screen[0][4]==elements[2])||(screen[0][4]==elements[3]))&&((screen[0][3]==elements[2])||(screen[0][3]==elements[3]))&&((screen[0][2]==elements[2])||(screen[0][2]==elements[3]))&&((screen[0][1]==elements[2])||(screen[0][1]==elements[3]))&&((screen[0][0]==elements[2])||(screen[0][0]==elements[3])))
                {
                    goto ende;
                }
                printf("\n\nSpieler '%s' ist dran.Bitte waehlen sie die spalte,in der sie ihren Stein einwerfen moechten.",Spieler2);
                scanf("%d",&Zug[2]);
                if((screen[0][Zug[2]]==elements[1])||(screen[0][Zug[2]]==elements[2])||(screen[i][j]>4))
                {
                    system("cls");
                    printf(" 0 1 2 3 4 5 6\n");
                    for(i=0;i<6;i++)
                    {
                        for(j=0;j<7;j++)
                        {
                            printf("|%c",screen[i][j]);
                        }
                        printf("|\n");
                    }
                    printf("Falsche Eingabe!Sie muessen eine Zahl eingeben,die zwischen 0 und 6 liegt.\nUnd die Spalte darf nicht voll sein!");
                }
            }while((Zug[2]>6)||(screen[0][Zug[2]]==elements[2])||(screen[0][Zug[2]]==elements[1]));
            for(i=5;i>0-1;i--)
            {
                if(screen[i][Zug[2]]!=elements[1]&&screen[i][Zug[2]]!=elements[2])
                {
                    screen[i][Zug[2]]=elements[2];
                    break;
                }
            }
      //ANFANG der Überprüfung ob das Spiel beendet ist
            for(i=0;i<6;i++)
            {
                for(j=0;j<7;j++)
                {
                    printf("hallo");
                    char b=elements[3];
                    if((screen[i][j]==b && screen[i+1][j]==b && screen[i+2][j]==b && screen[i+3][j]==b) ||
                    (screen[i][j]==b && screen[i+1][j+1]==b && screen[i+2][j+2]==b && screen[i+3][j+3]==b) ||
                    (screen[i][j]==b && screen[i][j+1]==b && screen[i][j+2]==b && screen[i][j+3]==b) || 
                    (screen[i][j]==b && screen[i-1][j+1]==b && screen[i-2][j+2]==b && screen[i-3][j+3]==b) || 
                    (screen[i][j]==b && screen[i-1][j]==b && screen[i-2][j]==b && screen[i-3][j]==b) || 
                    (screen[i][j]==b && screen[i-1][j-1]==b && screen[i-2][j-2]==b && screen[i-3][j-3]==b) || 
                    (screen[i][j]==b && screen[i][j-1]==b && screen[i][j-2]==b && screen[i][j-3]==b) ||
                    (screen[i][j]==b && screen[i+1][j-1]==b && screen[i+2][j-2]==b && screen[i+3][j-3]==b))
                    {
                         fertig2=4;
                         printf("Gratuliere '%s' Sie haben in 4 gewinnt gegen '%s' gewonnen!",Spieler1,Spieler2);
                    }

                }
            }
      //ENDE der Überprüfung ob das Spiel beendet ist
            system("cls");             
        }while(fertig1!=4&&fertig2!=4);
        
        if(i==100000)
        {
            ende:;
            printf("Keiner konnte gewinnen,wenn sie nochmal spielen wollen drücken sie 'j'");
            scanf("%c",&jn);
            fflush(stdin);
        }
        finish:;
        printf("Wenn sie nochmal spielen wollen drücken sie 'j'");
        scanf("%c",&jn);
        fflush(stdin);
      }while(jn=='j'||jn=='J');

funktioniert alles soweit,bis auf die überprüfung(im code durch kommentare am beginn und ende gekennzeichnet),sobald das programm in die if-anweisung "hinein geht" schließt sich das cmd fenster.

jemand eine ahnung woran das liegen könnte?

Lg Masta
 
Zuletzt bearbeitet:
Hi.

Das Problem ist, das du auf ungülitge Elemente deines Arrays zugreifst. Wenn i = 0 ist, dann ist i - 3 kein gültiges Arrayelement. Du mußt sicherstellen, das die Indizes die du verwendest im Gültigkeitsbereich des Arrays liegen.

Gruß

PS: Bitte achte auf die Netiquette, Punkt 15. Danke.
 
Hi.

Es würde evtl. mehr Sinn machen die Prüfung für das komplette Spielbrett nicht bei jedem Zug durchzuführen, sondern nur zu prüfen ob bei dem aktuellen Zug eine Kombination von 4 gleichen Spielsteinen entstanden ist.

Gruß
 
Zurück