Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Tekoäly

vehkis91 [28.04.2008 17:17:08]

#

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.

hunajavohveli [28.04.2008 17:20:29]

#

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.

vehkis91 [28.04.2008 17:21:09]

#

kk kiitos, jopas nyt on ongelmia... :(

Edit Nyt toimii kun alustin kummatkin muutujat 0.

vehkis91 [29.04.2008 18:30:11]

#

On ainakin kaksi vaihtoehtoa liittää tekoäly peliin: suoraan pelisimikkukkaan tai erillinen funktio, jota kutsutaan silmukasta.

Kumpi näistä on parempi tapa?

Antti Laaksonen [29.04.2008 18:38:01]

#

Luultavasti lopputulos on selkeämpi, jos tekoälyn koodi on omassa funktiossaan.

vehkis91 [29.04.2008 18:43:49]

#

ok, sitä minäkin ajattelin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta