C++ Snake programmieren, aber wie?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Wird das Programm überhaupt sauber kompiliert?

Ich sehe da schon 2 Fehler.

Z.B. hier:

else if(taste == links && richtung != 3 || taste == plinks && richtung != 3)

else { continue; }

Nach dem else if muss eine Anweisung folgen, stattdessen kommt bei dir direkt das else.

"punkte" ist auch nicht deklariert.

Generell würde ich bei einem Snake-Spiel mit Koordinaten und Richtungen arbeiten, dann kannst du nämlich auch Items an Positionen spawnen lassen (die Schlange frisst ja). Du brauchst:

  • ein Koordinatensystem (z.B. 100x80)
  • eine Variable für die aktuelle Richtung
  • einen Intervall
  • einen Kopf für die Schlange
  • Koordinaten für jedes Körperteil (Array)

Der Körper verlängert sich ja mit der Anzahl der gefressenen Items, jedes Körperteil nimmt bei jedem Step die Position seines Vorgängers ein. So kannst du auch die Position jedes Körperteils zu jederzeit herausfinden. Wenn der Schlangenkopf versucht, die Position eines Körperteils einzunehmen, ist Game over.

Und du musst natürlich verhindern, dass man die Richtung um 180 grad ändern kann (also wenn man sich nach oben bewegt, kann man nicht auf "nach unten" wechseln).


avorox 
Beitragsersteller
 04.07.2014, 09:00

Vielen Dank für die Antwort. Ja das richtige Programm kompiliert ohne Probleme, allerdings habe ich die Frage von meinem Arbeitsplatz aus gestellt, wo ich mit meinem privaten Notebook kein Internet habe, daher musste ich den Quellcode nochmal manuell übertragen und hatte nicht die Möglichkeit diesen mit einem Compiler zu prüfen.

So nun hätte ich noch ein paar Fragen dazu:

Wie würdest du das Koordinatensystem realisieren? Mit einem 2d Array?

Die Variable für die Richtung ist doch schon enthalten, hast du das jetzt als generell benötigte Liste geschrieben oder würdest du meine einfach irgendwie verändern?

Wie realisiere ich einen Intervall? Tut mir Leid, ich programmiere noch nicht sonderlich lange daher habe ich mich damit noch nie befasst.

Broco  08.07.2014, 14:34
@avorox

Hi, das war als generelle Liste gedacht, die Richtung hattest du schon, das stimmt.

Genau, du könntest das als 2d-Array machen, das ginge aber auch eindimensional (erster Wert ist die Nummer der Körperteils, dann X-Koordinate, dann Y-Kooridnate).

Der Intervall hast du mit dem Sleep ja auch schon drin. Je länger die Sleep-Zeit desto langsamer die Schlange.

Bei jedem Intervall führst du dann folgende Aktionen durch:

  1. Testen, welche Richtung ausgewählt ist.
  2. Bestimmen, welche Position der Kopf hat.
  3. Check, ob der Kopf, wenn er sich in die aktuelle Richtung bewegt den Rand berühren würde, oder die Koordinaten eines Körperteils einnimmt, dann Game Over, ansonten:
  4. Den Kopf um die entsprechende Einheit in die gewählte Richtung nach vorn bewegen.
  5. Alle anderen Körperteile nehmen die Position ihres Vorgängers ein.

Dann kannst du noch zusätzlich alle paar Intervalle oder mit ein bisschen Zufallsprinzip Items an Koordinaten erscheinen lassen, an denen gerade kein Teil der Schlange ist. Wenn die Schlange dann so ein Teil mit dem Kopf berührt, wird sie um 1 länger und das item verschwindet.

Noch ein Tip: Bevor du so viele IF-Abfragen machst, google mal nach "switch case", das macht den Code übersichtlicher ;-)

Da die Formatierung durch das Kopieren auf diese Seite verloren gegangen ist, gibt es hier nochmal einen Link zum formatierten sourcecode:

http://pastebin.com/JRvXZ321