Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.02.2011, 20:10

Snake finde Algo nicht

Hallo liebes Forum,

ich bin dran ein Snake zu programmieren und zwar dachte ich, ich machs in einem Array 20x20 oder so
und verpasse jedem Feld eine Struktur, die sagt es ist entweder Schlange[black] leeres Feld[white] oder Apfel[rot].
Auch hab ich das mit dem Intervall schon gelöst, dass jede Sekunde "was" passiert.
Doch mein Hauptproblem, wie im Titel schon beschrieben, ist wie der Algo von Snake geht, so dass er immer schön lenkt und auch wächst:s
In mir schwebt der Gedanke, dass ich von jeder "Kurve" die Richtung speichere, doch ich merke selber dass diese Lösung seeeehr unelegant ist.

Ich hab auch scho viel gelesen, dass bei jedem Schritt, dass letzte Teil an die Spitze kommen soll. Doch wie komme ich an das letzte Teil wenn jemand 3 mal die Snake gedreht hat und die dann an die Spitze kommen soll? Okay wie sie an die spitze kommt weiss ich, aber wie lösche ich das letzte Teil?

Und wenn ich das mal hab, wie soll die Schlange wachsen? Naja, das kommt dann später:) ich hoffe ihr könnt mir mit meinem jetzigen Problem noch helfen^^

freue mich auf eure Antworten:)

mfg timi19

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

28.02.2011, 20:17

Speicher die Positionen der von der Schlange belegten Felder in einem Array/Container sowie die Richtung in die sich die Schlange gerade bewegt. In jedem Zeitschritt gehst du nun her und setzt das letzte Feld der Schlange (den Schwanz) auf leer und das nächste Feld in der Richtung in die sich die Schlange gerade bewegt auf Schlange...

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

3

28.02.2011, 20:21

ich habs mit einer std::list mit vektoren gelöst. dabei wurde bei jeder bewegung das letzte element gelöscht(wenn die schlange nicht wächst) und vorn ein neues element hinzugefügt. für mich die einfachste lösung. im array markierst du die felder entsprechend.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

4

28.02.2011, 20:21

Hier würde sich std::queue anbieten, damit hast du sehr leichten zugriff auf das erste und das letzte element, genau was du brauchst ;)

mfg CBenni::O

EDIT: 1000ster Post ;)
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

28.02.2011, 20:30

EDIT: 1000ster Post ;)

Grats :)

Ja, queue oder vector würd ich nehmen. Evtl. einen vector so kapseln dass du dir einfach mit einem zusätzlichen Index merkst wo der Kopf ist dann brauchst du nicht unnötig kopieren, aber gut, das spielt bei dem Programm eh keine Rolle^^

6

28.02.2011, 20:30

danke an dot, war ein guten Denkanstoss
und sorry an die anderen, ich benutze die std nicht^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

28.02.2011, 20:33

[...] ich benutze die std nicht^^

würd dir empfehlen das zu ändern ;)

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

8

28.02.2011, 21:05

Hier gabs schonmal einen Thread zu diesem Thema:
Problem bei Kartenerstellung für Snakeklon

Ich würde mist std::list und den Funktionen back(), push_back() und pop_front() arbeiten. EDIT: std::queue kann das auch.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

9

28.02.2011, 21:55

und sorry an die anderen, ich benutze die std nicht^^

kannst du das begründen?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

xxendlessxx

Treue Seele

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

10

28.02.2011, 23:13

vllt benutzt er kein C++ Nacho ;-)

Werbeanzeige