Guten Abend liebe Community,
ich arbeite zurzeit an einem kleinen Snake - Game in der Konsole, doch komme ich zurzeit leider nicht damit weiter, da ich mich zurzeit an dem Körper versuche.
Bisher habe ich:
- 10x10 großes Spielfeld
- Schlangenkopf als Smiley
- Food als Herz
- Kollisionserkennung
- Steuerung mit W, A, S, D
Jetzt gerade versuche ich einen Fehler rauszufinden aber ich habe leider keine Ahnug wo er ist
Denn
wenn meine Schlange das 2. Herz eingesammelt hat, wird kein neues Herz
auf der Map erzeugt. Dies Tritt immer erst ab dem 2. Herz auf und danach
kommt lange nichts und nach ca. 20 Sekunden setzt sich die Variable die
dafür da ist zu prüfen ob der Kopf der Schlange mit dem Herz kollidiert
ist sich auf true, ein neues Herz erscheint und kann wieder
eingesammelt werden.
Bei jedem weiterem Herz kommt das selbe Problem
auf, die Ursache dafür habe ich bis jetzt nicht rausgefunden und sitze
bis jetzt schon ne gute Stunde dran.
Falls jemand eine Idee hat wonach ich suchen könnte, würde ich mich freuen, wenn er mir dies mitteilt
So schaut der Kern des Programmes aus:
Im Ausschnitt sieht man den Teil zu dem verzweigt wird, wenn "W" gedrückt wurde:
kurze Erklärung:
-
Spielfeld ist ein 2D Array mit int Werten. 1 = Kopf, 2 = Herz, 3 = Körper, 0 = ein Punkt ( also nichts)
- in
eingabe wird der int - Wert gespeichert der von getch () zurückgelieft wird.
-
Snake ist die Liste indem die Schlange gespeichert wird.
-
Foodpoisiton ist ein 1D Array für 2 int Werte (x und y - Position des Herzes ).
-
getroffen ist eine bool - Variable die auf true gesetzt wird falls der Kopf das Herz berührt.
-
breite und
hoehe sind die Maße des Spielfeldes
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
switch ( eingabe )
{
case 119:
{
while ( true )
{
Kopf_bewegen ( Spielfeld, eingabe, &Snake );
Check_Kollision ( Foodposition, &getroffen, &Snake );
Spielfeld_updaten ( Spielfeld, Foodposition, &getroffen, &Snake );
system("cls");
Spielfeld_ausgeben ( Spielfeld, breite, hoehe );
Sleep(300);
if ( kbhit() )
{
eingabe = getch();
if ( eingabe == 100 ||
eingabe == 115 ||
eingabe == 97
)
{
break;
}
}
}
break;
}
|
Ich hoffe ihr könnt mir dabei Helfen
Gruß
Simon