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

Anonymous

unregistriert

1

14.05.2003, 16:25

Snake

Najo ist vielleicht ne dumme Frage, aber wie würdet ihr die Animation "managen" ? Das ist ja so dass die Spielfigur jedes mal ein bisschen wächst wenn man z.B über eine Zahl "fährt" und die Figur bewegt sich ja nicht immer "gleichmäßig" sondern oft so um die "Ecke" rum, also z.B so: ----
|
|

Ich hatte mir überlegt dass ich die Figur einfach aus den maximal so vielen Rechtecken zusammensetze wie man Zahlen auflesen kann, d.H am anfang besitzt die Figur nur ein Rechteck und am Ende kurz vor dem letzten Level besitzt sie dann z.B 9 (vorrausgesetzt dass sei die maximale "Länge"). Aber irgendwie wird das glaube ich nicht so richtig funktionieren da die Figur sich ja nicht nur "gleichmäßig" funktioniert... Ist vielleicht alles bissl blöd ausgedrückt aber ich hoffe mal dass es trotzdem verständlich ist. Hier hat bestimmt jemand nen besseren Ansatz oder ?

Anonymous

unregistriert

2

14.05.2003, 16:28

hm nu is das mit den strichen ganz anders als ich das haben wollte :(

Na ja sollte z.B. so aussehen:
*
*
*
*******

3

14.05.2003, 16:32

Ich würds als dynamisches Array machen, z.b.

Class CSnakePart
{
int m_iPosX;
int m_iPosY;
bool HeadOfSnake;
bool EndOfSnake;
bool MiddleOfSnake; // oder sowas in die Richtung
};

CSnakePart *Snake;
Snake = malloc(sizeof(CSnakePart)*GrößeDerSchlange);
Snake->m_iPosX =.....;

usw. Hoffe du verstehst :)

cya

Anonymous

unregistriert

4

14.05.2003, 16:53

hm ehrlich gesagt eher weniger ;D
im prinzip ist das ja dasselbe was ich gesagt hatte, nur dass es eben dynamisch anstatt statisch ist.. ich versteh jetzt z.B nicht was man dann mit den 3 bool Variablen anstellen soll

Anonymous

unregistriert

5

14.05.2003, 16:57

Also ich hatte z.B das als Ansatz:

Quellcode

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
#include "defines.h"

class SnakeParts
{
public:
    int x;
    int y;
    void DrawRect();
};


class Snake
{
private:
    int color;
    int direction;
    int length;
    int width;
    SnakeParts body[MAX];
public:
    void DrawSnake();
    void EraseSnake();
    bool Collision();
    Snake();
};

6

14.05.2003, 20:35

ich würde es so machen, dass nur der "kopf" der schlange gespeichert wird, und wenn sie sich bewegt, wird ein "klotz" erstellt, der eine bestimmte lebensdauer hat (je nachdem wie lang die schlange sein soll), dann sollte man am wenigsten probleme haben
stay tight, project universe comes back!
### project earth <> 2004 ###

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

14.05.2003, 20:43

So wäre auch mein Ansatz :)
Und wenn die Schlange länger werden soll, dann erhöhst Du einfach das maximale Alter der "Klötze". Der jüngste Klotz ist immer automatisch der Kopf, und der älteste ist automatisch der Schwanz.

Anonymous

unregistriert

8

15.05.2003, 15:17

das hört sich gut an, ich versteh aber immer noch nicht genau wie man das dann handhabt wenn es z.B so aussieht:
*
*
*******

bin wohl zu blöd :crying:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

15.05.2003, 15:24

Ich verstehe das Problem nicht...
Die Schlange besteht einfach aus einer Reihe von "Klötzen". Diese Klötze haben eine bestimmte Lebenszeit. In jedem Frame erzeugt man einen neuen Klotz als Kopf und der älteste (der Schwanz) "stirbt".
Da ist es egal, wie die Schlange jetzt gerade positioniert ist.

10

15.05.2003, 17:00

Pseudo code:

void CSnakeGame::Update()
{
// wenn Zeit zum Updaten dann hol Input
Dinput.GetInput(); // oder wie es bei dir heisst

//schaue welcher Pfeil gedrückt wurde
if (Dinput.GetKey[DIK_LEFT])
{
CSnakeGame.CSnake.SetNewBox(oldPosX-1,oldPosY);
CSnakeGame.CSnake.Update(); // timer update + löschung des letzen
elements
}

..... // für die anderen Richtungen

...... // kollisions code
}

void CSnake::Update()
{
// 100 ms abfrage durch timer
if (GetTickCount() + 100 > oldtimer)
{
oldtimer = GetTickCount();
....
CSnakeGame.RemoveLastBox();
// oder sowas
.....
}

So als kleine Anregung :)
{

Werbeanzeige