Advertisement
Amorf

Untitled

Dec 14th, 2021
549
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. #include "Game.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. Game::Game(DrawEngine &de) :
  7. de(de), isPaused(false)
  8. {
  9.     level = new Level(de, 10, 20);
  10. }
  11.  
  12. Game::~Game()
  13. {
  14.     delete level;
  15. }
  16.  
  17.  
  18. void Game::restart()
  19. {
  20.     delete level;
  21.     level = new Level(de, 10, 20);
  22.     isPaused = false;
  23.     repaint();
  24. }
  25.  
  26. bool Game::keyPress(int vk)
  27. {
  28.     // When pausing, ignore keys other than PAUSE and ENTER
  29.     if (vk != VK_PAUSE && vk != VK_RETURN && isPaused)
  30.         return false;
  31.  
  32.     switch (vk)
  33.     {
  34.         case VK_UP:
  35.             level->rotate();
  36.             break;
  37.         case VK_DOWN:
  38.             level->move(0, -1);
  39.             break;
  40.         case VK_LEFT:
  41.             level->move(-1, 0);
  42.             break;
  43.         case VK_RIGHT:
  44.             level->move(1, 0);
  45.             break;
  46.         case VK_SPACE:
  47.             level->rotate();
  48.             break;
  49.         case VK_PAUSE:
  50.             pause(!isPaused);
  51.             break;
  52.         case VK_RETURN:
  53.             // You can only restart on game over
  54.             if (level->isGameOver())
  55.                 restart();
  56.         default:
  57.             return false;
  58.     }
  59.     return true;
  60. }
  61.  
  62. void Game::timerUpdate()
  63. {
  64.     // Don't update game when pausing
  65.     if (isPaused)
  66.         return;
  67.  
  68.     // If game is over, show GAME OVER
  69.     if (level->isGameOver()) {
  70.         isPaused = true;
  71.         drawGameOver();
  72.         return;
  73.     }
  74.  
  75.     // Update game data
  76.     level->timerUpdate();
  77.  
  78.     // Redraw
  79.     level->drawBoard();
  80. }
  81.  
  82. void Game::pause(bool paused)
  83. {
  84.     // Don't pause if game is over
  85.     if (isGameOver())
  86.         return;
  87.  
  88.     isPaused = paused;
  89.     if (paused)
  90.         drawPause();
  91.     level->drawScore();
  92.     level->drawSpeed();
  93. }
  94.  
  95. void Game::repaint() const
  96. {
  97.     de.drawInterface();
  98.     level->drawScore();
  99.     level->drawSpeed();
  100.     level->drawNextPiece();
  101.     level->drawBoard();
  102.     if (level->isGameOver())
  103.         drawGameOver();
  104.     else if (isPaused)
  105.         drawPause();
  106. }
  107.  
  108. bool Game::isGameOver() const
  109. {
  110.     return level->isGameOver();
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement