pacman c++ - automatyczny ruch duszków
Ostatnio zmodyfikowano 2015-12-28 13:40
tolek Temat założony przez niniejszego użytkownika |
pacman c++ - automatyczny ruch duszków » 2015-12-19 14:38:04 Witam, piszę pacmana w c++ w bibliotece winBGIm (proszę tylko nie pisać czemu taka, a nie inna) i natknąłem się na problem z automatycznym poruszaniem. Napisałem funkcję przeciwnik(), która rysuje przeciwnika oraz przeciwnik2(), która ma zająć się poruszaniem automatycznym. Funkcję przeciwnik2() wywołuję w int main() - i nie działa. Poniżej podaję kod: int _x = 75 * 2; int _y = 25 * 2; int fdir = 0; void przeciwnik( int x, int y ) { setcolor( YELLOW ); circle( x, y, 20 ); setfillstyle( SOLID_FILL, YELLOW ); floodfill( x, y, YELLOW ); }
void przeciwnik2() { przeciwnik( _x, _y ); if( fdir == 0 ) { if( rys[ _y / 20 ][( _x - 20 ) / 20 ] != 1 ) _x -= 20; else fdir = rand() % 3; } if( fdir == 1 ) { if( getpixel( _x, _y ) == BLACK ) _x += 20; else fdir = rand() % 3; } if( fdir == 2 ) { if( rys[( _y - 20 ) / 20 ][ _x / 20 ] != 1 ) _y -= 20; else fdir = rand() % 3; } if( fdir == 3 ) { if( rys[( _y - 20 ) / 20 ][ _x / 20 ] != 1 ) _y += 20; else fdir = rand() % 3; } if( _x <= - 30 ) _x = 800; else if( _x >= 800 ) _x = - 20; } Mapa jest zbudowana tak, że 0 to czarne tło, tj. tła po którym ma poruszać się przeciwnik a 1 to ściana. Ktoś pomoże jak to zrobić tak aby działało? |
|
pekfos |
» 2015-12-21 17:32:22 A dokładniej? Tak nie wylosujesz liczby 3. |
|
C-Objective |
» 2015-12-23 14:05:46 if( fdir == 0 ) { if( rys[ _y / 20 ][( _x - 20 ) / 20 ] != 1 ) _x -= 20; else fdir = rand() % 3; } if( fdir == 1 ) { if( getpixel( _x, _y ) == BLACK ) _x += 20; else fdir = rand() % 3; } if( fdir == 2 ) { if( rys[( _y - 20 ) / 20 ][ _x / 20 ] != 1 ) _y -= 20; else fdir = rand() % 3; } if( fdir == 3 ) { if( rys[( _y - 20 ) / 20 ][ _x / 20 ] != 1 ) _y += 20; else fdir = rand() % 3; }
Switch istnieje. Warto byłoby abyś w każdym rand() % 3 zwiększył liczbę o 1. Jak wywołujesz funkcję przeciwnik2? W pętli? Nie jestem czarodziejem, nie wiem jak wygląda zmienna rys. Zamień zmienne globalne (Jeśli możesz) na takie które są w obrębie funkcji, i dodaj słówko static przed int. Polecam debugowanie, ale nie wiem czy to pomoże. Problem jest jaki? |
|
tolek Temat założony przez niniejszego użytkownika |
» 2015-12-27 17:54:56 Tak jest, zwiększając liczbę z 3 na 4 problem się rozwiązał! Dziękuję bardzo :) funkcję wywołuję w pętli do{}, jednak mam pytanie - mam teraz 4 duszki i jak zrobić żeby ruszały się jednocześnie, tj. animacja kilku obiektów? Narazie jest tak, że jeden duszek robi krok i znika, potem drugi, trzeci, czwarty i tak w kółko. Jak to rozwiązać? |
|
DejaVu |
» 2015-12-28 13:40:28 Dla każdego duszka zrób zmienną, która określa aktualny numer animacji. Przed kolejnym wyświetleniem zaktualizuj numer animacji wszystkich duszków. |
|
« 1 » |