Skocz do zawartości

gra-snake ruch węża


luka100

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();

  }
 }

}

}

Link do komentarza
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/

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...