Ai w SDL-u

0

Witam,
piszę grę na projekt w SDL-u a dokładniej małą bijatykę. Mam problem z AI. Chodzi o to, że kiedy odpalam program postać komputera lata po planszy w kółko , dopiero po jakimś czasie kręci się w pobliżu gracza. Nie bardzo wiem jak go uspokoić :/

 void Computer::lookingForPlayer(Human &human) {

	//If a human player is on the left side
	if(human.getPosX() < this->getPosX())
	{
		setMVel(this->getMVelX() - Player_VEL, this->getMVelY());
	}
	//if player is on the right side
	if(human.getPosX() > this->getPosX()) 
	{
		
		setMVel(this->getMVelX() + Player_VEL, this->getMVelY());
	}

	if(human.getPosY() < this->getPosY()) 
	{
		setMVel(this->getMVelX(), this->getMVelY() -  Player_VEL);
	}
	if(human.getPosY() > this->getPosY()) 
	{
		setMVel(this->getMVelX(), this->getMVelY() +  Player_VEL);
	}
}

Ktoś może mnie nakierować? Proszę o szybką odpowiedź.

0

Zapomniałeś zaimplementować akcję, gdy computer.X == player.X i to samo dla Y. Tu może być problem. Komputer nie może, a raczej nie umie, przemieszczać się w linii prostej na gracza.

0

sztuczna inteligencja nic nie ma do SDLa.
Proponowałbym coś takiego

if(!haveFocus())
    tryToGainFocus();
else 
    moveCloser();

Do początków z AI polecam to https://www.bloc.io/ruby-warrior/#/

0
  1. po co te if-y?
  2. z tego co rozumiem próbujesz wyznaczyć kurs pościgowy (chyba Computer ma nie biec na wprost Human, ale tam gdzie Human będzie w momencie jego dopadnięcia)
  3. źle liczysz kurs pościgowy i z tego wynika cały problem.
  4. co to jest Player_VEL jeśli jakaś stała to robisz to bezsensu.

Widzę, że masz problemy z matematyką, więc zamiast kombinować przez programowanie permutacyjne, niech Computer kieruje się zawsze na Human.

void Computer::lookingForPlayer(Human &human) {
     double dx = human.getPosX()-getPosX();
     double dy = human.getPosY()-getPosY();
     double norm = sqrt(dx*dx+*dy*dy);
 
     setMVel(dx/norm*ComputerVelocity, dy/norm*ComputerVelocity);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1