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 pattern
Olisin 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.