Das Gute, Alte Snake ^^
-
Hi Community ^^
Ich habe es wieder geschafft das Spiel
Snake so unübersichtlich und unlogisch
wie möglich zu Programmieren#include <iostream> #include <windows.h> #include <stdio.h> #include <cstdlib> #include <conio.h> #include <string> #define KEY_UP 72 #define KEY_DOWN 80 #define KEY_LEFT 75 #define KEY_RIGHT 77 #define C_KEY 67 using namespace std; int Taste(void); int main(){ string xpos; string zpos; int x_pos = sizeof(xpos); int z_pos = sizeof(zpos); int x1 = 1; int Feld[50][50]; while(x1 = 1) { int key = Taste(); switch(key) { case KEY_UP: break; case KEY_DOWN: system("cls"); zpos = zpos + "\n"; cout << zpos + xpos << ">"; break; case KEY_LEFT: system("cls"); xpos = xpos + "\b"; cout << zpos + xpos << ">"; break; case KEY_RIGHT: system("cls"); xpos = xpos + " "; cout << zpos + xpos << ">"; break; default: system("cls"); break; } } Taste(); getchar(); } int Taste() { int key; key=getch(); if(key = 224) { key=getch(); } return key; }
Und da kommt meine Frage
Wie kann ich KEY_UP machen?
Also das die Schlange was bei mir
eigt. ein Dreieck ist raufgeht? ^^Oder gibt es gar eine bessere lösung als \b und \n
usw.Und Jaaa ich habe den Forum durchsucht
aber nicht gefunden was ich verstehe/brauche (kein wunder :P)MFG: N290
-
Warum hast du Zeile 25 in deinem Quelltext?
Willst du die nicht nutzen?MfG f.-th.
-
Bei Zeile 25 bin ich mir
noch nicht sicher wie ich das machen soll
Darum hab ichs erstmal ausgelassen
-
f.-th. wollte dich darauf hinweisen, das Zeile 25 dein Lösungsweg ist.
Damit du auch ein KEY_UP machen kannst musst du immer das ganze Spielfeld (Zeile 25) neuzeichnen...
'Beispiel':
Feld[0][0] ... Feld[maxX][maxY] = " " Feld[x][y] = "<" //Zeichne Spielfeld
-
Ahhh danke
Tja dann ist snake NOCH ein bisshen zu hart ^^
Ehrlich gesagt hab ich jetzt kein Plan wie ich das Anwende O.o
Aber danke für die Hilfe
-
Hallo,
Ich habe vor ein paar Monaten mal ein sehr einfaches Snake in C++ gemacht,
vielleicht hilft es dir.#include <iostream> #include <windows.h> #include <conio.h> using namespace std; //Funktionsprototypen: void gotoxy(int x,int y); //eine Funktion, um den Cursor zu positionieren void SetFutter(void); //eine Funktion, die das Futter positioniert //Variablen: int snake[1000][2]; //Alle Segmente der Schlange; x und y int laenge; //wie lang ist die Schlange? int kopfx; //Koordinaten des Kopfes int kopfy; int futterx; //Koordinaten des Futters int futtery; char richtung; //Richtung, in die die Schlange gerade läuft int biss; //hat sich die Schlange selbst oder in die Wand gebissen? int i; int main (void){ //Ausgabe des Rahmens: system("cls"); //lösche Bildschirm = clear screen gotoxy(0,0); //Mache Kreuze in die Ecken cout << "+"; gotoxy(0,21); cout << "+"; gotoxy(41,0); cout << "+"; gotoxy(41,21); cout << "+"; for (i = 1; i <=40; i++){ //mache horizontale Rahmenlinien gotoxy(i,0); cout << "-"; gotoxy(i,21); cout << "-"; } for (i = 1; i <=20; i++){ //mache verikale Rahmenlinien gotoxy(0,i); cout << "|"; gotoxy(41,i); cout << "|"; } //Setup der Schlange: richtung = 'd'; //Die Schlange läuft am Anfang nach rechts, also Taste 'd' kopfx = 10; //Lege die Position des Kopfes fest kopfy = 10; laenge = 5; //Die Schlange ist am Anfang 5 lang. biss = 0; //Sie hat sich logischerweise auch noch nicht gebissen for (i = 0; i < 5; i++){ //Leg die Koordinaten des Körpers fest snake[i][0]= 10-i; snake[i][1]= 10; } SetFutter(); //Generiere Futter for (i = 0; i < laenge; i++){ //Gib die Schlange aus gotoxy(snake[i][0],snake[i][1]); cout << "O"; } //Spiel: while(!biss){ //Solange Biss=0 if (kbhit()) //Wenn jemand die tastatur "Schlägt"; kb = keyboard richtung = getch(); //dann lese die gedrückte taste in die Variable 'richtung' kopfx = snake[0][0]; //lade die Kopfkoordinaten kopfy = snake[0][1]; switch (richtung){ //Bewege den Kopf, jenachdem welcher Buchstabe gedrückt wurde case 'd': kopfx++; break; case 'a': kopfx--; break; case 's': kopfy++; break; case 'w': kopfy--; break; } //Lösche das letzte Segment der Schlange gotoxy(snake[laenge-1][0],snake[laenge-1][1]); cout << " "; //Verschiebe die Koordinaten aller Segmente um 1 nach hinten for (i = laenge-1; i > 0; i--){ snake[i][0] = snake[i-1][0]; snake[i][1] = snake[i-1][1]; if ((kopfx == snake[i][0]) && (kopfy == snake[i][1])) biss = 1; //wenn der Kopf auf einem Segment der Schlange ist } //Speichere die neuen Kopfkoordinaten snake[0][0] = kopfx; snake[0][1] = kopfy; //wenn Kopf = Futter if ((kopfx == futterx) && (kopfy == futtery)){ SetFutter(); //Generiere neues Futter laenge++; //lass die Schlange wachsen } if ((kopfx < 1) || (kopfx > 40)|| (kopfy < 1)|| (kopfy > 20)) biss = 1; //wenn der Kopf aus dem Spielfeld rausgeht gotoxy(kopfx,kopfy); //Gebe Kopf aus cout << "O"; gotoxy(0,0); //gebe ein neues Kreuz aus. cout << "+"; Sleep(70); //Verlangsame das Spiel ein wenig } system("cls"); //Lösche Bildschirm cout << "Spiel zuende!\n" << endl; //Gib was aus cout << "\nDruecke die Eingabetaste..."; getchar(); //Warte, bis der User Enter drückt return 0; //Gib nichts zurück, Ende } //Funktion gotoxy: void gotoxy(int x,int y) { COORD cur={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cur); } //Funktion setFutter void SetFutter(void){ srand(time(NULL)); //Mach die Zufallszahlen abhängig von der Zeit int _fehler; do{ _fehler = 0; futterx =(rand()%40)+1; //Generiere zufällige Koordianten futtery =(rand()%20)+1; for (i = laenge-1; i >= 0; i--){ if ((futterx == snake[i][0]) && (futtery == snake[i][1])) _fehler = 1; //wenn das futter auf einem Segment der Schlnge landet, versuche es erneut } }while(_fehler); gotoxy(futterx,futtery); cout << "X"; //Gib das Futter aus }
-
Danke!
Nur selten stellt jemand seinen Code public
und dann noch mit Kommentaren....DANKE!
-
Ja, mit dem Code wollte ich eigentlich mal ein Tutorial machen, kam aber in letzter Zeit nicht dazu.
-
Wenn du wirklich eines machst
schick mir ne Pn oder ähnliches.
Heiße auf YT PyroTec21
-
Ja, das werde dir was schicken (bin FensterSieben auf YT).
-
Das Ganze geht aber wesentlich eleganter und ohne dass man ständig alle Segmente verschieben muss :p
-
Ja, ich weis, aber damals wusste ich eben noch nicht wies anders geht. Vielleicht mach ich mal ein neues.
-
@cooky Aaaaaber es Funtkioniert!
Und hat mir sehr geholfen.
Jetzt weiß ich wo ich noch was lernen muss zum Snake Programmieren
(Hab das Buch C++ von A bis Z)
-
Ok, dann viel Spaß.
In den nächsten Tagen werde ich meine überarbeitete Version einstellen - mit einem zweidimensionalen Ringspeicher für extra Speed.
-
LOL Ringspeicher ist doch gar nicht nötig
Zähl die Runden mit und halte die Länge der Snake fest dann hast Du quasi einen automatischen Ringpuffer (modulo ist da sehr hilfreich^^)
-
@MGDOS
Danke!
Hab dich auf jedenfall Abo falls
du ein Vid. machst.MFG
-
@ cooky:
hat ich ja auch vor - das ist doch dann ein Ringspeicher.
-
MGOS schrieb:
Ja, mit dem Code wollte ich eigentlich mal ein Tutorial machen, kam aber in letzter Zeit nicht dazu.
Braucht auch kein Mensch...
-
Miese Tutorials schrieb:
MGOS schrieb:
Ja, mit dem Code wollte ich eigentlich mal ein Tutorial machen, kam aber in letzter Zeit nicht dazu.
Braucht auch kein Mensch...
Warum? Anfänger freuen sich über so etwas. Man sollte nur darauf achten auch wirklich schönen/brauchbaren/guten Code zu nutzen. (Und diese erste Snake Version ist.. na ja.. nicht umbedingt schön )
-
Wenn du damit meine meinst ok
Aber wenn du die Version von MGOS meinst....
Zeig du wie manns besser macht!