void Game::Paint()
{
  GameEngine *pGameEngine = GameEngine::GetEngine();
  SDL_Renderer *renderer = pGameEngine->GetRenderer();

  // Draw the background office
  _pOfficeBitmap->Draw(renderer, 0, 0);

  // Draw the sprites
  pGameEngine->DrawSprites();

  // Draw the number of guys who were hit
  char szText[64];
  SDL_Rect  rect = { 237, 360, 50, 50 };
  sprintf(szText, " %d ", _iHits);
  SDL_Color text_color = {120, 120, 120};
  SDL_Texture *text_texture = pGameEngine->DrawText(renderer,
						    szText,
						    _ttfFont,
						    text_color);
						    if(text_texture)SDL_RenderCopy(renderer, text_texture, NULL, &rect);
  
  
  // Draw the number of guys who were missed (got away)
  for (int i = 0; i < _iMisses; i++)
    _pSmallGuyBitmap->Draw(renderer,
			   389 + (_pSmallGuyBitmap->GetWidth() * i),
			   359);

  // Draw the game over message, if necessary
  if (_bGameOver)
    _pGameOverBitmap->Draw(renderer, 120, 110);
  
  SDL_RenderPresent(renderer);
}
void Game::Start()
{
  // Seed the random number generator
  srand(time(NULL));

  GameEngine *pGE = GameEngine::GetEngine();
  SDL_Renderer *renderer = pGE->GetRenderer();

  // Create and load the bitmaps
  SDL_Color scTrans = {255, 0, 255, 255};
  _pHighwayBitmap = new Bitmap(renderer, "res/Highway.bmp");
  _pChickenBitmap = new Bitmap(renderer, "res/Chicken.bmp", &scTrans);
  _pCarBitmaps[0] = new Bitmap(renderer, "res/Car1.bmp", &scTrans);
  _pCarBitmaps[1] = new Bitmap(renderer, "res/Car2.bmp", &scTrans);
  _pCarBitmaps[2] = new Bitmap(renderer, "res/Car3.bmp", &scTrans);
  _pCarBitmaps[3] = new Bitmap(renderer, "res/Car4.bmp", &scTrans);
  _pChickenHeadBitmap = new Bitmap(renderer, "res/ChickenHead.bmp", &scTrans);


  // Create the chicken and car sprites
  Sprite* pSprite;
  SDL_Rect    rcBounds = { 0, 0, 465, 400 };
  _pChickenSprite = new Sprite(_pChickenBitmap, rcBounds, BA_STOP);
  _pChickenSprite->SetPosition(4, 175);
  _pChickenSprite->SetVelocity(0, 0);
  _pChickenSprite->SetZOrder(1);
  pGE->AddSprite(_pChickenSprite);
  pSprite = new Sprite(_pCarBitmaps[0], rcBounds, BA_WRAP);
  pSprite->SetPosition(70, 0);
  pSprite->SetVelocity(0, 7);
  pSprite->SetZOrder(2);
  pGE->AddSprite(pSprite);
  pSprite = new Sprite(_pCarBitmaps[1], rcBounds, BA_WRAP);
  pSprite->SetPosition(160, 0);
  pSprite->SetVelocity(0, 3);
  pSprite->SetZOrder(2);
  pGE->AddSprite(pSprite);
  pSprite = new Sprite(_pCarBitmaps[2], rcBounds, BA_WRAP);
  pSprite->SetPosition(239, 400);
  pSprite->SetVelocity(0, -5);
  pSprite->SetZOrder(2);
  pGE->AddSprite(pSprite);
  pSprite = new Sprite(_pCarBitmaps[3], rcBounds, BA_WRAP);
  pSprite->SetPosition(329, 400);
  pSprite->SetVelocity(0, -10);
  pSprite->SetZOrder(2);
  pGE->AddSprite(pSprite);

  // Initialize the remaining global variables
  _iInputDelay = 0;
  _iNumLives = 3;
  _iScore = 0;
  _bGameOver = false;
}
void Game::Paint()
{
  GameEngine* pGE = GameEngine::GetEngine();
  SDL_Renderer* renderer = pGE->GetRenderer();

  // Draw the background and saucer bitmaps
  _pBackground->Draw(renderer, 0, 0);
  _pSaucer[_bSaucerFlame ? 1:0]->Draw(renderer, _iSaucerX, _iSaucerY);

  // Force a repaint to redraw the saucer
  SDL_RenderPresent(renderer);
}
void Game::Paint()
{
  GameEngine *pGameEngine = GameEngine::GetEngine();
  SDL_Renderer *renderer = pGameEngine->GetRenderer();

  // Draw the background highway
  _pHighwayBitmap->Draw(renderer, 0, 0);

  // Draw the sprites
  pGameEngine->DrawSprites();

  // Draw the number of remaining chicken lives
  for (int i = 0; i < _iNumLives; i++)
    _pChickenHeadBitmap->Draw(renderer,
			      406 + (_pChickenHeadBitmap->GetWidth() * i),
			      382);

  SDL_RenderPresent(renderer);
}
void Game::Start()
{
  // Seed the random number generator
  srand(SDL_GetTicks());

  GameEngine *pGE = GameEngine::GetEngine();
  SDL_Renderer *renderer = pGE->GetRenderer();

  // Create and load the background and saucer bitmaps
  _pBackground = new Bitmap(renderer, "res/Background.bmp");

  SDL_Color scTransColor = {0xFF, 0x0, 0xFF, 0xFF};
  _pSaucer[0] = new Bitmap(renderer, "res/Saucer.bmp", &scTransColor);
  _pSaucer[1] = new Bitmap(renderer, "res/SaucerFlame.bmp", &scTransColor);

  // Set the initial saucer position and speed
  _iSaucerX = 250 - (_pSaucer[0]->GetWidth() / 2);
  _iSaucerY = 200 - (_pSaucer[0]->GetHeight() / 2);
  _iSpeedX = 0;
  _iSpeedY = 0;  
}
void Game::Start()
{
  // Seed the random number generator
  srand(time(NULL));

  GameEngine *pGE = GameEngine::GetEngine();
  SDL_Renderer *renderer = pGE->GetRenderer();

  // Create and load the bitmaps
  SDL_Color scTrans = {255, 0, 255, 255};
  _pOfficeBitmap = new Bitmap(renderer, "res/Office.bmp");
  _pTargetBitmap = new Bitmap(renderer, "res/Target.bmp", &scTrans);
  _pPowBitmap = new Bitmap(renderer, "res/Pow.bmp", &scTrans);
  _pGuyBitmaps[0] = new Bitmap(renderer, "res/Guy1.bmp", &scTrans);
  _pGuyBitmaps[1] = new Bitmap(renderer, "res/Guy2.bmp", &scTrans);
  _pGuyBitmaps[2] = new Bitmap(renderer, "res/Guy3.bmp", &scTrans);
  _pGuyBitmaps[3] = new Bitmap(renderer, "res/Guy4.bmp", &scTrans);
  _pGuyBitmaps[4] = new Bitmap(renderer, "res/Guy5.bmp", &scTrans);
  _pSmallGuyBitmap = new Bitmap(renderer, "res/SmallGuy.bmp", &scTrans);
  _pGameOverBitmap = new Bitmap(renderer, "res/GameOver.bmp", &scTrans);

  // Create the target, pow, and guy sprites
  SDL_Rect rcBounds = { 0, 0, 500, 400 };
  _pTargetSprite = new Sprite(_pTargetBitmap, rcBounds, BA_STOP);
  _pTargetSprite->SetZOrder(4);
  pGE->AddSprite(_pTargetSprite);
  _pPowSprite = new Sprite(_pPowBitmap, rcBounds, BA_STOP);
  _pPowSprite->SetZOrder(3);
  _pPowSprite->SetHidden(true);
  pGE->AddSprite(_pPowSprite);
  _pGuySprites[0] = new Sprite(_pGuyBitmaps[0], rcBounds);
  _pGuySprites[0]->SetPosition(92, 175);
  _pGuySprites[0]->SetZOrder(2);
  _pGuySprites[0]->SetHidden(true);
  pGE->AddSprite(_pGuySprites[0]);
  _pGuySprites[1] = new Sprite(_pGuyBitmaps[1], rcBounds);
  _pGuySprites[1]->SetPosition(301, 184);
  _pGuySprites[1]->SetZOrder(2);
  _pGuySprites[1]->SetHidden(true);
  pGE->AddSprite(_pGuySprites[1]);
  _pGuySprites[2] = new Sprite(_pGuyBitmaps[2], rcBounds);
  _pGuySprites[2]->SetPosition(394, 61);
  _pGuySprites[2]->SetZOrder(2);
  _pGuySprites[2]->SetHidden(true);
  pGE->AddSprite(_pGuySprites[2]);
  rcBounds.x = 340;
  _pGuySprites[3] = new Sprite(_pGuyBitmaps[3], rcBounds, BA_WRAP);
  _pGuySprites[3]->SetNumFrames(4);
  _pGuySprites[3]->SetPosition(500, 10);
  _pGuySprites[3]->SetVelocity(-3, 0);
  _pGuySprites[3]->SetZOrder(1);
  _pGuySprites[3]->SetHidden(true);
  pGE->AddSprite(_pGuySprites[3]);
  rcBounds.x = 385;
  _pGuySprites[4] = new Sprite(_pGuyBitmaps[4], rcBounds, BA_WRAP);
  _pGuySprites[4]->SetNumFrames(4);
  _pGuySprites[4]->SetFrameDelay(5);
  _pGuySprites[4]->SetPosition(260, 60);
  _pGuySprites[4]->SetVelocity(5, 0);
  _pGuySprites[4]->SetZOrder(1);
  _pGuySprites[4]->SetHidden(true);
  pGE->AddSprite(_pGuySprites[4]);

  // Initialize the remaining global variables
  _iGuyMasterDelay = 50;
  _iHits = 0;
  _iMisses = 0;
  _bGameOver = false;
  
  //Load the music
  _mmMusic = Mix_LoadMUS("res/Music.xm");
  if(_mmMusic==nullptr) cout << "Could not play music: " <<  Mix_GetError();

  //Load the sound effetcs
  _mcWhack = Mix_LoadWAV("res/Whack.wav");
  _mcTaunt = Mix_LoadWAV("res/Taunt.wav");
  _mcBoo = Mix_LoadWAV("res/Boo.wav");
  
  // Play the background music
  pGE->PlaySong(_mmMusic);
}