-
11. Data: 2012-04-17 14:55:39
Temat: Re: zaawansowane ai
Od: " M.M." <m...@N...gazeta.pl>
<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.
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
12. Data: 2012-04-17 15:10:44
Temat: Re: zaawansowane ai
Od: " " <f...@N...gazeta.pl>
> > kto.x += kto.dx;
> > kto.y += kto.dy;
> >
w kazdym razie dobra konwencja, taka bezposrednia konwencja
(w sensie dostepu przez kto.x ) np
void atak(postac kto, postac kogo)
{
if(trafienie(kto, kogo))
kogo.hp -= damage(kto);
}
byaby do uzycia w poprawionym c (przekazujacym struktury
przez wewn referencje)
(do przemyslenia sa i inne skladnie np modulowa
if(kto trafienie(kogo)
kogo hp -= kto damage();
ale to jest trudny temat na kiedy indziej)
poki co w starym c uzywam indeksow
atak(int kto , int kogo)
{
if(trafienie(kto, kogo))
postac[kogo].hp -= damage(kto);
}
ale 'bezposrednia' wersja jest chyba lepsza bo pominawszy inne
rzeczy jest szybsza (nie ma jednego mnozenia)
- dygresja
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
13. Data: 2012-04-17 15:42:34
Temat: Re: zaawansowane ai
Od: " " <f...@N...gazeta.pl>
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
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
14. Data: 2012-04-17 16:10:00
Temat: Re: zaawansowane ai
Od: " " <f...@N...gazeta.pl>
>
> 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
za to dobrze ze poruszasz temat pastwisk, tez rozwazalem pola
z trawa przyciagajace krowe, ale chwilowo staram sie wyklepac
jakos 'ogolne ai' z ktorego krowa jest jednym z przypadkow (cowarda),
oprogramowanie samej krowy jednak tez mnie interesuje np
koncepcja by krowa po wejsciu w tryb pragnienia skierowala sie
w poszukiwaniu wody - problemem by bylo okreslic algorytm
poszukiwania wody ale mozna po prostu podac krowie stale wspolrzedne
np rzeki i skierowac tam krowe przez A* lub prostrzy lokalny
sposob docierania do punktu (mysle by nie uzywac A* (choc mam juz
napisany bo lata temu uzywalem) tylko opracowac jakis uproszczony
lokalny algorytm typu skieruj sie w lini prostej do celu jesli
przeszkoda na drodzewylosuj pole w bok (albo wylosuj pole randem
kilka tur) - chodzi o taki algorytm ktory dzialalby chocby
dla przypadkow prostych przeszkud po drodze na trudniejszych moglby
ew krowe zwodzic - zna ktos taki lokalny algorytm ktory by
dzialal?
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
15. Data: 2012-04-17 16:14:38
Temat: Re: zaawansowane ai
Od: zażółcony <r...@c...pl>
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.
-
16. Data: 2012-04-17 16:19:23
Temat: Re: zaawansowane ai
Od: zażółcony <r...@c...pl>
W dniu 2012-04-17 16:10, f...@N...gazeta.pl pisze:
>>
>> 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
>
> za to dobrze ze poruszasz temat pastwisk, tez rozwazalem pola
> z trawa przyciagajace krowe, ale chwilowo staram sie wyklepac
> jakos 'ogolne ai' z ktorego krowa jest jednym z przypadkow (cowarda),
>
> oprogramowanie samej krowy jednak tez mnie interesuje np
> koncepcja by krowa po wejsciu w tryb pragnienia skierowala sie
> w poszukiwaniu wody - problemem by bylo okreslic algorytm
> poszukiwania wody ale mozna po prostu podac krowie stale wspolrzedne
> np rzeki i skierowac tam krowe przez A* lub prostrzy lokalny
> sposob docierania do punktu (mysle by nie uzywac A* (choc mam juz
> napisany bo lata temu uzywalem) tylko opracowac jakis uproszczony
> lokalny algorytm typu skieruj sie w lini prostej do celu jesli
> przeszkoda na drodzewylosuj pole w bok (albo wylosuj pole randem
> kilka tur) - chodzi o taki algorytm ktory dzialalby chocby
> dla przypadkow prostych przeszkud po drodze na trudniejszych moglby
> ew krowe zwodzic - zna ktos taki lokalny algorytm ktory by
> dzialal?
I tu znów polecam algorytm zapachu. Możesz zaimplementować
kilka różnych zapachów, jedne są dla krowy atrakcyjne, inne
wręcz odrażające. W największym uproszczeniu masz tylko dwa zapachy
- zapach jedzenia(wody) i zapach wroga. Ale możesz mieć ich więcej,
np. zapach nagrzanego byka, który ma w sobie zarówno coś z
atrakcyjności, jak i smaczek niebezpieczeństwa :) a krowa musi
podejmować decyzję - co ważniejsze :)
Całkiem serio mówię :)
-
17. Data: 2012-04-17 16:38:11
Temat: Re: zaawansowane ai
Od: " " <f...@N...gazeta.pl>
> > 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
boulder dash - dokładnie (pozostalych nie znam),
widze ze ktos wie o co chodzi (ostatnio nawet wspominalem
bo wydaje mi sie ze ktos z grupowiczow mial kiedys pod linkiem
calkiem wyrabistego boulder dasha napisanego w open glu)
> 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.
to jest dobre (a nawet bardzo dobre jako ogolny pomysl)
ale mz bardziej do innych zastosowan - np symulowania
psa mysliwskiego - ktory moglby tropic krowy po zapachu
i wogole symulowania zapachu na mapie
tutaj w przypadku prostej krowy bylyby dwa problemy ->
mam duzo postaci >10 tys i duza mape > 1000x1000
i updatowanie dla kazdej z nich mapy zapachu by troche
trwalo (co prawda jest to chyba (*)koszt porownywalny z
rozgladaniem sie, gdzie kazda postac przy kazdym rozejrzeniu
sie musi przeczytac np do 400 sasiadujacych pol - to ujdzie
ale jest to lekkie obciazenie)
(*) po zastanowieniu wychodzi ze jendak znacznie wiekszy bo
tzrebaby chyba przetwarzac cala mape wzgledem zapachow a to
by zmulilo jak nie wiem co
poaztym, zapachy mieszalyby sie i trzebeby kombinowac z podzialam
na podtypy i/lub uzywac wielu map do trzymania roznych - za duza
komplikacja za duzo ramu i za wolno
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
18. Data: 2012-04-17 16:39:02
Temat: Re: zaawansowane ai
Od: " M.M." <m...@N...gazeta.pl>
<f...@N...gazeta.pl> napisał(a):
> niestety widze ze wylozenie o co mi chodzi zajeloby mi
> wiecej nizbym chcial na to przeznaczac,
Cóż no tak to już jest. Wielokrotnie przerywam post w połowie,
bo zdaję sobie sprawę że nikt nie zrozumie jeśli nie włożę w
niego tyle pracy ile wymaga.
> w zadnym razie nie chodzi mi o algorytm na ruch - to jest
> skwantowane na siatce kwadratowych pol.
Może być ruch. Kilka klatek fizyki na jedną klatę graficzną i
potem skwantyzowane współrzędne x i y można rzutować na siatkę.
> 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),
Jeśli wlezie na drzewo to można zrenderować kawałek siatki na
której stroi krowa pod drzewem :D
> krowa spokojnie moze sie poruszac ruchami browna bo nie
> jest glowna postacia
Nie może poruszać się ruchami browna bo jest za ciężka i ma
za dużą bezwładność w stosunku do siły jakie oddziałują na
jej ciało :D Krowa gdy jest stara to majestatycznie łazi w tę i
w nazad. A więc musi mieć w grze swój wyimaginowany cel. Cel
czasami porusza się w jakimś kierunku. Krowa jest przyciągana
do celu. W ten sposób powoli będzie ruszała, osiągała prędkość
swojego marszu, a w pobliżu celu spowalniała. Cel porusza
się zgodnie z preferencjami krowy. Oddala się od wilków czy tam
czego a kieruje się ku soczystej trawce, a co jakiś czas ku
sadzawce albo rzeczce. Ponadto można dodać efekty stada, wtedy
krowa byłaby przyciągana siłą wypadkową do innych krów i swojego
celu.
> (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
Obliczenia można robić na floatach i potem rzutować na
skwantowaną powierzchnię, nie ma problemu.
> 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,
Ja bym dał zestaw sił dla każdej pary obiektów. Ponadto jakby
obiekt tego wymagał dałbym mu cele. Cele obiektu to takie
obiekty które by oddziaływały tylko z nim. Cele bym rzucał
zgodnie to tu, to tam, np. dla krowy bym rzucał na trawę albo
koło wodopoju, sprawdzałbym czy cel nie jest zbyt blisko wilków.
> 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 )-
To jest proste. Kłopotów w implementacjach takich rzeczy to są
dopiero KŁOPOTY :D. Nie da rady oprogramować jedną pętlą i
jednym wzorem świata w którym jest 1000 różnych obiektów, a
każda para obiektów (ba, czasami n obiektów) wyzwala jakieś
specyficzne akcje.
> 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
No a jaki klepiesz?
Pozdrawiam
Aha...
Do wyznaczania trasy to jest przeszukiwanie grafu w szerz plus
jakiś chaos - krowy chyba nie zawsze wybierają optymalne trasy.
Jeśli krowa nie może wleźć na skały, albo jeśli musi ominąć
koniecznie to drzewo, to po ustaleniu celu można jej przypisać
ciąg elementów siatki na jakie ma kolejno włazić. Gdy cel
zmieni położenie, to ciąg elementów siatki trzeba policzyć na
nowo. Ale... coś mi się zdaje że dobrze wiesz o tym wszystkim :)
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
19. Data: 2012-04-17 16:44:43
Temat: Re: zaawansowane ai
Od: " " <f...@N...gazeta.pl>
zażółcony <r...@c...pl> napisał(a):
> W dniu 2012-04-17 16:10, f...@N...gazeta.pl pisze:
> >>
> >> 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
> >
> > za to dobrze ze poruszasz temat pastwisk, tez rozwazalem pola
> > z trawa przyciagajace krowe, ale chwilowo staram sie wyklepac
> > jakos 'ogolne ai' z ktorego krowa jest jednym z przypadkow (cowarda),
> >
> > oprogramowanie samej krowy jednak tez mnie interesuje np
> > koncepcja by krowa po wejsciu w tryb pragnienia skierowala sie
> > w poszukiwaniu wody - problemem by bylo okreslic algorytm
> > poszukiwania wody ale mozna po prostu podac krowie stale wspolrzedne
> > np rzeki i skierowac tam krowe przez A* lub prostrzy lokalny
> > sposob docierania do punktu (mysle by nie uzywac A* (choc mam juz
> > napisany bo lata temu uzywalem) tylko opracowac jakis uproszczony
> > lokalny algorytm typu skieruj sie w lini prostej do celu jesli
> > przeszkoda na drodzewylosuj pole w bok (albo wylosuj pole randem
> > kilka tur) - chodzi o taki algorytm ktory dzialalby chocby
> > dla przypadkow prostych przeszkud po drodze na trudniejszych moglby
> > ew krowe zwodzic - zna ktos taki lokalny algorytm ktory by
> > dzialal?
>
> I tu znów polecam algorytm zapachu. Możesz zaimplementować
> kilka różnych zapachów, jedne są dla krowy atrakcyjne, inne
> wręcz odrażające. W największym uproszczeniu masz tylko dwa zapachy
> - zapach jedzenia(wody) i zapach wroga. Ale możesz mieć ich więcej,
> np. zapach nagrzanego byka, który ma w sobie zarówno coś z
> atrakcyjności, jak i smaczek niebezpieczeństwa :) a krowa musi
> podejmować decyzję - co ważniejsze :)
>
> Całkiem serio mówię :)
to z bykiem to mi sie za bardzo nie podoba ;-) to jest
dobre jako konepcja symulowania zapachu ale jako podloze
do danej sytuacji z krowa zbyt kosztowne (mam duza mape +
duzo postaci szukam stosunkowo dobrze dzialajacych uproszczen
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
20. Data: 2012-04-17 16:52:32
Temat: Re: zaawansowane ai
Od: " M.M." <m...@N...gazeta.pl>
<f...@N...gazeta.pl> napisał(a):
> >
> > 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
>
> za to dobrze ze poruszasz temat pastwisk, tez rozwazalem pola
> z trawa przyciagajace krowe, ale chwilowo staram sie wyklepac
> jakos 'ogolne ai' z ktorego krowa jest jednym z przypadkow (cowarda),
>
> oprogramowanie samej krowy jednak tez mnie interesuje np
> koncepcja by krowa po wejsciu w tryb pragnienia skierowala sie
> w poszukiwaniu wody - problemem by bylo okreslic algorytm
> poszukiwania wody
Hmmm
1) pamięć gdzie poprzednio była się napić
2) zapach niesiony wiatrem
3) z wzniesienia daleko widać, ale nie wiem czy krowy wchodzą na wzniesienia
aby rozejrzeć się za wodą :)
A to jest dzika krowa, czy taka u chłopa w zagrodzie? :D
> np rzeki i skierowac tam krowe przez A*
Raz chcesz prosty algorytm, a drugi raz od razu a-star.
Dla promienia 10 pól nie rzucałbym się na A*. W grze
GO rozwiązałem ten problem przez zapamiętanie ID obecnego
przeszukiwania grafu. Dzięki temu nie musiałem całej
planszy zerować i potem zaznaczać że dane pole siatki
było odwiedzone. Zakładałem że przeszukań będzie mniej
niż 2^32 i testowałem:
if( ! siatka.odwiedzony < globalny_id_przeszukiwania )
siatka.odwiedzony = globalny_id_przeszukiwania;
Dla małego breanch-factor i dla małych promieni działało
rewelacyjnie.
> lub prostrzy lokalny
Dla promienia 10 pól zdecydowanie jakiś prostszy.
> sposob docierania do punktu (mysle by nie uzywac A* (choc mam juz
> napisany bo lata temu uzywalem) tylko opracowac jakis uproszczony
> lokalny algorytm typu skieruj sie w lini prostej do celu jesli
> przeszkoda na drodzewylosuj pole w bok (albo wylosuj pole randem
> kilka tur) - chodzi o taki algorytm ktory dzialalby chocby
> dla przypadkow prostych przeszkud po drodze na trudniejszych moglby
> ew krowe zwodzic - zna ktos taki lokalny algorytm ktory by
> dzialal?
Przeszukiwanie grafu wszerz.
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/