eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingzaawansowane aiRe: zaawansowane ai
  • Data: 2012-04-17 16:14:38
    Temat: Re: zaawansowane ai
    Od: zażółcony <r...@c...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 2012-04-17 15:42, f...@N...gazeta.pl pisze:
    > M.M.<m...@N...gazeta.pl> napisał(a):
    >
    >> <f...@N...gazeta.pl> napisał(a):
    >>
    >>> M.M.<m...@N...gazeta.pl> napisał(a):
    >>>
    >>>> <f...@N...gazeta.pl> napisał(a):
    >>>>
    >>>>>>>>
    >>>>>>>> Boty tu, boty tam? ;)
    >>>>>>>>
    >>>>>>>
    >>>>>>> bot botem pogania,
    >>>>>>>
    >>>>>>> próbuję zrobić podstawowe 'scenariusze' typu 'coward',
    >>>>>
    >>>>> na przykład taki przykład/problem - maly konkurs:
    >>>>>
    >>>>> chce oprogramowac walasajaca sie swobodnie pozatym ze tchorzliwa
    >>>>> postac, (w moim wydaniu jest to krowa)
    >>>>>
    >>>>> postac normalnie poruszalaby sie np randem
    >>>>>
    >>>>> {
    >>>>> skierujPostac( kto, (rand()%3) -1, (rand()%3) -1);
    >>>>>
    >>>>> ( kto to id postaci, a dwa kolejne pola to dx dy - poprawki
    >>>>> do pozycji na mapie)
    >>>>> ]
    >>>>
    >>>>
    >>>> Za bardzo drga, za malo się porusza. Prosto chyba sie nie da.
    >>>> To poniżej ma taką wadę że nagle zmienia kierunek i się odbija
    >>>> od krawędzi zamiast płynnie hamować, albo zmieniać tor na
    >>>> równoległy do krawędzi.
    >>>>
    >>>> if( rand() % 16 == 0 ) {
    >>>> if( rand() % 2 ) kto.dx = rand()%3-1;
    >>>> if( rand() % 2 ) kto.dy = rand()%3-1;
    >>>> }
    >>>> if( kto.y + kto.dy> max_y || kto.y + kto.dy< min_y )
    >>>> kto.dx = -kto.dx;
    >>>> if( kto.x + kto.dx> max_x || kto.x + kto.dx< min_x )
    >>>> kto.dy = -kto.dy;
    >>>> kto.x += kto.dx;
    >>>> kto.y += kto.dy;
    >>>>
    >>>
    >>> spox, tyle ze nie o procedure na ruch mi chodzi, ruch moze byc
    >>> przypadkowy to zalezy od konwencji - niektore turowki rpg albo
    >>> strategie zachaczaja o planszowki - tam ruch pionka rypu rand()%3-1
    >>> nie razi
    >>>
    >>> chodzi mi o oprogramowanie ruchu 'pionka' (np krowy na pastwisku)
    >>> tak by walesala sie ale nie zblizala za nadto do np walesajacych sie
    >>> tam przeciwnikow ktore moglyby ja kopnac - robie to na swoj sposob ale
    >>> jestem ciekaw innych podejsc - przy tym zalezy mi na prostocie kodu
    >>> bo sam pomysl mozna podac jednym zdaniem ale tu chodzi o prostote
    >>> kodu
    >>
    >> Nie wiem... zasymulować to może magnesami i tarciem? Wrogowie to
    >> magnesy odpychające, zielone pastwiska to magnesy przyciągające. Do
    >> tego uwzględnić tarcie (wystarczy statyczne) aby krowa nie rozpędzała
    >> się do prędkości ponaddźwiękowych. No i chaos, od czasu do czasu jakiś
    >> rand do dx i dy. Albo zamiast rand dać dwa magnesy przyciągające krowę
    >> które poruszają się całkowicie przypadkowo. Wtedy będzie wyglądało tak,
    >> jakby krowa miała jakiś wyimaginowany cel i zanim magnes zmieni położenie
    >> to będzie się gramoliła w miarę w jednym kierunku.
    >
    >
    > niestety widze ze wylozenie o co mi chodzi zajeloby mi
    > wiecej nizbym chcial na to przeznaczac,
    >
    > w zadnym razie nie chodzi mi o algorytm na ruch - to jest
    > skwantowane na siatce kwadratowych pol, na niektorych stoja
    > drzewa, inne sa puste, jest tez tam krowa, krowa moze
    > przejsc sobie w jeden z osmiu kierunkow (lewo-prawo-gora-dol
    > i na ukosy), krowa spokojnie moze sie poruszac ruchami
    > browna bo nie jest glowna postacia (postac glowna jest
    > poruszana przez gracza z klawiatury i moze byc akurat o
    > kilometr alej) tylko epizodycznym botem, a cala gra jest
    > skwantowana na kwadratowej siatce
    >
    > chodzi tylko o to by krowa nie zblizala sie w swoim brownowskim
    > ruchu do niektorych innych postaci typu np goblin i inne
    > (ten system relacji miedzy krowa a innymi tez trzeba jakos
    > okreslic oprogramowac, moze byc na intach floatacjh albo enumach
    > - i tez jestem ciekaw jak ktos by to zrobil,
    >
    > chodzi o algorytm (procedure) po jakiej krowa wybieralaby gdzie
    > isc a gdzie nie, pierwsza wersja zakladala ze krowa sie rozejrzy
    > w promieniu 10 pol, znajdzie najblizsza postac (co niesie ze soba
    > trudnosc zwiazana z tym ze rownie odleglych postaci moze byc>1
    > -( i co wtedy budowac liste i losowac jedna znich - to na maksa
    > klopotliwe )- dlatego wlasnie pytam o kwestie dokladnej implementacji)
    > - jesli ta postac budzi krowia nieufnosc skierowac sie w przeciwnym
    > kierunku niz ta postac - ale jest to algorytm niezbyt dobry teraz
    > klepie troche lepszy ale nie wiem czy i jego nie da siepoprawic

    Skoro twoja plansza wygląda jak taka z gier typu
    BoulderDash/Rockford/Rocks'n'Diamonds/EmeraldMine
    to proponuję algorytm 'zapachu' zrobiony na automatach
    komórkowych. Wróg krowy daje zapach o sile np. 10
    a wszystkie pola planszy bez zapachu aktualizują
    swój zapach do wielkości maksymalnego zapachu
    swoich sąsiadów - 1. Uzyskujesz wtedy jakiś gradient
    rozsiewany wokół 'pachnących' obiektów i mozesz np.
    łatwo zaimplementować, by się on nie roznosił
    przez mury, krzaki czy co tam. Zakładasz, że zapach 0
    to minimum, czyli w odległości >10 pól od źródła
    zanika całkowicie.

    Natomiast jak losujesz te brownowe ruchy krowy
    w różnych kierunkach to bierzesz pod uwagę zapach
    i np. mocno zmniejszasz prawdopodobieństwo
    wylosowania pól, które pachną mocniej, niż pozostałe.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: