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

[c++/allegro]Pacman

Ostatnio zmodyfikowano 2012-05-23 22:07
Autor Wiadomość
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
P-56804
SeaMonster131
» 2012-05-16 20:52:32
Ja np zrobiłbym tak:
C/C++
if( odleglosc pacmana od duszka wynosi >= 5 ) // np 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 )
}
P-56812
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);
P-56891
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:
C/C++
void obsluga_duszkow()
{
    for( int i = 0; i < duszek.size(); i++ ) // duszki/przeciwnicy to vector, tak najlepiej
    {
        tutaj te chodzenie duszkow itd..
    }
}

..

int main()
{
    blabla
   
    while( Game )
    {
        if( wyjscie )
             Game = false;
       
        rysowanie_wszystkiego();
        itd();
       
        obsluga_duszkow();
    }
   
    return 0;
}
P-56893
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
P-57235
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 » standard C++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ć.
P-57251
« 1 »
  Strona 1 z 1