Fehlerhaftes Snake! hoffentlich nicht mehr lange ;-)
-
Hallo!
Ich bin schon so weit, dass ich bei einem ganz einfachen Snake, die Schlange bewegen kann, und sie auch das mach, was sie machen soll. Nur habe ich jetzt noch genau 2 Probleme:1. Wie kann ich das Spiel beenden,
wenn man sich selber frisst oder sie an den Rand stößt?
2. Brauche ich bitte kleine Tipps, wegen dem "Futter".
3. Kann ich einfach, wenn sie nach links läuft, wieder nach rechts lenken.
Am besten ihr probiert es!Ich danke euch sehr im Voraus!
Ich weiß, dass ich hier jetzt viel verlange, aber ich möchte es auch kapieren, wies wirklich geht!
Wenn jemand so freundlich ist, und mir hilft
, dann soll es bitte nur so unkompliziert als möglich sein!
Ich sag es immer wieder, aber Danke im Voraus!
Hier ist das, was ich bis jetzt habe:#include <iostream.h> #include <conio.h> #include <stdio.h> #include <iomanip.h> #include <dos.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <vcl.h> #pragma hdrstop #pragma argsused //------------------------- Variblendeklaration ------------------------------- void snake_show(void); void DrawFrame(int x1,int y1,int x2,int y2,int line); struct snake_pos { int x_pos; int y_pos; char sign; }; int dx=1, dy=0, x=30, y=10; void snake_move(int xdir, int ydir, snake_pos snake2[]); snake_pos snake1[]={{x,y,'\x20'}, {x+1,y,'\xB1'}, {x+2,y,'\xB1'}, {x+3,y,'\xB1'}, {x+4,y,'\xB1'}, {x+5,y,'\xDB'}}; //-------------------------- Unterprogramme ---------------------------------- void DrawFrame(int x1,int y1,int x2,int y2, int line) { int temp; if (x1>x2) { temp=x1; x1=x2; x2=temp; } if (y1>y2) { temp=y1; y1=y2; y2=temp; } if (line==2) { gotoxy(x1,y1); cout<<'\xC9'<<setw(x2-x1)<<setfill('\xCD')<<'\xBB'; gotoxy(x1,y2); cout<<'\xC8'<<setw(x2-x1)<<setfill('\xCD')<<'\xBC'; for (int i=y1+1;i<=y2-1;i++) { gotoxy(x1,i); cout<<'\xBA'; gotoxy(x2,i); cout<<'\xBA'; } } } void snake_show(void) { for(int i=0; i<6;i++) { gotoxy(snake1[i].x_pos,snake1[i].y_pos); cout<<snake1[i].sign; } } void snake_move(int xdir, int ydir, snake_pos snake2[]) { snake2[5].x_pos+=xdir; snake2[5].y_pos+=ydir; for(int i=0; i<5; i++) { snake2[i].x_pos=snake2[i+1].x_pos; snake2[i].y_pos=snake2[i+1].y_pos; } } //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { clrscr(); _setcursortype(_NOCURSOR); DrawFrame(1,1,80,23,2); do { for(int k=0; k<2; k++) { k--; Sleep(200); if(kbhit()) { switch(getch()) { case 77: dx=1; dy=0; break ; case 75: dx=-1; dy=0; break ; case 72: dx=0; dy=-1; break ; case 80: dx=0; dy=1; break ; } } gotoxy(1,25); snake_move(dx,dy,snake1); snake_show(); } } while(getch()!='q'); return 0; } //---------------------------------------------------------------------------
-
Hallo
Zuerst solltest du mal deine Header aktualisieren und dir dann überlegen, was es für Abbruchbedingungen gibt und diese beipielsweise in einer while Schleife abfragen.
chrische
-
chrische5 schrieb:
Hallo
Zuerst solltest du mal deine Header aktualisieren und dir dann überlegen, was es für Abbruchbedingungen gibt und diese beipielsweise in einer while Schleife abfragen.
chrische
Ich weiß jetzt nicht ganz, was du meinst.
-
Na Du fragst doch auf getch()!='q' ab, da könntest du doch die anderen abbruchbedingungen gut unterbringen.
-
Hallo
Deine inkludierten Header sind nicht aktuell. (z. Bsp.: wurde aus iostream.h 1998 iostream ohne .h)
chrische
-
Martin__S schrieb:
Na Du fragst doch auf getch()!='q' ab, da könntest du doch die anderen abbruchbedingungen gut unterbringen.
Ich weiß aber nicht ganz, wie?
Soll ich das mit if machen?
Bitte zeige mir ein bisschen was.
-
Hallo
Du kannst doch mehrere Bedingungen per && oder || verknüpfen.
chrische
-
chrische5 schrieb:
Hallo
Du kannst doch mehrere Bedingungen per && oder || verknüpfen.
chrische
Ich weiß aber nicht, wo ich das wie einbauen soll...
Ich weiß, ich bin doof
-
Könnte mir vielleicht irgendwie weiterhelfen

Danke.
-
Am geilsten sind in deinem Code sachen wie:
if(dx==1 && dy==0); if(dx==-1 && dy==0); if(dx==0 && dy==1); if(dx==0 && dy==-1);Denn die kannst du auch einfach rauslassen .. so wie die da stehen machen die nix. Du schließt mit dem Simikolon das bedingte Ausführen ab.
-
(D)Evil schrieb:
Am geilsten sind in deinem Code sachen wie:
if(dx==1 && dy==0); if(dx==-1 && dy==0); if(dx==0 && dy==1); if(dx==0 && dy==-1);Denn die kannst du auch einfach rauslassen .. so wie die da stehen machen die nix. Du schließt mit dem Simikolon das bedingte Ausführen ab.
Danke, habe es bereits aktualisiert!
Ich bräuchte noch diese Sachen:
1. Wie kann ich das Spiel beenden,
wenn man sich selber frisst oder sie an den Rand stößt?
2. Brauche ich bitte kleine Tipps, wegen dem "Futter".
3. Kann ich einfach, wenn sie nach links läuft, wieder nach rechts lenken.
Am besten ihr probiert es!ich hoffe auf eine gute Antwort, die auch ich verstehe

Danke
-
Du mußt dir ansehen, was auf dem neuen Kopffeld eingetragen ist (am besten stellst du dein Spielfeld als 2D char-Array dar). Wenn dort ein Stück der Schlange oder eine Wand steht, knallt's, wenn dort etwas zu Essen ist, wird die Schlange entsprechend verlängert und ein neues Stück Futter zufällig ausgelegt.
(@3: Mit dieser Kollisionserkennung kannst du auch eine 180-Grad Wende abfangen)
-
Hallo
Friedfischer schrieb:
chrische5 schrieb:
Hallo
Du kannst doch mehrere Bedingungen per && oder || verknüpfen.
chrische
Ich weiß aber nicht, wo ich das wie einbauen soll...
Ich weiß, ich bin doof
Du musst dir überlegen, was alles dazu führt, dass das Programm beendet wird und diese Dinge musst du in der while Schleife überprüfen.
chrische
-
Habs im Mom. soweit:
Jetzt bräuchte ich noch folgendes:
1. Wie kann ich das Spiel beenden, wenn man sich selber frisst?
2. Brauche ich bitte kleine Tipps, wegen dem "Futter".
3. Kann ich einfach, wenn sie nach links läuft, wieder nach rechts lenken.Müsste es bis Mittwoch schaffen.
Bitte helft mir so, dass auch ich es schaffe
SEITE 3
-
hmm so ... also deine Header stimmen alle nicht. Und du solltest dir überlegen, ob du wirklich Sleep nutzen willst, oder dir da nicht was eigenes schreiben willst, denn alleine diese Funktion braucht den Header windows.h. Desweiteren scheinst du eine ImprovedConsole zu verwenden. Standard C++ kennt gotoxy usw nicht.
std::cout anstelle von cout ... usw ..
aja die korrekten Header heißen:
#include <iostream> #include <windows.h> // NUR FÜR Sleep(); ... nicht sinnvoll! #include <conio.h> // Darin ist gotoxy nicht enthalten! Scheinst conioex.h zu nutzen....
-
(D)Evil schrieb:
hmm so ... also deine Header stimmen alle nicht. Und du solltest dir überlegen, ob du wirklich Sleep nutzen willst, oder dir da nicht was eigenes schreiben willst, denn alleine diese Funktion braucht den Header windows.h. Desweiteren scheinst du eine ImprovedConsole zu verwenden. Standard C++ kennt gotoxy usw nicht.
std::cout anstelle von cout ... usw ..
aja die korrekten Header heißen:
#include <iostream> #include <windows.h> // NUR FÜR Sleep(); ... nicht sinnvoll! #include <conio.h> // Darin ist gotoxy nicht enthalten! Scheinst conioex.h zu nutzen....
Danke erstmal.
Wir haben von unserem Lehrer eine Vorlage bekommen, in dem diese vorkommen:
#include <iostream.h> #include <conio.h> #include <stdio.h> #include <iomanip.h> #include <dos.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <vcl.h> #include <ctime.h> #pragma hdrstop #pragma argsusedEr sagte, dass wir das immer so nehmen sollen, da bei dieser Vorlage anscheinend nichts wichtiges fehlt.
Das mit dem std: lernen wir erst, das kapier ich noch überhaupt nicht...
Aber das ist Nebensächlich. bräuchte bitte diese Hilfen:
1. Wie kann ich das Spiel beenden, wenn man sich selber frisst?
2. Brauche ich bitte kleine Tipps, wegen dem "Futter".
3. Kann ich einfach, wenn sie nach links läuft, wieder nach rechts lenken.
-
Nein das ist nicht nebensächlich. Das eine ist korrekt und deins ist so nicht Standard konform bzw falsch.
Und wäre schon ganz gut das du uns sagst woher du die Punktion gotoxy nimmst usw. damit wir wissen was wir brauchen um es zu testen.
-
(D)Evil schrieb:
Nein das ist nicht nebensächlich. Das eine ist korrekt und deins ist so nicht Standard konform bzw falsch.
Und wäre schon ganz gut das du uns sagst woher du die Punktion gotoxy nimmst usw. damit wir wissen was wir brauchen um es zu testen.
Wie meinst du das jetzt genau?

-
Ich habe jetzt alles getestet, welche include - Dateien ich nicht brauche.
Ich hoffe, ich habe das richtig gemacht!Übrig bleiben würden nur diese:
#include <conio.h> #include <iomanip.h>Ich hoffe, dass ihr das braucht?
Vielleicht braucht ihr auch folgende Angaben:
Ich programmiere in Borland 5 mit der Konsole.
Ich freue mich auf Antworten !
-
Darum ging es nicht. Es ging darum, dass iostream**.h** veraltet ist und nicht mehr genutzt werden soll. Da heiszt jetzt einfach nur noch iostream, also #include<iostream> (ohne .h) gleiches gilt für string, time (wird ctime glaub ich) und ctime (wird cctime, bin mir aber nicht sicher)