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

[Allegro] Kolizje sztucznej inteligencji z mapą

Ostatnio zmodyfikowano 2009-03-04 22:32
Autor Wiadomość
Ju1ian
Temat założony przez niniejszego użytkownika
[Allegro] Kolizje sztucznej inteligencji z mapą
» 2009-03-01 19:39:40
Witam. Mam taki sobie kodzik poruszania (to przerobiony kod Pietrzucha ;)) się sztucznej inteligencji (w tym wypadku trolla). Według niego troll nie powinien włazić na wodę, kamienie i drzewa. Zmienna mapa_x i mapa_y to współrzędne na których jest scrollowanie ekranu (lewy górny róg, dlatego zawsze dodaję te (troll.x - scrolling_x) / 40) 40 to wymiar kafla. O to kod:
C/C++
// AI SZTUCZNA INTELIGENCJA
short int obliczona_x = troll.x - scrolling_x - player.x;
short int obliczona_y = troll.y - scrolling_y - player.y;
obl_zero( obliczona_x );
obl_zero( obliczona_y );
if( troll.health != 0 ) {
    if( obliczona_x > obliczona_y )
    {
        if(( player.x < troll.x - scrolling_x )
        &&( !kolizja_w_lewo( troll.x - scrolling_x, player.x, troll.y - scrolling_y, player.y ) )
        &&((( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x + 1 +( troll.x - scrolling_x ) / 40 ] ) == 0 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x + 1 +( troll.x - scrolling_x ) / 40 ] ) == 2 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x + 1 +( troll.x - scrolling_x ) / 40 ] ) == 6 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x + 1 +( troll.x - scrolling_x ) / 40 ] ) == 7 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x + 1 +( troll.x - scrolling_x ) / 40 ] ) == 8 ) ) )
        {
            troll.x -= 40;
        }
        if(( player.x > troll.x - scrolling_x )
        &&( !kolizja_w_prawo( troll.x - scrolling_x, player.x, troll.y - scrolling_y, player.y ) )
        &&((( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x - 1 +( troll.x - scrolling_x ) / 40 ] ) == 0 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x - 1 +( troll.x - scrolling_x ) / 40 ] ) == 2 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x - 1 +( troll.x - scrolling_x ) / 40 ] ) == 6 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x - 1 +( troll.x - scrolling_x ) / 40 ] ) == 7 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 ][ mapa_x - 1 +( troll.x - scrolling_x ) / 40 ] ) == 8 ) ) )
        {
            troll.x += 40;
        }
    }
    else
    {
        if(( player.y > troll.y - scrolling_y )
        &&( !kolizja_w_dol( troll.x - scrolling_x, player.x, troll.y - scrolling_y, player.y ) )
        &&((( map[ mapa_y +( troll.y - scrolling_y ) / 40 + 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 0 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 + 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 2 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 + 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 6 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 + 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 7 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 + 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 8 ) ) )
        {
            troll.y += 40;
        }
        if(( player.y < troll.y - scrolling_y )
        &&( !kolizja_w_gore( troll.x - scrolling_x, player.x, troll.y - scrolling_y, player.y ) )
        &&((( map[ mapa_y +( troll.y - scrolling_y ) / 40 - 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 0 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 - 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 2 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 - 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 6 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 - 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 7 )
        ||(( map[ mapa_y +( troll.y - scrolling_y ) / 40 - 1 ][ mapa_x +( troll.x - scrolling_x ) / 40 ] ) == 8 ) ) )
        {
            troll.y -= 40;
        }
    }
}
// KONIEC AI
 Troll ma "mieszany humor" xD. Raz przestrzega prawa fizyki (no nie wiem jak to ująć, w każdym bądź razie chodzi o przenikanie i latanie nad wodą ;)), a raz nie ;). Nie wiem gdzie tu jest błąd. Na moje oko powinno działać (używam tego samego dla poruszania playera). Mam nadzieję, że poszukacie błędu ze mną ;P Aha i jeszcze jedno. Nie wiem jak zrobić, aby troll jeździł trochę wolniej od gracza, bo tak to ciągle go blokuje oraz, jak nie może przejść to, aby znalazł inną drogę. ;) Pozdrawiam. Ju1ian
P-4586
DeBugger
» 2009-03-01 19:52:58
Zadawać lepiej jedno pytanie w temacie. Ale odpowiem(na drugie). Po pierwsze - zmniejsz timer. Po drugie - ustaw dla ludzika np. 3 pixele na naciśnięcie klawisza, a na trolla 2.
P-4587
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-01 20:09:44
No zrobiłem tak jak mówisz. Byłoby dobrze tylko teraz kolizje się psują, bo ludek się nie porusza tylko "kamera nad nim łazi".
P-4588
WunM
» 2009-03-01 20:35:40
Hmmm... spakuj ładnnie wszystko(kody, bitmapy, skompilowany program) i się zobaczy.

//edit

a... i oczywiście wyślij.
P-4589
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-01 20:45:24
Ok, proszę: http://www.sendspace.com/file/z9r5xp
P-4590
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-03 18:32:08
Ok ten pierwszy problem rozwiązany, ale jak zrobić, aby się poruszał wolniej, oraz aby znajdował inną drogę jak jest kolizja, bo tak to stoi jak idiota i czeka aż do niego podejdę. ;)
P-4612
DejaVu
» 2009-03-03 18:51:35
Prędkość posuszania obiektów nie dotyczy tematu. Co więcej ta tematyka była poruszana już na forum co najmniej raz.

Co do wyznaczania nowej ścieżki... jest na to jakiś dość popularny algorytm ale jego nazwy nie pamiętam. Jak mi się przypomni to napiszę wieczorem.
P-4613
Ju1ian
Temat założony przez niniejszego użytkownika
» 2009-03-03 21:26:14
No wiem, ale w żadnym z tych tematów nie mogłem znaleźć nic dla siebie ;/ Troll porusza się o 40. Spróbowałem żeby się poruszał o 0.5 potem to zaokrąglić i pomnożyć razy 40. Ale przy tym gra się wiesza i wywala błędy (nie kompilator). Męczę się już z tym od tygodnia i nie mogę zaradzić ;/
P-4619
« 1 » 2 3
  Strona 1 z 3 Następna strona