Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se C a C++. Zároveň využij akce až 80 % zdarma při nákupu e-learningu - více informací.
c++ week

Diskuze: Umělá inteligence

Aktivity
Avatar
Karak Dalík
Člen
Avatar
Karak Dalík:11.8.2016 11:24

Dobrý den, potřeboval bych pomoct/poradit, dělám hru v bludišti, kde hráč hledá zlatou sochu a musí se vyhýbat "kledbě" (takové černé stonožce). A já potřebuji aby ta stonožka projížděla bludištěm a hráče hledala, tedy aby nejezdila od zdi ke zdi, ale i sama občas zatočila. A moc mi to nejde vždy se něco pokazí.

Takhle vypadá její step:
if 1=1 {if point_distance(x,y,Pla­yer.x,Player.y)<200
and not collision_line(x,y,Pla­yer.x,Player.y,Ste­na,false,true){ak­ce=1}
if akce =1 { if point_distance(x,y,Pla­yer.x,Player.y)>250{ak­ce=0}
else{mp_grid_p­ath(mpg,path0,x,y,Pla­yer.x,Player.y,0)
path_start(pat­h0,3,0,1)}}}
if akce=0{
if smner=0{if !place_free(x,y+3) then smner=2} else { //odraz

if smner=1{if !place_free(x-3,y) then smner=3} else {

if smner=2{if !place_free(x,y-3) then smner=0} else {

if smner=3{if !place_free(x+3,y) then smner=1} else {
}}}}
if smner=0{if place_free(x-3,y) then smner=1} else { //zatáčení

if smner=1{if place_free(x,y+3) then smner=2} else {

if smner=2{if place_free(x+3,y) then smner=3} else {

if smner=3{if place_free(x,y+3) then smner=1} else {
}}}}

if smner=0 {direction=270}
if smner=1 {direction=180}
if smner=2 {direction=90}
if smner=3 {direction=0}
}

Editováno 11.8.2016 11:25
 
Odpovědět
11.8.2016 11:24
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Karak Dalík
TomBen:11.8.2016 17:23

Když už píšeš jako prase, alespoň používej beautifier. Tenhle funguje i na GM kódy:
http://jsbeautifier.org/

Pár poznatků ke uvedenému kódu:

  • If 1=1 je nesmyslná podmínka, která platí vždycky.
  • point distance testuj vždy jen jednou za step

    ( pro další podmínky si výsledek schováš do proměnné a testuješ jen ji )

  • spousta ifů, programátorova smrt ( používej krátké skripty, ne špagetový kód )

Osobně bych na problém zkusil jít úplně jinak, takříkajíc od lesa. V bludišti bych rozmístil neviditelné objekty jako sensory a když by byl hráč u nich, housenka by lezla směrem k cíli náhodně zvolenému z několika volných míst okolo sensoru. Vypadalo by to, že hráče hledá. Na hráče by se pak vrhala jen v přímém dohledu.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
11.8.2016 17:23
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.