Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "GameManager.h"
- GameManager::GameManager()
- {
- // Inicializa a SDL ao inicializar o jogo.
- SDLBase::inicializaSDL();
- srand(time(NULL));
- // Carrega a imagem do plano de fundo.
- bg = new Sprite("fundo.png");
- // Carrega a imagem do planeta.
- pnt = new Sprite("PlanetaVermelho.png");
- }
- GameManager::~GameManager()
- {
- delete(bg);
- }
- void GameManager::addPlanet()
- {
- Planet *newPlanet = new Planet(pnt, 10 + rand()%10, rand()%800, rand()%600);
- planetArray.push_back(newPlanet);
- }
- void GameManager::checkPlanet()
- {
- for (std::vector<Planet*>::iterator it = planetArray.begin(); it != planetArray.end();)
- {
- Planet *planet = *it;
- if (planet->hitpoints <= 0)
- {
- @@ planetArray.erase(it++);
- delete(planet);
- }
- else
- @@ {
- planet->render();
- @@ ++it;
- @@ }
- }
- }
- void GameManager::run()
- {
- while (!SDL_QuitRequested())
- {
- processEvents();
- checkPlanet();
- // Faz a renderização do plano de fundo.
- bg->render(0, 0);
- // Atualiza a tela.
- SDLBase::atualizarTela();
- SDL_Delay(10);
- }
- }
- void GameManager::processEvents()
- {
- // procura um evento
- SDL_Event event;
- if( SDL_PollEvent( &event ) )
- {
- // um evento foi achado
- if( event.type == SDL_QUIT )
- SDL_Quit();
- if( event.type == SDL_MOUSEBUTTONDOWN )
- {
- // obtém o estado do mouse
- int mouseX, mouseY;
- SDL_GetMouseState( &mouseX, &mouseY );
- // percorre o array de monstros de forma invertida
- // até achar o monstro que o usuário clicou.
- // percorremos de forma invertida porque os últimos
- // monstros são desenhados no topo, e estes serão
- // atingidos primeiro
- for(std::vector<Planet*>::iterator it = planetArray.end() - 1; it != planetArray.begin() - 1; --it)
- {
- Planet *planet = *it;
- if( mouseX >= planet->x &&
- mouseX < planet->x + planet->sprite->getClip().w &&
- mouseY >= planet->y &&
- mouseY < planet->y + planet->sprite->getClip().h )
- {
- // acerta o planeta, dando dano aleatório entre 10 e 19
- planet->hitpoints -= rand() % 10 + 10;
- // acertamos apenas um monstro
- // portanto saímos do break
- break;
- }
- }
- }
- if( event.type == SDL_KEYDOWN )
- {
- // uma tecla foi pressionada
- if( event.key.keysym.sym == SDLK_ESCAPE )
- {
- // se a tecla ESC foi pressionada, sair do programa
- SDL_Event quit;
- quit.type = SDL_QUIT;
- SDL_PushEvent( &quit );
- }
- else
- {
- // caso qualquer outra tecla seja pressionada,
- // chamar a rotina de adicionar monstro
- addPlanet();
- }
- }
- }
- // fim do loop de eventos
- }
Add Comment
Please, Sign In to add comment