[Allegro] Poruszanie się węża w snake, ograniczenie jego ruchu.
Ostatnio zmodyfikowano 2010-01-04 22:22
golasek1992 Temat założony przez niniejszego użytkownika |
[Allegro] Poruszanie się węża w snake, ograniczenie jego ruchu. » 2010-01-04 16:07:34 Moj problem polega na tym, ze tworze gre snake i utknalem troche na poczatku... Otoz chce by (narazie jeden kwadracik) gdy nacisne strzalke w prawo poruszal sie az do zetkniecia z ekranem i dzieje sie to tylko w ulamku sekundy. A ja chce zeby to bylo powoli. I tu jest problem. Probowalem z timerami z funkcja rest ale nie udalo mi sie. O to kod z prezmnieszczaniem sie w prwo w mega szybkim tempie: while( !key[ KEY_ESC ] ) { rectfill( bufor, x, y, x1, y1, makecol( 255, 0, 0 ) ); if( key[ KEY_RIGHT ] && x1 < 800 ) { for( x, x1; x1 < 800; ++x, ++x1 ); } blit( bufor, screen, 0, 0, 0, 0, 800, 600 ); clear_to_color( bufor, makecol( 0, 0, 0 ) ); }
|
|
lynx |
» 2010-01-04 16:45:33 for( x, x1; x1 < 800; ++x, ++x1 );
A to co? Najłatwiej będzie Ci zrobić to po prostu tak: if( key[ KEY_RIGHT ] && x < map_size_x ) x++;
Tak najłatwiej jest zrobić poruszający się obiekt. Typowy ruch po kratkach też zrobisz nie trudno: int time = 0;
if( key[ KEY_RIGHT ] && x < 800 && time == 0 ) { x += 32; time = 100; } if( time > 0 ) time--;
Generalnie jeśli chcesz zrobić zwykły obiekt którym musimy sterować tak by zebrać określone rzeczy to nie ma problemy. Ale jeśli chcesz zrobic tradycyjnego snake'a, czyli z efektami typu zwiększanie się ogona po zebraniu jakiegoś jedzenia, to musisz więcej nad tym popracować. |
|
golasek1992 Temat założony przez niniejszego użytkownika |
snake » 2010-01-04 18:13:31 ta petla for ma byc po to ze jak nacisne strzalke w prawo to kwadracik bedzie sie poruszal caly czas az dojdzie do krawedzi. A jezeli dam samo :
if(key[KEY_RIGHT]) ++x;
to musialbym trzymac strzalke by sie poruszal a ja chce tak jak jest fabrycznie tzn. naciskam strzalke i leci samo. |
|
malan |
» 2010-01-04 18:21:57 Rozważ jeszcze takie rozwiązanie: bool wPrawo = false;
if( key[ KEY_RIGHT ] ) wPrawo = true;
if( wPrawo ) { if( x <= 800 ) x++; else wPrawo = false; }
|
|
maniek099 |
» 2010-01-04 22:22:15 Pisałem snake w pascalu i problem ten rozwiązałem po przez pętlę while: while( !keypressed() ) { }
if( key[ KEY_RIGHT ] ) zmienna = prawo;
if( key[ KEY_UP ] ) zmienna = gora;
itd. dla każdego kierunku i to wszystko w jeszcze jednej pętli while dopóki np. nie zderzy się ze ścianą (getpixel przydatny bardzo tutaj:) |
|
« 1 » |