NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
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
Avatar
TomBen
Tvůrce
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í
+2,50 Kč
Ř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.