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

pacman c++ - automatyczny ruch duszków

Ostatnio zmodyfikowano 2015-12-28 13:40
Autor Wiadomość
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:
C/C++
int _x = 75 * 2; //położenie początkowe x przeciwnika
int _y = 25 * 2; ////położenie początkowe y przeciwnika
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?
P-142147
pekfos
» 2015-12-21 17:32:22
i nie działa.
A dokładniej?

rand() % 3
Tak nie wylosujesz liczby 3.
P-142223
C-Objective
» 2015-12-23 14:05:46
C/C++
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?
P-142271
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ć?
P-142418
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.
P-142459
« 1 »
  Strona 1 z 1