Advertisement
Guest User

Untitled

a guest
Jul 15th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. // Minesweeper3.cpp : Defines the entry point for the console application.
  2. //
  3. #define OLC_PGE_APPLICATION
  4. #include "olcPixelGameEngine.h"
  5.  
  6. using namespace std;
  7. using namespace olc;
  8.  
  9.  
  10. const int nSize = 20;
  11. static const Pixel palletteLetters[]{
  12.     Pixel(0,0,0),
  13.     Pixel(0,0,255),
  14.     Pixel(0,255,0),
  15.     Pixel(255,0,0),
  16.     Pixel(255,0,0),
  17.     Pixel(255,0,0),
  18.     Pixel(255,0,0),
  19.     Pixel(255,0,0),
  20. };
  21.  
  22. struct cell {
  23.     bool bMine;
  24.     bool bRevealed;
  25.     bool bFlagged;
  26. };
  27.  
  28. class Engine : public PixelGameEngine {
  29. public:
  30.     Engine() {
  31.         sAppName = "Minesweeper 3";
  32.     }
  33. private:
  34.     int nNumbers[nSize][nSize];
  35.     cell cField[nSize][nSize];
  36.  
  37.     int nScale;
  38.     bool bGameRunning;
  39.  
  40.     void Reveal(int nX, int nY) {
  41.         if (nX < 0 || nY < 0 || nX > nSize - 1 || nY > nSize - 1 || cField[nX][nY].bRevealed || cField[nX][nX].bFlagged)return;
  42.         if (nNumbers[nX][nY] == 0) {
  43.             cField[nX][nY].bRevealed = true;
  44.             Reveal(nX - 1, nY - 1);
  45.             Reveal(nX - 1, nY + 1);
  46.  
  47.             Reveal(nX + 1, nY - 1);
  48.             Reveal(nX + 1, nY + 1);
  49.  
  50.             Reveal(nX + 1, nY);
  51.             Reveal(nX, nY + 1);
  52.  
  53.             Reveal(nX - 1, nY);
  54.             Reveal(nX, nY - 1);
  55.         }
  56.         else
  57.             cField[nX][nY].bRevealed = true;
  58.     }
  59. public:
  60.     bool OnUserCreate() {
  61.         srand(clock());
  62.         for (int x = 0; x < nSize; ++x)for (int y = 0; y < nSize; ++y) {
  63.             cField[x][y].bMine = rand() % 100 > 90;
  64.             if (cField[x][y].bMine) {
  65.                 nNumbers[x - 1][y - 1]++;
  66.                 nNumbers[x - 1][y + 1]++;
  67.  
  68.                 nNumbers[x + 1][y - 1]++;
  69.                 nNumbers[x + 1][y + 1]++;
  70.  
  71.                 nNumbers[x + 1][y]++;
  72.                 nNumbers[x][y + 1]++;
  73.  
  74.                 nNumbers[x - 1][y]++;
  75.                 nNumbers[x][y - 1]++;
  76.             }
  77.         }
  78.  
  79.         nScale = ScreenWidth() / nSize;
  80.  
  81.         bGameRunning = true;
  82.         return true;
  83.     }
  84.  
  85.     bool OnUserUpdate(float fElapsedTime) {
  86.         if (!bGameRunning) { return false; }
  87.         int nMouseX = GetMouseX() / nScale;
  88.         int nMouseY = GetMouseY() / nScale;
  89.  
  90.         Clear(BLACK);
  91.         for (int x = 0; x < nSize; ++x)for (int y = 0; y < nSize; ++y) {
  92.             if (cField[x][y].bRevealed) {
  93.                 FillRect(x*nScale + 1, y*nScale + 1, nScale - 1, nScale - 1, cField[x][y].bMine ? RED : GREY);
  94.                 if (!nNumbers[x][y] == 0)
  95.                     DrawString(x*nScale + 2, y*nScale + 2, to_string(nNumbers[x][y]), palletteLetters[nNumbers[x][y]], 1);
  96.             }
  97.             else {
  98.                 FillRect(x*nScale + 1, y*nScale + 1, nScale - 1, nScale - 1, DARK_GREY);
  99.                 if (cField[x][y].bFlagged)
  100.                     DrawString(x*nScale + 2, y*nScale + 2, "F", RED, 1);
  101.             }
  102.         }
  103.         DrawRect(nMouseX * nScale, nMouseY * nScale, nScale, nScale);
  104.  
  105.         if (GetMouse(0).bPressed)
  106.             Reveal(nMouseX, nMouseY);
  107.         if (GetMouse(1).bPressed)
  108.             cField[nMouseX][nMouseY].bFlagged = !cField[nMouseX][nMouseY].bFlagged;
  109.  
  110.         return true;
  111.     }
  112. };
  113.  
  114. int main()
  115. {
  116.     Engine game;
  117.     if (game.Construct(200, 200, 4, 4))
  118.         game.Start();
  119.  
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement