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

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

41

04.09.2010, 10:59

Hi,

weiß nicht ob ich heute noch dazu komme mit dem Schwanz aber das mit dem list<vector> ist auf jedenfall ne Idee.
Für die Bewegung habe ich mir eure Tipps zu Herzen genommen und steuere die Bewegung nach einer bestimmten Zeit (die man später auch ändern kann/soll... dafür brauch ich aber nochn Menü)
Sieht vereinfacht so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
MoveTime+=mClock.GetElapsedTime();

if(//Rechts gedrückt etc)
{
        if(MoveTime > 0.02)
        {
        XPos += 5;
        MoveTime = 0;
        }
}


Gibt es eigentlich eine Möglichkeit dem Randomizer von der SFML zu sagen, dass er nur Zufallswerte im 20er Bereich (also int x = 0) auswählen soll?

Lg
Sc4v

PS: Mit dem .zip mach ich vielleicht heute abend mal falls interesse besteht.

//Edit
Ich finds übrigens super wie ein Projekt wachsen kann und wie ich an dem Projekt gewachsen bin. Schon jetzt eine Menge gelernt und das gibt Motivation für mehr!
Das alles ermöglicht mir hier eine super Community, ohne Feedback und Hilfe ist sowas für einen Anfänger teils echt deprimierend. Danke!

//Edit2
Wegen dem Randomizer:
Ich denke folgende Lösung sollte das Problem beheben:
integer zwischen 1 und XYZ generieren lassen und diesen einfach mit 20 multiplizieren. Wenn es aber ne einfacherer Lösung gibt?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sc4v« (04.09.2010, 11:18)


BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

42

04.09.2010, 14:03

Wegen den Zufallszahlen: Deine Lösung verstehe ich nicht. Ich würde es so machen (für Zahlen zwischen 1 und 20):
int x = (rand() % 20) + 1;

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

43

04.09.2010, 14:28

Oder aber alle Elemente nacheinander bewegen ;) Liste durchgehen und Koordinaten erhöhen/erniedrigen. Vielleicht einfacher.

dann musst du dir immer die position des elements eins weiter vorn holen. das ist ziemlich umständlich. einfacher ist es dem letzten element der schlange eine neue position zu geben und es an den anfang der list zu stellen.(wenn die schlange frisst wird nur ein neues element an den anfang gestellt)
edit: ups das hat ja burning wave schonj geschrieben. xD ich stimm ihm zu, dass es so viel einfacher ist.
"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?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

44

04.09.2010, 15:09

Oder aber alle Elemente nacheinander bewegen ;) Liste durchgehen und Koordinaten erhöhen/erniedrigen. Vielleicht einfacher.

dann musst du dir immer die position des elements eins weiter vorn holen. das ist ziemlich umständlich. einfacher ist es dem letzten element der schlange eine neue position zu geben und es an den anfang der list zu stellen.(wenn die schlange frisst wird nur ein neues element an den anfang gestellt)
edit: ups das hat ja burning wave schonj geschrieben. xD ich stimm ihm zu, dass es so viel einfacher ist.

Per Schleife durchgehen? Oder steh' ich auf dem Schlauch?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

45

04.09.2010, 16:42

Du hast in einer Liste die Koordinaten der Rechtecke, aus denen deine Schlange besteht, bewegst du sie, löschst du das letzte Rechteck in der Liste und fügst vorne ein neues ein, so war das gemeint.

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

46

04.09.2010, 20:11

@burningwave
Auch wenn du meine Lösung nicht verstehst:Sie klappt einwandfrei :-)

@all
da ich meine Schlange pro 5 Pixel bewege wird eure Lösung mit löschen und vorne dran setzen nicht funktioniern oder?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

47

04.09.2010, 20:24

@burningwave
Auch wenn du meine Lösung nicht verstehst:Sie klappt einwandfrei :-)

@all
da ich meine Schlange pro 5 Pixel bewege wird eure Lösung mit löschen und vorne dran setzen nicht funktioniern oder?

Kannst ja beide Varianten mal probieren. Aber für deinen Fall halte ich nach wie vor das durchgehen und ändern der Koordinaten für simpler, statt die gesamte Schlange umzugestalten.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

48

04.09.2010, 20:48

Ich probiers morgen mal aus und such mir die für mich leichter zu realisierende Variante aus
hab mir eben Mafia2 gekauft... das heißt heute abend mal kein programmieren! :rolleyes:

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

49

04.09.2010, 21:27

da ich meine Schlange pro 5 Pixel bewege wird eure Lösung mit löschen und vorne dran setzen nicht funktioniern oder?

nein da gibt es keinen unterschied. stell dir vor du hast drei bauklötze. architekt schlägt vor, dass du sieh alle einzeln verschiebst. burning wave und ich schlagen vor, dass du den letzten stein nimmst und ihn nach vorn stellst. das ergebnis ist das gleiche aber du hast viel weniger zutun^^
"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?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

50

04.09.2010, 21:37

da ich meine Schlange pro 5 Pixel bewege wird eure Lösung mit löschen und vorne dran setzen nicht funktioniern oder?

nein da gibt es keinen unterschied. stell dir vor du hast drei bauklötze. architekt schlägt vor, dass du sieh alle einzeln verschiebst. burning wave und ich schlagen vor, dass du den letzten stein nimmst und ihn nach vorn stellst. das ergebnis ist das gleiche aber du hast viel weniger zutun^^

Das Beispiel macht schon mehr Sinn. Aber das klingt zwar einfacher, allerdings bei deiner Variante muss du das letzte Elemente zwischenspeichern, das letzte Element löschen und die temporäre Variable vorne anhängen. Bei meiner geht man in einer Schleife einfach jedes Element durch und erhöht/erniedrigt dessen Koordinate.

Also im Prinzip sind beide Varianten derselbe Aufwand.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Architekt« (04.09.2010, 21:43)


Werbeanzeige