4 Gewinnt



  • Hallo,

    bin neu hier.
    Haben Projektarbeit in der schule. eigtl. haben wir visual basic gelernt aber ich und ein freund von mir haben das projekt genommen : c++ vorstellen und ein spiel programmieren. müssen uns alles selbst beibringen. Bis ujetzt wissen wir aber nicht wie man 4 gewinnt programmiert. Hat einer von euch vllt einen Quellcode, den man nurnoch bei c++ einfügen muss und dann compilieren muss?!
    danke schonmal im voraus lg



  • sorry, aber das hier ist zum helfen damit man selbst was programmieren kann, fuer deinen auftrag ist das projekteforum.

    wenn du es jedoch selbst programmieren moechtest, kannst du hier gerne um hilfestellungen zu deinen individuellen problemen erfragen.



  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich hab das mal zu Lernzwecken in C geschrieben (schon ne Weile her und nicht besonders schön gemacht)

    /*********************************************************
    
        Name:       Vier Gewinnt in C
    
        Zweck:      Das bekannte Vier-Gewinnt Spiel
    
                    für zwei Spieler
    
    **********************************************************/
    
    #include <bl01lib.h>
    
    // DEFINIERUNGEN
    
    #define JA       1
    
    #define NEIN     0
    
    #define SPIELER1 1
    
    #define SPIELER2 0
    
    #define ZEICHEN1 '#'        // Spielsteine für Spieler 1
    
    #define ZEICHEN2 '/'        // Spielsteine für Spieler 2
    
    #define SPEED    100        // Animations-Geschwindigkeit
    
    // GLOBALE VATIABLEN
    
    char name1[20];                 // Name von Spieler 1
    
    char name2[20];                 // Name von Spieler 2
    
    int f[8][8];                    // Das Spielfeld
    
    int a[3][27];                   // Animationsfelder
    
    //FUNKTIONEN
    
    void welcome_msg(void);
    
    void init(void);
    
    void zeige_spielfeld(void);
    
    void animation(int spalte, int hohe, int wer);
    
    void ziehen(int wer);           // Spieler zieht
    
     int winchk(int wer);           // Überprüft, ob jemand gewonnen hat
    
    void win(int wer);              // Gibt Gewinnmeldung aus
    
    void highlight(int ax,int ay, int bx, int by,
    
                   int cx, int cy, int dx, int dy);
    
    int main(void)
    
    {   int neuesspiel = JA;
    
        int spielende;
    
        int zuege;
    
        srand(time(NULL));
    
        welcome_msg();
    
        while ( neuesspiel == JA )
    
        {   init();
    
            spielende = NEIN;
    
            zuege = 0;
    
    // Der Spielablauf:
    
            zeige_spielfeld();
    
            while ( spielende == NEIN && zuege < 42 )
    
            {   ziehen(SPIELER1);
    
                zuege++;
    
                zeige_spielfeld();
    
                spielende = winchk(SPIELER1);
    
                if ( spielende == JA )
    
                    break;
    
                ziehen(SPIELER2);
    
                zuege++;
    
                zeige_spielfeld();
    
                spielende = winchk(SPIELER2);
    
                if ( zuege >= 42 )
    
                    printf("Unentschieden!\n");
    
            }
    
    // Spielende
    
            printf("\nM%cchten Sie ein neues Spiel starten (J)a/(N)ein?\n", oe);
    
            printf("\n==> ");
    
            neuesspiel = jn_frage();
    
        }
    
        return EXIT_SUCCESS;
    
    }
    
    /***********************************************************
    
        Zweck der Funktion:
    
            - Zeigt den Begrüßungsbildschrim an
    
    ************************************************************/
    
    void welcome_msg(void)
    
    {   clrscr();
    
        printf("Willkommen bei 4Gewinnt!\n\n");
    
        printf("Mit beliebiger Taste starten...\n");
    
        getch();
    
    }
    
    /**************************************
    
        Zweck der Funktion:
    
            - Ließt Spielernamen ein
    
            - Legt fest, wer startet
    
            - Initialisiert das Spielfeld
    
    ***************************************/
    
    void init(void)
    
    {   char tmp_name[20];
    
        static int namen = NEIN;
    
        int starten = 0;
    
        int count1, count2;
    
    // Ließt Namen ein
    
        if ( namen == NEIN )
    
        {   namen = JA;
    
            clrscr();
    
            puts("Spieler 1: Geben Sie bitte Ihren Namen ein.");
    
            printf("\n\n==> ");
    
            fgets(name1, 20, stdin);
    
            name1[strlen(name1)-1] = ' ';
    
            clrscr();
    
            puts("Spieler 2: Geben Sie bitte Ihren Namen ein.");
    
            printf("\n\n==> ");
    
            fgets(name2, 20, stdin);
    
            name2[strlen(name2)-1] = ' ';
    
        }
    
    // Legt fest, wer startet
    
        clrscr();
    
        printf("Wer soll starten?\n\n");
    
        printf("1. %s\n", name1);
    
        printf("2. %s\n", name2);
    
        printf("3. Zuf%cllig\n", ae);
    
        starten = int_eingabe(1, 3);
    
        if ( starten == 1 )
    
            printf("\n\n%sstartet...", name1);
    
        else if ( starten == 2 )
    
        {   strcpy(tmp_name, name1);
    
            strcpy(name1, name2);
    
            strcpy(name2, tmp_name);
    
            printf("\n\n%sstartet...", name1);
    
        }
    
        else
    
        {   printf("\nTaste dr%ccken um auszulosen...\n", ue);
    
            getch();
    
            clrscr();
    
            for(count1=0;count1<15;count1++)
    
            {   printf("--> %s\n", name1);
    
                printf("    %s\n", name2);
    
                sleep(120);
    
                clrscr();
    
                printf("    %s\n", name1);
    
                printf("--> %s\n", name2);
    
                sleep(120);
    
                clrscr();
    
            }
    
            starten = rand();
    
            if ( starten % 2 == 0 )
    
            {   printf("    %s\n", name1);
    
                printf("--> %s\n", name2);
    
                strcpy(tmp_name, name1);
    
                strcpy(name1, name2);
    
                strcpy(name2, tmp_name);
    
            }
    
            else
    
            {   printf("--> %s\n", name1);
    
                printf("    %s\n", name2);
    
            }
    
            printf("\n\n%s startet...", name1);
    
        }
    
        sleep(1500);
    
        clrscr();
    
        printf("Initialisierung\n\n");
    
    // Initialisiert die Spielfelder
    
        for(count1=0;count1<8;count1++)
    
        {   for(count2=0;count2<8;count2++)
    
                f[count1][count2] = ' ';
    
        }
    
    // Initialisiert die Animationsfelder
    
        for(count1=0;count1<3;count1++)
    
        {   for(count2=0;count2<27;count2++)
    
                a[count1][count2] = ' ';
    
        }
    
    // Simuliert Ladevorgang
    
        for(count1=0;count1<80;count1++)
    
        {   sleep(10);
    
            printf("%c", 178);
    
        }
    
    }
    
    /**********************************************
    
        Zweck der Funktion:
    
            - Lässt Spieler einen Zug durchführen
    
            - Ruft die Animations-Funktion auf
    
    ***********************************************/
    
    void ziehen(int wer)
    
    {   int ch;             // Zeichen des Spielers
    
        int zeile;
    
        int spalte = 0;
    
        int hohe = 0;
    
        int gesetzt = NEIN;
    
        if ( wer == SPIELER1 )
    
        {   ch = ZEICHEN1;
    
            printf("\n\n\n%sist am Zug: ", name1);
    
        }
    
        else
    
        {   ch = ZEICHEN2;
    
            printf("\n\n\n%sist am Zug: ", name2);
    
        }
    
        printf("Welche spalte (1-7)?\n\n");
    
        while ( gesetzt == NEIN )
    
        {   spalte = int_eingabe(1, 7);
    
    // Ermittelt die Höhe
    
            for(zeile=1;zeile<=6;zeile++)
    
            {   if ( zeile == 6 )
    
                {   puts("Die Spalte ist voll! Bitte wiederholen Sie den Zug.");
    
                    break;
    
                }
    
                if ( f[spalte][zeile] == ' ' )
    
                {   hohe = zeile;
    
                    gesetzt = JA;
    
                    break;
    
                }
    
            }
    
        }
    
        animation(spalte, hohe, wer);
    
    }
    
    /***********************************************************
    
        Zweck der Funktion:
    
            - Animation des Spielzugs auf dem Bilschrim:
    
              - Fährt einen Kran mit dem Spielstein aus
    
              - Lässt den Stein in die entsprechende Spalte fallen
    
              - Fährt den Kran wieder zurück
    
    ************************************************************/
    
    void animation(int spalte, int hohe, int wer)
    
    {   int count, count1, count2;  // Diverse Counter
    
        int ch;                     // Zeichen der Spieler
    
        int schritte;               // Schritte nach rechts auf der X-Achse
    
    // Zeichen setzen
    
        if ( wer == SPIELER1 )
    
            ch = ZEICHEN1;
    
        else
    
            ch = ZEICHEN2;
    
    // Schritte auf der X-Achse anpassen
    
        switch ( spalte )
    
        {   case 1: schritte = 7; break;
    
            case 2: schritte = 10; break;
    
            case 3: schritte = 13; break;
    
            case 4: schritte = 16; break;
    
            case 5: schritte = 19; break;
    
            case 6: schritte = 22; break;
    
            case 7: schritte = 25; break;
    
            default: puts("Fehler");
    
        };
    
    // Den Kran links erscheinen lassen
    
        a[0][1] = '|';
    
        a[1][1] = ch;
    
        a[2][1] = ch;
    
        zeige_spielfeld();
    
        sleep(SPEED);
    
        a[0][2] = '|';
    
        a[1][2] = ch;
    
        a[2][2] = ch;
    
        zeige_spielfeld();
    
        sleep(SPEED*2);
    
    // Findet X-Position und stoppt
    
        for(count=1;count<schritte;count++)
    
        {   a[0][count] = ' ';
    
            a[1][count] = ' ';
    
            a[2][count] = ' ';
    
            a[0][count+2] = '|';
    
            a[1][count+2] = ch;
    
            a[2][count+2] = ch;
    
            zeige_spielfeld();
    
            sleep(SPEED-(count*3));
    
        }
    
    // Löst Stein vom Kran
    
        a[0][count+0] = '|';
    
        a[0][count+1] = '|';
    
        a[1][count+0] = ' ';
    
        a[1][count+1] = ' ';
    
        a[2][count+0] = ' ';
    
        a[2][count+1] = ' ';
    
        f[spalte][6] = ch;
    
        zeige_spielfeld();
    
        sleep(SPEED+50);
    
    // Stein in Spalte fallen lassen
    
        for(count1=(6);count1>hohe;count1--)
    
        {       f[spalte][count1] = ' ';
    
                f[spalte][count1-1] = ch;
    
                zeige_spielfeld();
    
                sleep(SPEED);
    
        }
    
    // Fährt den Kran zurück
    
        for( ; count>(-1);count--)
    
        {   a[0][count+1] = ' ';
    
            a[0][count-1] = '|';
    
            zeige_spielfeld();
    
            sleep(SPEED);
    
        }
    
        sleep(SPEED*2);
    
    // Animationsfelder zurücksetzen
    
        for(count1=0;count1<3;count1++)
    
        {   for(count2=0;count2<27;count2++)
    
                a[count1][count2] = ' ';
    
        }
    
    }
    
    /***********************************************************
    
        Zweck der Funktion:
    
            - Zeigt das aktuelle Spielfeld an
    
    ************************************************************/
    
    void zeige_spielfeld(void)
    
    {   int count1, count2;
    
        clrscr();
    
    // Zeige Animationsfelder
    
        printf("\n\n=============================)\n");
    
        for(count1=0;count1<=2;count1++)
    
        {   for(count2=1;count2<=26;count2++)
    
            {   printf("%c", a[count1][count2]);
    
            }
    
            puts("");
    
        }
    
    // Zeige Spielfelder
    
        for(count1=6;count1>=1;count1--)
    
        {   printf("   %d |", count1);
    
            for(count2=1;count2<=7;count2++)
    
            {   printf("%c%c|", f[count2][count1], f[count2][count1]);
    
            }
    
            puts("");
    
            printf("     |");
    
            for(count2=1;count2<=7;count2++)
    
            {   printf("%c%c|", f[count2][count1], f[count2][count1]);
    
            }
    
            puts("");
    
        }
    
        printf("     ======================\n");
    
        printf("      1  2  3  4  5  6  7 \n");
    
    }
    
    /**************************************************************
    
        Zweck der Funktion:
    
            - Überprüft, ob ein Spieler gewonnen hat
    
            - Gibt Resultat (JA/NEIN) zurück
    
        Hinweis:
    
            - Diese Funktion untersucht mit Absicht
    
              das komplette Spielfeld, um eine Implementierung
    
              einer Bewertungsfunktion für eine KI zu erleichtern
    
    ***************************************************************/
    
    int winchk(int wer)
    
    {
    
        int ch;                     // Zu überprüfendes Zeichen
    
        int count1, count2;
    
        int ax=0,bx=0,cx=0,dx=0;
    
        int ay=0,by=0,cy=0,dy=0;
    
        int run = 5;
    
    // Zeichen setzen
    
        if ( wer == SPIELER1 )
    
            ch = ZEICHEN1;
    
        else
    
            ch = ZEICHEN2;
    
    // Überprüft waagrechte Linien: ----
    
        for(count1=1;count1<8;count1++)
    
        {   ax=1; bx=2; cx=3; dx=4;
    
            for(count2=1;count2<5;count2++)
    
            {   if ( (ch == f[ax][count1]) && (ch ==  f[bx][count1]) && (ch ==
    
                f[cx][count1]) && (ch ==  f[dx][count1]) )
    
                {   highlight(ax,count1,bx,count1,cx,count1,dx,count1);
    
                    win(wer);
    
                    return JA;
    
                }
    
                ax++; bx++; cx++; dx++;
    
            }
    
        }
    
    // Überprüft senkrechte Linien: ||||
    
        for(count1=1;count1<8;count1++)
    
        {   ay=1; by=2; cy=3; dy=4;
    
            for(count2=1;count2<5;count2++)
    
            {   if ( (ch == f[count1][ay]) && (ch ==  f[count1][by]) && (ch ==
    
                f[count1][cy]) && (ch ==  f[count1][dy]) )
    
                {   highlight(count1,ay,count1,by,count1,cy,count1,dy);
    
                    win(wer);
    
                    return JA;
    
                }
    
                ay++; by++; cy++; dy++;
    
            }
    
        }
    
    // Überprüft diagonale Linien: //// (untere Hälfte)
    
        for(count1=1;count1<5;count1++)
    
        {   ay=0; by=1; cy=2; dy=3;
    
            ax=count1-1; bx=count1+0; cx=count1+1; dx=count1+2;
    
            for(count2=1;count2<run;count2++)
    
            {   if  ( (ch == f[count2+ax][count2+ay]) && (ch ==  f[count2+bx][
    
                count2+by]) && (ch ==  f[count2+cx][count2+cy]) && (ch ==  f[
    
                count2+dx][count2+dy]) )
    
                {   highlight((count2+ax),(count2+ay),(count2+bx),(count2+by),(
    
                    count2+cx),(count2+cy),(count2+dx),(count2+dy));
    
                    win(wer);
    
                    return JA;
    
                }
    
            }
    
            run--;
    
        }
    
    // Überprüft diagonale Linien: //// (obere Hälfte)
    
        run = 5;
    
        for(count1=1;count1<5;count1++)
    
        {   ay=count1-1; by=count1+0; cy=count1+1; dy=count1+2;
    
            ax=0; bx=1; cx=2; dx=3;
    
            for(count2=1;count2<run;count2++)
    
            {   if  ( (ch == f[count2+ax][count2+ay]) && (ch ==  f[count2+bx][
    
                count2+by]) && (ch ==  f[count2+cx][count2+cy]) && (ch ==  f[
    
                count2+dx][count2+dy]) )
    
                {   highlight((count2+ax),(count2+ay),(count2+bx),(count2+by),(
    
                    count2+cx),(count2+cy),(count2+dx),(count2+dy));
    
                    win(wer);
    
                    return JA;
    
                }
    
            }
    
            run--;
    
        }
    
    // Überprüft diagonale Linien: \\\\ (untere Häfte)
    
        run = 5;
    
        for(count1=4;count1>0;count1--)
    
        {   ay=0; by=1; cy=2; dy=3;
    
            ax=count1+3; bx=count1+2; cx=count1+1; dx=count1+0;
    
            for(count2=1;count2<run;count2++)
    
            {   if ( (ch==f[ax][count2+ay])&&(ch==f[bx][count2+by])&&(ch==f[cx][
    
                count2+cy])&&(ch==f[dx][count2+dy]) )
    
                {   highlight((ax),(count2+ay),(+bx),(count2+by),(cx),(count2+
    
                    cy),(dx),(count2+dy));
    
                    win(wer);
    
                    return JA;
    
                }
    
                ax--; bx--; cx--; dx--;
    
            }
    
            run--;
    
        }
    
    // Überprüft diagonale Linien: \\\\ (obere Häfte)
    
        run = 5;
    
        for(count1=1;count1<5;count1++)
    
        {   ay=count1-1; by=count1+0; cy=count1+1; dy=count1+2;
    
            ax=7; bx=6; cx=5; dx=4;
    
            for(count2=1;count2<run;count2++)
    
            {   if  ( (ch == f[ax][count2+ay]) && (ch ==  f[bx][count2+by]) && (
    
                ch ==  f[cx][count2+cy]) && (ch ==  f[dx][count2+dy]) )
    
                {
    
                    highlight((ax),(count2+ay),(bx),(count2+by),(cx),(count2+cy)
    
                              ,(dx),(count2+dy));
    
                    win(wer);
    
                    return JA;
    
                }
    
                ax--; bx--; cx--; dx--;
    
            }
    
            run--;
    
        }
    
        return NEIN;
    
    }
    
    /***********************************************************
    
        Zweck der Funktion:
    
            - Lässt vier übergebene Felder aufblinken
    
    ************************************************************/
    
    void highlight(int ax,int ay, int bx, int by, int cx, int cy, int dx, int
    
                   dy)
    
    {
    
        int ch = f[ax][ay];
    
        int count;
    
        for(count=0;count<17;count++)
    
        {   f[ax][ay] = ' ';
    
            f[bx][by] = ' ';
    
            f[cx][cy] = ' ';
    
            f[dx][dy] = ' ';
    
            zeige_spielfeld();
    
            sleep(100);
    
            f[ax][ay] = ch;
    
            f[bx][by] = ch;
    
            f[cx][cy] = ch;
    
            f[dx][dy] = ch;
    
            zeige_spielfeld();
    
            sleep(100);
    
        }
    
    }
    
    /***********************************************************
    
        Zweck der Funktion:
    
            - Gibt die Gewinnmeldung aus
    
    ************************************************************/
    
    void win(int wer)
    
    {   printf("\n\n\n");
    
        if ( wer == SPIELER1 )
    
        {   printf("%shat gewonnen!\n", name1);
    
            getch();
    
        }
    
        else
    
        {   printf("%shat gewonnen!\n", name2);
    
            getch();
    
        }
    
    }
    

    Gruß, simon



  • habe das von dir eben kpiert. danke schonmal.
    habe dann das prorgamm in mein Dev C++ eingefüght (was ich mir auf dieser siete http://www.vollversion.de/download/dev_c_3639.html gedownlaoded habe). danach ahbe ich oben links bei diesen Dev C++ programm auf Kompilieren + Ausführen gedrückt. Nicht viel egschah und unten stand: Das system kann die angegebene datei nicht finden

    was nun?!?! bitte um hilfe
    liebe grüße



  • Tajo schrieb:

    habe das von dir eben kpiert. danke schonmal.
    habe dann das prorgamm in mein Dev C++ eingefüght (was ich mir auf dieser siete http://www.vollversion.de/download/dev_c_3639.html gedownlaoded habe). danach ahbe ich oben links bei diesen Dev C++ programm auf Kompilieren + Ausführen gedrückt. Nicht viel egschah und unten stand: Das system kann die angegebene datei nicht finden

    was nun?!?! bitte um hilfe
    liebe grüße

    warscheinlich kennt bzw hat dein compiler nicht die benötigte header datei bl01lib.h



  • 1. das Wort "DEFINIERUNGEN" im Source hat mir heut den Tag versüßt 😃
    2. Das ist C, kein C++. Ich will es nur gesagt haben, da du ja C++ vorstellen willst.



  • Hat denn einer ein 4 gewinnt programm für c++ und nicht für c?!?!?
    falss das obige programm bei c++ auch funktioniert, dann bitte ich denjenigen, mir diese eine datei zu schicken?!?!
    hoffe auf antworten!



  • Wie wärs mal mit ein wenig mehr Freundlichkeit?😡



  • uhi sry..das war nicht so gemeint..ist wahrschenlich falsch rüber gekommen. ich freue mich über jeden antwort und über jede hilfe. und bedanekn will ich mich natürlich auch nochmal! hoffe trotzdem weiterhin, dass mir noch geholfen werden kann 😞



  • Hausaufgaben werden selten umsonst fuer einen geloest (falls du dich wunderst warum keiner schreiben sollte). Ich denke die gepostete Loesung gibt einen guten Start, nimm ein C++ Buch, versteh die Grundlagen der Sprache (nicht so viel anders wie in VB), und schwupps kannst dus umbauen. Ich mach das hier mal zu, wenn du das Verlangen haben solltest etwas dafuer zu bezahlen, dann mach hier bitte einen neuen Thread. Wenn du eine konkrete Frage zu c++ hast, dann poste bitte ins c++ unterforum.


Anmelden zum Antworten