Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] Poruszanie się węża w snake, ograniczenie jego ruchu.

Ostatnio zmodyfikowano 2010-01-04 22:22
Autor Wiadomość
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:
C/C++
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 ) );
   
}
P-12706
lynx
» 2010-01-04 16:45:33
C/C++
for( x, x1; x1 < 800; ++x, ++x1 );

A to co?


Najłatwiej będzie Ci zrobić to po prostu tak:
C/C++
if( key[ KEY_RIGHT ] && x < map_size_x ) // x<800
     x++;

Tak najłatwiej jest zrobić poruszający się obiekt.
Typowy ruch po kratkach też zrobisz nie trudno:
C/C++
int time = 0;


if( key[ KEY_RIGHT ] && x < 800 && time == 0 )
{
    x += 32; //rozmiar kratki;
    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ć.

P-12709
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.
                  
P-12716
malan
» 2010-01-04 18:21:57
Rozważ jeszcze takie rozwiązanie:
C/C++
bool wPrawo = false;
// ...
if( key[ KEY_RIGHT ] ) wPrawo = true;
// ...
if( wPrawo )
{
    if( x <= 800 ) x++;
    else wPrawo = false;
   
}
 

 
P-12717
maniek099
» 2010-01-04 22:22:15
Pisałem snake w pascalu i problem ten rozwiązałem po przez pętlę while:

C/C++
while( !keypressed() ) //dopoki klawisz nie wciśnięty
{
    //funkcje związane z poruszaniem węża np. if(zmienna==prawo)x++; if lewo x--; itd.
}
//teraz gdy klawisz wciśnięty to np

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:)
P-12726
« 1 »
  Strona 1 z 1