Autor Wątek: [elite clones] utknąłem na ai  (Przeczytany 1332 razy)

Offline fir

  • Użytkownik

# Październik 29, 2010, 10:16:02
pisze swojego kosmic fighter shootera:

http://fir1664.webpark.pl/sigma_alpha_1d.zip

ale utknąłem własnie na AI - chodzi po prostu o to jak zaprojektowac/wymyslic
jakies dobrze wygladajace walki miedzy statkami kosmicznymi/reguly zachowan
wrogow czyli ai wlasnie

poki co zrobilem proste - jesli go trafisz to leci na ciebie i strzela ale
wyglada to beznadziejnie - ktos ma moze jakies pomysly jak
zrobic to tak by bylo ok?

dzięki za odp

fir

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline pawelek

  • Użytkownik

# Październik 29, 2010, 10:27:10
Ponieważ nie odpalę Twojej gry (brak czasu), to podpowiem tak. Olej jakieś AI, zrób prosty system ekspertowy. Jeśli statek jest silniejszy, to wali prosto na ciebie, jak słabszy to ostrzeliwuje z daleka etc.  Jeśli jest grupa statków, to wiadomo najsilniejszy pancerz na przód itd. Ale to dość proste if'y są.A jeśli jest to zwykły fighter (jak Uprising Vipy), to po prostu dla danego statku tor lotu odpowiednio zakrzywiony i już.

Pozdr.
P.

Offline mwojt

  • Użytkownik

# Październik 29, 2010, 11:24:03
Ciekawie to wygląda, powinna być nazwa powietrzny cyrk, a co do ai to najlepiej na początek dopracować fizykę ( obiekty powinny mieć swoją prędkość) a tam jakoś dziwnie to działa. Trzeba zrobić na początek:
- liczenie odległości od wroga (później jeżeli odległość >< to)
- przybliżanie oddalanie wroga (ruch w kierunku)
- lot wroga między punktami (patrol)
- wróg wzywa pomoc (reszta przylatuje do punktu xyz)
- mysz powinna być na środku (WarpMouse czy coś).

Offline Lipek Samo Zło

  • Użytkownik

# Październik 29, 2010, 18:20:40
Jest taka ksiazka: http://www.amazon.com/Programming-Game-Example-Mat-Buckland/dp/1556220782
Napewno znajdziesz ja jak poszukasz w necie. Tam sa opisane szczegolowo (wraz z kodem - chyba rozdzial 2 albo 3) zachowania (Steering Behaviours) ktorych potrzebujesz.
Good Luck :)

Offline fir

  • Użytkownik

# Listopad 02, 2010, 11:42:28
Ciekawie to wygląda, powinna być nazwa powietrzny cyrk, a co do ai to najlepiej na początek dopracować fizykę ( obiekty powinny mieć swoją prędkość) a tam jakoś dziwnie to działa. Trzeba zrobić na początek:
- liczenie odległości od wroga (później jeżeli odległość >< to)
- przybliżanie oddalanie wroga (ruch w kierunku)
- lot wroga między punktami (patrol)
- wróg wzywa pomoc (reszta przylatuje do punktu xyz)
- mysz powinna być na środku (WarpMouse czy coś).

mozesz rozwinac ostatni punkt - dzieki z gory, za bardzo nie mam wlasnie pojęcia co z tym kursorem mychy
co do inputu to mam jeszcze innego drobnego buga - casem jakby blokuje mi sie shift i o ile
nornamlnie moge np wyjsc z gry od razu przez escape to wtedy musze wciskac shift 'az sie odblokuje'

zwykle klawisze czytam z ewenta WM_KEYDOWN ale shifta i kontrola czytam tez co ramke przes GetAsyncKeyState
nie wiem czy to jakies konflikty na styku tych dwu rzeczy :/ moze w zlym miejscu to pytanie ale to apropos 'input'

Jest taka ksiazka: http://www.amazon.com/Programming-Game-Example-Mat-Buckland/dp/1556220782
Napewno znajdziesz ja jak poszukasz w necie. Tam sa opisane szczegolowo (wraz z kodem - chyba rozdzial 2 albo 3) zachowania (Steering Behaviours) ktorych potrzebujesz.
Good Luck :)

no wielkie dzięki - juz mam przejrze i zajrze - temat jako zywo mnie wlasnie ciekawi totez wielkie dzeki za info o calej ksiedze
« Ostatnia zmiana: Listopad 02, 2010, 11:47:14 wysłana przez Liosan »

Offline mwojt

  • Użytkownik

# Listopad 02, 2010, 11:53:51
z myszką to najlepiej sprawdzić o ile się przesunęła i ustawiać jej pozycję na środku ekranu (chyba SetCursorPos(x,y); )

Offline HiddenNick

  • Użytkownik

# Listopad 02, 2010, 16:29:20
Poza tym Kursor można ukryć... ShowCursor(false) ?

Poza tym to coś wolno ci to działa i to niezależnie od tego ile obiektów jest na ekranie.

Jeśli chodzi o AI to powinieneś do tego podejść na takiej zasadzie, że jedyną rzeczą jaką musisz obliczyć to wektor kierunku wrogiego statku. Nie zawsze musi to być wektor na przeciwko ciebie. Mogą cię przecież próbować zajść od tyłu albo uciekać przed tobą. Musisz wyznaczenie tego wektora uzależnić od wielu czynników, wtedy będzie to wyglądało lepiej.

Poczytaj sobie o folckingu - jeśli podejdziesz do tego problemu w podobny sposób to może uzyskasz naturalny efekt.

Sprawdź też jak to wygląda w innych grach(np. Freespace).

Offline fir

  • Użytkownik

# Listopad 03, 2010, 11:39:02
Poza tym Kursor można ukryć... ShowCursor(false) ?

Poza tym to coś wolno ci to działa i to niezależnie od tego ile obiektów jest na ekranie.

Jeśli chodzi o AI to powinieneś do tego podejść na takiej zasadzie, że jedyną rzeczą jaką musisz obliczyć to wektor kierunku wrogiego statku. Nie zawsze musi to być wektor na przeciwko ciebie. Mogą cię przecież próbować zajść od tyłu albo uciekać przed tobą. Musisz wyznaczenie tego wektora uzależnić od wielu czynników, wtedy będzie to wyglądało lepiej.

Poczytaj sobie o folckingu - jeśli podejdziesz do tego problemu w podobny sposób to może uzyskasz naturalny efekt.

Sprawdź też jak to wygląda w innych grach(np. Freespace).

dobra dzięks - musze odpoczac i pomyslec - zarabiste forum ze jest tu taki natlok odpowiedzi w temacie

co do tej myszki to rozumiem rady ale i tak mnie tu cos niepokoi - co jesli ustawiam
myszke na srodku w kazdej ramce (niezaleznie czy ukryta czy nie) ale ktos szarpnie nia tak
ze wyleci poza okno??

co do wolnego dzialania to musze douczyc sie ogla - poki co zywcem jade wszystko w pętlach
przez glBegin(GL_TRiangles) i glVertex3f() :-/ probowalem sie poduczyc display list ale
najgorsze ze ich chyba nie mozna skalowac ani przekolorowac - okropnie ograniczają;
musiabym ich generowac ew tysiace (np dla kazdego size odzielnie) ale nie wiem czy od tego są


Offline Xirdus

  • Redaktor

# Listopad 03, 2010, 18:49:34
co do tej myszki to rozumiem rady ale i tak mnie tu cos niepokoi - co jesli ustawiam
myszke na srodku w kazdej ramce (niezaleznie czy ukryta czy nie) ale ktos szarpnie nia tak
ze wyleci poza okno??

Na fullscreenie myszka porusza się od <0,0> do <x,y> (x,y to rozdzielczość). Nigdy nie wyjdzie poza okno.
W oknie będzie po prostu wartość ujemna lub większa od okna.