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 findenwas 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 findenwas nun?!?! bitte um hilfe
liebe grüßewarscheinlich 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.