Guest User

Untitled

a guest
Jul 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.07 KB | None | 0 0
  1. #include "GameManager.h"
  2.  
  3. GameManager::GameManager()
  4. {
  5.     // Inicializa a SDL ao inicializar o jogo.
  6.     SDLBase::inicializaSDL();
  7.  
  8.     srand(time(NULL));
  9.  
  10.     // Carrega a imagem do plano de fundo.
  11.     bg = new Sprite("fundo.png");
  12.  
  13.     // Carrega a imagem do planeta.
  14.     pnt = new Sprite("PlanetaVermelho.png");
  15. }
  16.  
  17. GameManager::~GameManager()
  18. {
  19.     delete(bg);
  20. }
  21.  
  22. void GameManager::addPlanet()
  23. {
  24.     Planet *newPlanet = new Planet(pnt, 10 + rand()%10, rand()%800, rand()%600);
  25.  
  26.     planetArray.push_back(newPlanet);
  27. }
  28.  
  29. void GameManager::checkPlanet()
  30. {
  31.     for (std::vector<Planet*>::iterator it = planetArray.begin(); it != planetArray.end();)
  32.     {
  33.         Planet *planet = *it;
  34.  
  35.         if (planet->hitpoints <= 0)
  36.         {
  37. @@          planetArray.erase(it++);
  38.             delete(planet);
  39.         }
  40.         else
  41. @@      {
  42.             planet->render();
  43. @@          ++it;
  44. @@      }
  45.     }
  46. }
  47.  
  48. void GameManager::run()
  49. {
  50.     while (!SDL_QuitRequested())
  51.     {
  52.         processEvents();
  53.  
  54.         checkPlanet();
  55.  
  56.         // Faz a renderização do plano de fundo.
  57.         bg->render(0, 0);
  58.  
  59.         // Atualiza a tela.
  60.         SDLBase::atualizarTela();
  61.  
  62.         SDL_Delay(10);
  63.     }
  64. }
  65.  
  66. void GameManager::processEvents()
  67. {
  68.     // procura um evento
  69.     SDL_Event event;
  70.     if( SDL_PollEvent( &event ) )
  71.     {
  72.         // um evento foi achado
  73.         if( event.type == SDL_QUIT )
  74.                 SDL_Quit();
  75.         if( event.type == SDL_MOUSEBUTTONDOWN )
  76.         {
  77.             // obtém o estado do mouse
  78.             int mouseX, mouseY;
  79.             SDL_GetMouseState( &mouseX, &mouseY );
  80.  
  81.             // percorre o array de monstros de forma invertida
  82.             // até achar o monstro que o usuário clicou.
  83.             // percorremos de forma invertida porque os últimos
  84.             // monstros são desenhados no topo, e estes serão
  85.             // atingidos primeiro
  86.             for(std::vector<Planet*>::iterator it = planetArray.end() - 1; it != planetArray.begin() - 1; --it)
  87.             {
  88.                 Planet *planet = *it;
  89.  
  90.                 if( mouseX >= planet->x &&
  91.                     mouseX < planet->x + planet->sprite->getClip().w &&
  92.                     mouseY >= planet->y &&
  93.                     mouseY < planet->y + planet->sprite->getClip().h )
  94.                 {
  95.                     // acerta o planeta, dando dano aleatório entre 10 e 19
  96.                     planet->hitpoints -= rand() % 10 + 10;
  97.  
  98.                     // acertamos apenas um monstro
  99.                     // portanto saímos do break
  100.                     break;
  101.                 }
  102.             }
  103.         }
  104.         if( event.type == SDL_KEYDOWN )
  105.         {
  106.             // uma tecla foi pressionada
  107.             if( event.key.keysym.sym == SDLK_ESCAPE )
  108.             {
  109.                 // se a tecla ESC foi pressionada, sair do programa
  110.                 SDL_Event quit;
  111.                 quit.type = SDL_QUIT;
  112.                 SDL_PushEvent( &quit );
  113.             }
  114.             else
  115.             {
  116.                 // caso qualquer outra tecla seja pressionada,
  117.                 // chamar a rotina de adicionar monstro
  118.                 addPlanet();
  119.             }
  120.         }
  121.     }
  122.     // fim do loop de eventos
  123. }
Add Comment
Please, Sign In to add comment