luka100 Posted January 24, 2013 Report Share Posted January 24, 2013 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 to comment Share on other sites More sharing options...
5corpio Posted January 25, 2013 Report Share Posted January 25, 2013 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.