Jump to content

Archived

This topic is now archived and is closed to further replies.

luka100

gra-snake ruch węża

Recommended Posts

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

  }
 }

}

}

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

×
×
  • Create New...