Beispiel #1
0
void Ambiente::inicializar()
{
    //	Inicializar a semente do rand
    uniRandSetSemente(time_t(NULL));

    //	Inicializar as comidas com posição aleatória
    for (unsigned int i = 0; i < NUM_COMIDAS; ++i)
    {
        Comida c;
        //	Fazer o rand entre dois vetores nos dá uma posição aleatória na area formada pelos dois vetores
        c.pos = uniRandEntre(Vetor2D(0, 0), Vetor2D(gJanela.getLargura(), gJanela.getAltura()));
        c.spr.setSpriteSheet("branco");
        c.spr.setCor(0, 255, 0);
        c.indice = i;
        comidas.push_back(c);
    }

    //	Inicialiar os agentes com posição aleatória
    for (unsigned int i = 0; i < NUM_AGENTES; ++i)
    {
        agentes.push_back(Agente());
        //	Passamos o ponteiro para o ambiente, pois o agente
        //	precisa conhecer o ambiente para saber o que fazer.
        agentes[i].inicializar(this);
    }
}
Beispiel #2
0
void Ambiente::sortearPosComida(int indice)
{
    do
    {
        comidas[indice].pos = uniRandEntre(Vetor2D(0, 0), Vetor2D(gJanela.getLargura(), gJanela.getAltura()));

    }	//	mantêm o loop enquanto a comida está colidindo com algum agente
    while (comidaColidiuComAlgumAgente(indice));
}
Beispiel #3
0
Vetor2D Vetor2D::getRotacionado(float angulo)
{
	float rad = angulo*PI / 180;
	float cs = cosf(rad);
	float sn = sinf(rad);
	return Vetor2D(x*cs - y*sn, x*sn + y*cs);
}
Beispiel #4
0
Vetor2D Vetor2D::normalizar()
{
    float size = this->getNorma();


    return Vetor2D(this->x/size,this->y/size);
}
Beispiel #5
0
void Jogo::executar()
{
	while(!gTeclado.soltou[TECLA_ESC] && !gEventos.sair)
	{
		uniIniciarFrame();

		//	Se pressionou R, restaura o painel de debug
		if (gTeclado.pressionou[TECLA_R])
			gDebug.restaurar();


		//	Depurar variaveis
		gDebug.depurar("FPS", (int)gTempo.getFPS());
		gDebug.depurar("deltaTempo", gTempo.getDeltaTempo());
		gDebug.depurar("mouse", Vetor2D(gMouse.x, gMouse.y));
		gDebug.depurar("retanguloTela", Quad(0, 0, gJanela.getLargura(), gJanela.getAltura()));

		//	Cria um erro
		gDebug.erro("Erro Teste", this);

		//	Opcionalmente, passa-se uma cor para a depuração
		gDebug.depurar("Verde", "Este é um texto Verde", Cor(0, 255, 0));


		//	Desenhar fundo, para poder ver melhor a transparência do painel
		sprFundo.desenhar(gJanela.getLargura() / 2, gJanela.getAltura() / 2);
		desenharInstrucoes();

		uniTerminarFrame();
	}
}
Beispiel #6
0
Vetor2D Vetor2D::rotate(float degrees)
{
    //convertendo para radianos
    degrees = grausToRad(degrees);

    return Vetor2D(this->x*cosf(degrees) - this->y*sinf(degrees),this->x*sinf(degrees) + this->y*cosf(degrees));
}
Beispiel #7
0
void Vetor2D::setAngle(float angle)
{
    float norma = this->getNorma();

    (*this) = Vetor2D(angle);

    if(norma){
        this->setNorma(norma);
    }
}
Beispiel #8
0
void Monstro::pursuit()
{
    if( !this->targetIsVisible() )
    {
        this->state = Monstro::SEEK;
        this->delay_seek.stop();
        this->delay_seek.start();

        this->setVel(this->getVel()/2);

    }
    else
    {
        double dx = ( target->getOffset().getX() - this->getOffset().getX() );
        double dy = ( target->getOffset().getY() - this->getOffset().getY() );

        if( abs(dx) > abs(dy) )
        {
            if( dx > 0 ) this->vdirector = Monstro::VD_RIGHT;
            else if( dx < 0 ) this->vdirector = Monstro::VD_LEFT;
        }
        else if( abs(dy) > abs(dx) )
        {
            if( dy > 0 ) this->vdirector = Monstro::VD_DOWN;
            else if( dy < 0 ) this->vdirector = Monstro::VD_UP;
        }

        if( Vetor2D(dx,dy).getNorma() <= this->getDimension().getNorma()/2)
        {
            this->vdirector = Monstro::VD_STOP;
            this->target->setWasCaught(true);
        }
    }


}
Beispiel #9
0
Vetor2D Vetor2D::operator+(const Vetor2D& v)
{
	return Vetor2D(x + v.x, y + v.y);
}
Beispiel #10
0
bool AStar::calcularCaminho(float origem_x, float origem_y, float destino_x, float destino_y)
{
	return calcularCaminho(Vetor2D(origem_x, origem_y), Vetor2D(destino_x, destino_y));
}
Beispiel #11
0
Vetor2D Vetor2D::getNormal()
{
	float invCompr = 1.0f / comprimento();
	return Vetor2D(x * invCompr, y * invCompr);
}
Beispiel #12
0
Vetor2D Vetor2D::operator/(float a)
{
	return Vetor2D(x / a, y / a);
}
Beispiel #13
0
Vetor2D Vetor2D::operator-(float a)
{
	return Vetor2D(x - a, y - a);
}
Beispiel #14
0
Vetor2D Vetor2D::operator/(const Vetor2D& v)
{
	return Vetor2D(x / v.x, y / v.y);
}
Beispiel #15
0
Vetor2D Vetor2D::operator* (float k)
{
    return Vetor2D(this->x*k,this->y*k);
}
Beispiel #16
0
Vetor2D::Vetor2D(float angle)
{
    (*this) = Vetor2D(cosf(grausToRad(angle)),sinf(grausToRad(angle)));
}
Beispiel #17
0
#include "vetor2D.h"

float grausToRad(float graus)
{
    return (graus*float(M_PI))/180.0f;
}
float radToGraus(float radianos)
{
    return (radianos*180.0f)/float(M_PI);
}

const Vetor2D Vetor2D::ZERO = Vetor2D(0,0);

Vetor2D::Vetor2D()
{
    this->x = 0;
    this->y = 0;

}

Vetor2D::Vetor2D(float x,float y)
{
    this->x = x;
    this->y = y;
}

Vetor2D::Vetor2D(float angle)
{
    (*this) = Vetor2D(cosf(grausToRad(angle)),sinf(grausToRad(angle)));
}
Beispiel #18
0
Vetor2D Vetor2D::operator-(const Vetor2D& v)
{
	return Vetor2D(x - v.x, y - v.y);
}
Beispiel #19
0
Vetor2D Vetor2D::operator*(const Vetor2D& v)
{
	return Vetor2D(x * v.x, y * v.y);
}
Beispiel #20
0
Vetor2D Vetor2D::operator/ (float k)
{
    return Vetor2D(this->x/k,this->y/k);
}
Beispiel #21
0
Vetor2D Vetor2D::operator+(float a)
{
	return Vetor2D(x + a, y + a);
}
Beispiel #22
0
Vetor2D Vetor2D::operator+ (Vetor2D other)
{
    return Vetor2D(this->x + other.getX(),this->y + other.getY());
}
Beispiel #23
0
Vetor2D Vetor2D::operator*(float a)
{
	return Vetor2D(x * a, y * a);
}
Beispiel #24
0
Vetor2D Vetor2D::operator- (Vetor2D other)
{
    return Vetor2D( this->x - other.getX(), this->y - other.getY() );
}
Beispiel #25
0
float Vetor2D::getAngulo()
{
	return getAnguloAPartirDoVetor(Vetor2D(1, 0));
}
Beispiel #26
0
Vetor2D ObjetoTile::getPos()
{
	return Vetor2D(x, y);
}
Beispiel #27
0
#include "Monstro.h"

const int Monstro::SEEK = 0;
const int Monstro::PURSUIT = 1;
const int Monstro::CATCH = 2;

const Vetor2D Monstro::VD_UP = Vetor2D(0, -1);
const Vetor2D Monstro::VD_DOWN = Vetor2D(0, 1);
const Vetor2D Monstro::VD_RIGHT = Vetor2D(1, 0);
const Vetor2D Monstro::VD_LEFT = Vetor2D(-1, 0);
const Vetor2D Monstro::VD_STOP = Vetor2D::ZERO;

// 200 ms
const int Monstro::RESPONSE_TIME_SEEK = 1000;
const int Monstro::RESPONSE_TIME_UNIVERSAL = 200;


Monstro::Monstro(Uint16 spriteWidth, Uint16 spriteHeight, string spriteSrc, double visualField, Personagem* target, double vel,int thresholdVision) throw(LoadImageException,NoVideoBufferException,NoTargetException) : Sprite(spriteWidth, spriteHeight, spriteSrc)
{
    this->vdirector = Monstro::VD_RIGHT;
    //this->foundTarget = false;


    this->target = target;
    this->vel = vel;
    this->thresholdVision = thresholdVision;
    this->visualField = visualField;

    if(!this->target) throw NoTargetException();

Beispiel #28
0
Vetor2D ObjetoTile::getPosCentro()
{
	return Vetor2D(getXCentro(), getYCentro());
}