Capitan Temat założony przez niniejszego użytkownika |
[c++/allegro]Pacman » 2012-05-16 20:10:12 Witam, piszę właśnie grę pacman w c++, przy użyciu biblioteki Allegro, zrobiłem mapkę, pacmana, te kuleczki, które zjada xD i wszytko szło w dobrym kierunku, dopóki nie doszedłem do momentu, aby zrobić algorytm na poruszanie się przeciwników (duszków, automatyczne poruszanie). Właśnie chciałbym, aby ktoś mnie nakierował, bądź napisał jak ten algorytm zrobić. ;]
Poniżej dam kod mojej gry wraz z grafiką(oczywiście to jest pierwowzór i grafika będzie ładniejsza w przyszłości)
http://www.sendspace.pl/file/0e203c43215e68737ebbc59
Z góry dziękuje za pomoc ;)
Ps. Jest tam funkcja od poruszania duszka lecz troszkę słabo działa ;x |
|
SeaMonster131 |
» 2012-05-16 20:52:32 Ja np zrobiłbym tak: if( odleglosc pacmana od duszka wynosi >= 5 ) { duszek idzie np w prawo, jezeli bd "skrzyzowanie" losuje czy ma isc dalej czy ma skrecic no i to wykonuje.Jezeli napotka koniec drogi to idzie w przeciwnym kierunku, lub skreca jezeli ma taka mozliwosc } else { duszek goni pacmana( lub idzie do niego ) }
|
|
Capitan Temat założony przez niniejszego użytkownika |
» 2012-05-18 13:49:15 Ale to wszystko musi być w pętli do-while, ale wtedy program się zacina i nie idzie dalej, na razie zrobiłem tak:
srand((int)time(NULL)); do { if((map[(duch1_y)/32+4][(duch1_x)/32])==(map[((pacman_y)/32)][(pacman_x/32])) {
} else { int a=rand()%2; if(a==0) { duch1_y+=32; if(map[(duch1_y-32)/32][(duch1_x)/32]!=1) duch1_y-=32; } else { duch1_y-=32; if(map[(duch1_y+32)/32][(duch1_x)/32]!=1) duch1_y+=32; } } } while(t==true); |
|
SeaMonster131 |
» 2012-05-18 14:03:59 Dlaczego ma być w pętli do {} while - bo wtedy gra sie moze zacinać? Lepiej zrobić coś w tym stylu: void obsluga_duszkow() { for( int i = 0; i < duszek.size(); i++ ) { tutaj te chodzenie duszkow itd.. } }
..
int main() { blabla while( Game ) { if( wyjscie ) Game = false; rysowanie_wszystkiego(); itd(); obsluga_duszkow(); } return 0; }
|
|
Capitan Temat założony przez niniejszego użytkownika |
» 2012-05-23 18:12:04 Albo to jest coś trudnego, albo bardzo łatwego, że aż zrozumieć tego nie mogę ;]. Ta funkcja będzie robiona aż do ?duszek.size()? Od czego jest ta funkcja ? A co do poruszania się to np.
pętla { if(Jak duszek jest np. 5 kroków miejsca ode mnie, to idzie w moją stronę) Jeszcze nie wiem jak to zrobić, ale mam pomysł ;] { robi krok w moją stronę } else { przykładowo, losowanie (0-dół,1-góra + sprawdzenie czy nie ma ściany tam sciany) idzie tak długo, aż napotka ściane, losowanie(0,4,dół,prawo,lewo,góra) jedzie do ściany) } } Powtarzanie tego cały czas. Nie wiem czy to dobre rozwiązanie, żeby nie wyszło, że każdy duszek będzie chodził podobnie, bądź za każdym włączeniem gry tak samo ;x |
|
SeaMonster131 |
» 2012-05-23 22:07:31 Ta funkcja będzie robiona aż do ?duszek.size()? Od czego jest ta funkcja ? |
Chyba pętla (for) i metoda size() z vector, taki przykład, ale możesz wykorzystać co tam chcesz / umiesz. Nie wiem czy to dobre rozwiązanie, żeby nie wyszło, że każdy duszek będzie chodził podobnie, bądź za każdym włączeniem gry tak samo ;x |
Niby dlaczego tak ma się dziać? Nawet jakbyś spawnował duszki w jednym miejscu, to dla każdego będziesz losować kierunek w którym ma się udać. |
|
« 1 » |