Snake programmieren. Aber wie?
-
Ich habe mich mal hingesetzt und habe versucht snake nachzuprogrammieren. Ich bin noch ein anfänger und programmieren erst seit ca. 2 monaten und komme ab diesem Punkt einfach nichtmehr weiter.
Ich möchte das meine Schlange automatisch läuft und nicht nur per Tastendruck(getch). Außerdem sollte die Schlange immer Länger werden. Wie das gehen soll weiß ich wirklich nicht. Mein Programm ist laut komplierer soweit Fehlerfrei allerdings fehlen mir die besagten Funktionen noch.Ich benutze Borland C++ 5.02.
Hier mein Quellcode:#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <dos.h> int level,xziel,yziel,spielerx,spielery,taste,zaehler; void zielzeichnen(void); void randomz(void); int main() { textcolor(4); level=0; spielerx=45; spielery=15; randomize(); randomz(); gotoxy(spielerx,spielery); while(level<=0) { taste = getch(); switch(taste) { case 'a': //clrscr(); spielerx--; gotoxy(spielerx,spielery); printf("o"); zielzeichnen(); break; case 'd': //clrscr(); spielerx++; gotoxy(spielerx,spielery); printf("o"); zielzeichnen(); break; case 's': //clrscr(); spielery++; gotoxy(spielerx,spielery); printf("o"); zielzeichnen(); break; case 'w': //clrscr(); spielery--; gotoxy(spielerx,spielery); printf("o"); zielzeichnen(); break; } if(spielerx < 0 || spielerx >80) { level+=4; } if(spielery < 0 || spielery >25) { level+=4; } if(spielerx == xziel) { if(spielery == yziel) { zaehler++; randomz(); } } } if(level==1) { clrscr(); gotoxy(35,15); printf("Gewonnen"); } if(level==4) { clrscr(); gotoxy(35,15); printf("Verloren!"); } getch(); } void randomz(void) { xziel=random(80); yziel=random(25); gotoxy(xziel,yziel); printf("o"); } void zielzeichnen(void) { gotoxy(70,1); printf("Score: "); printf("%i",zaehler); gotoxy(xziel,yziel); printf("o"); }
Ich hoffe ihr könnt mir weiterhelfen!
MfG
-
Es mag sein das dein Compiler dir keine Fehlermeldung ausgegeben hat.
Hat er auch keine Warnung ausgegeben so wie du ihn nutztDie Sache mit den Funktionen solltest du dir noch mal in deinen Unterlagen ansehen.
Zeile: 6, 7, 16, 88 und 95MfG f.-th.
-
Ich habe mir nochmal die Syntax angesehen und ich weiß nicht ob es jetzt "besser" ist aber ich habe mal die void eingesetzt. Mir wurde gesagt bei manchem Compilern ist es pflich so zu programmieren und bei borland darf man etwas "schlampig" programmieren.
Danke für den Hinweis.
MfG
-
Früher unter DOS und Borland
hat man die "Richtungstaste" gespeichertmit
if(kbhit());
abgefragt ob eine weiter Taste betätigt wurde und sonst die gespeicherte Info im Schleifendurchlauf genutzt. Wahrscheinlich musst du dann noch eine "Bremse" einbauen, da deine Finger sonst nicht schnell genug sind
MfG f.-th.
-
Warscheinlich muss das ganze dann mit sleep gebremst werden. Morgen werde ich das ganze mal versuchen.
-
Früher unter Borland und DOS wurde mit
delay(500);
verzögert.
Ob das mit den neueren Compilern und Betriebssystemen noch funktioniert weiss ich nicht. Hatten die alten Borland Compiler nicht einen "Year 2000 Patch"
Falls der Header#include <time.h>
eines alten Borland-Compilers genutzt wird sollte man sich Info über den Patch besorgen.
http://www.c-plusplus.net/forum/150031
Da scheint das Problem bekannt aber nicht alle Infos vorhanden zu sein.Achtung es gibt bei Borland
sleep(100);
aber die meisten Compiler kennen von Windows auch
Slepp(10000);
MfG f.-th.
-
Nimm einfach die SDL, die bietet Zeitfunktionen wie delay an.
http://www.libsdl.org/docs/html/sdldelay.html