Olen tehnyt alkeellista tekoälyä ja minulle tuli outo ongelma:
//Globaalit:
int patterns_x[3][20]={ 1,1,1,1,1,2,2,-1,-2,-3,-1,0,0,1,2,2,-2,-2,-1,0, //satunaisliike kaavat
0,0,1,2,3,4,5,4,3,2,1,3,3,3,3,2,1,-2,-2,-1,
0,-1,-2,-3,-3,-2,-2,0,0,0,0,0,0,1,0,0,0,1,0,1 };
int patterns_y[3][20]={ 0,0,0,0,-1,-1,-1,-1,-1,0,0,0,0,0,2,2,2,2,2,2,
1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,0,0,0,0,
1,1,1,2,2,-1,-1,-1,-2,-2,-1,-1,0,0,0,1,1,1,1,1};
//Main()
int doing_pattern=0; //Liput jos liikekaavaa suoritetaan.
int current_pattern; //Kulloisetkin liikekaavat 0-2, joita
//aivo suorittaa
int pattern_element; //Suorittettavana olevan kaavan tämän-
//hetkinen elementti
//Tekoäly alkaa
if(!doing_pattern)
{
//x-akseli
if(ukko.x>koppis.x)koppis.x+=1;
if(ukko.x<koppis.x)koppis.x-=1;
//y-akseli
if(ukko.y>koppis.y)koppis.y+=1;
if(ukko.y<koppis.y)koppis.y-=1;
//Katsoo onko pelaaja 50 pisteen päässä
if(sqrt(.1+(ukko.x-koppis.x)*(ukko.x-koppis.x)+(ukko.y-koppis.y)*(ukko.y-koppis.y))<15)
{
//Hae uusi satunaisliikekaava.
current_pattern=rand()%3;
//aseta aivo liikekaavatilaan
doing_pattern=1;
pattern_element=0;
}//loppu jos 50 säteen sisällä
else
{
//Liikuta vihollista kulloisenkin liikekaavan
//seuraavalla elementillä
//TÄSSÄ ON ONGELMA kun kaksi seuraavaa riviä poistaa ohjelma toimii, mutta kun //ne ovat mukana tulee sdl error.
koppis.x+=patterns_x[current_pattern][pattern_element];
koppis.y+=patterns_y[current_pattern][pattern_element];
//onko liikekaavan suorittaminen loppunut?
if(++pattern_element==20)
{
pattern_element=0;
doing_pattern=0;
}//loppu jos kaava suorittettu
}//loppu else do patytern
}//loppu doing patternOlisin kiitollinen jos keksitte mikä aiheuttaa virheen. Saatte myös ehdotella parannuksia tekoälyyn.
Ainakaan et alusta current_pattern- ja pattern_element-muuttujia mitenkään, joten niiden arvot voivat olla aluksi mitä vain ja todennäköisesti viittaavat patterns_x- ja patterns_y-taulukoiden ulkopuolelle.
kk kiitos, jopas nyt on ongelmia... :(
Edit Nyt toimii kun alustin kummatkin muutujat 0.
On ainakin kaksi vaihtoehtoa liittää tekoäly peliin: suoraan pelisimikkukkaan tai erillinen funktio, jota kutsutaan silmukasta.
Kumpi näistä on parempi tapa?
Luultavasti lopputulos on selkeämpi, jos tekoälyn koodi on omassa funktiossaan.
ok, sitä minäkin ajattelin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.