Skocz do zawartości
Zaloguj się, aby obserwować  
luka100

gra-snake ruch węża

Polecane posty

Witam, piszę na zaliczenie gre typu snake, mam stworzone dodawanie jedzenia, samo jedzenie, wydłużanie węża po zjedzeniu oraz kolizje, brakuje mi jedynie ruchu "zawijanego" same węża, może ktoś pomóc to zrobić?

 

kod:

jest to kod dodawania kolejnego czlonu, licznik to ilosc zjedzonego jedzenia, moveX, moveY ruch zrobiony na timerach, jedzenie robi się 0.03 od srodka poprzedniego członu, myślałem żeby zrobić wektor ruchu w strukturze oraz pozycja każdego członu=pozycja członu następnego, ale w ogóle nie wiem jak się do tego zabrać :( proszę o pomoc

jeśli ktoś potrzebowałby cały kod to prześle, pozdrawiam.

 

void CGL::czlon(int a)
{
float g=0.03;
if (licznik==0) cout << "nic";
else
{
/*******************************************************/
 if (obrot==0)
 {
  for(int i=1;i<=licznik;i++)
  {
float d;
d=g*i;

glPushMatrix();

glTranslatef(moveX-d,moveY,0);

glScalef( 1.0f/(float)BOARD_X, 1.0f/(float)BOARD_Y, 0.1f );
glBindTexture( GL_TEXTURE_2D, texture );
glutSolidSphere( 0.2f,20,20 );

glPopMatrix();

  }
 }
/*******************************************************/
 else if (obrot==90)
 {
  for(int i=1;i<=licznik;i++)
  {
float d;
d=g*i;

glPushMatrix();

glTranslatef(moveX,moveY-d,0);

glScalef( 1.0f/(float)BOARD_X, 1.0f/(float)BOARD_Y, 0.1f );
glBindTexture( GL_TEXTURE_2D, texture );
glutSolidSphere( 0.2f,20,20 );

glPopMatrix();

  }
 }
/*******************************************************/
 else if (obrot==180)
 {
  for(int i=1;i<=licznik;i++)
  {
float d;
d=g*i;

glPushMatrix();

glTranslatef(moveX+d,moveY,0);

glScalef( 1.0f/(float)BOARD_X, 1.0f/(float)BOARD_Y, 0.1f );
glBindTexture( GL_TEXTURE_2D, texture );
glutSolidSphere( 0.2f,20,20 );

glPopMatrix();

  }
 }
/*******************************************************/
 else if (obrot==270)
 {
  for(int i=1;i<=licznik;i++)
  {
float d;
d=g*i;

glPushMatrix();

glTranslatef(moveX,moveY+d,0);

glScalef( 1.0f/(float)BOARD_X, 1.0f/(float)BOARD_Y, 0.1f );
glBindTexture( GL_TEXTURE_2D, texture );
glutSolidSphere( 0.2f,20,20 );

glPopMatrix();

  }
 }

}

}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chciałem napisać samemu ale zobaczyłem, że rozwiązanie tu jest takie samo jak chciałem podać: http://new.cplusplus...beginner/64320/

 

czyli całego węża trzymasz sobie jako np. tablicę albo listę (nie wiem co będzie lepsze) i przy update ruchu robisz tak jak napisali w 2poście tam. Czyli iterujesz od końca i ostatni element staje się przedostatnim, przedostatni staje się tym przedprzedostatnim ... i tak aż do głowy, która nabiera nowej pozycji w zależności od kierunku ruchu.

 

Edit: W liście wydaje się będzie lepiej trzymać "ciało węża" bo naturalne dla listy jest, że masz wskaźnik na kolejny i/lub poprzedni element.

 

Edit2: a tu cały kod najprostrzego snake-a w java: http://imhasib.wordpress.com/2011/10/27/snake-game-in-java-with-source-code/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×