Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Minesweeper3.cpp : Defines the entry point for the console application.
- //
- #define OLC_PGE_APPLICATION
- #include "olcPixelGameEngine.h"
- using namespace std;
- using namespace olc;
- const int nSize = 20;
- static const Pixel palletteLetters[]{
- Pixel(0,0,0),
- Pixel(0,0,255),
- Pixel(0,255,0),
- Pixel(255,0,0),
- Pixel(255,0,0),
- Pixel(255,0,0),
- Pixel(255,0,0),
- Pixel(255,0,0),
- };
- struct cell {
- bool bMine;
- bool bRevealed;
- bool bFlagged;
- };
- class Engine : public PixelGameEngine {
- public:
- Engine() {
- sAppName = "Minesweeper 3";
- }
- private:
- int nNumbers[nSize][nSize];
- cell cField[nSize][nSize];
- int nScale;
- bool bGameRunning;
- void Reveal(int nX, int nY) {
- if (nX < 0 || nY < 0 || nX > nSize - 1 || nY > nSize - 1 || cField[nX][nY].bRevealed || cField[nX][nX].bFlagged)return;
- if (nNumbers[nX][nY] == 0) {
- cField[nX][nY].bRevealed = true;
- Reveal(nX - 1, nY - 1);
- Reveal(nX - 1, nY + 1);
- Reveal(nX + 1, nY - 1);
- Reveal(nX + 1, nY + 1);
- Reveal(nX + 1, nY);
- Reveal(nX, nY + 1);
- Reveal(nX - 1, nY);
- Reveal(nX, nY - 1);
- }
- else
- cField[nX][nY].bRevealed = true;
- }
- public:
- bool OnUserCreate() {
- srand(clock());
- for (int x = 0; x < nSize; ++x)for (int y = 0; y < nSize; ++y) {
- cField[x][y].bMine = rand() % 100 > 90;
- if (cField[x][y].bMine) {
- nNumbers[x - 1][y - 1]++;
- nNumbers[x - 1][y + 1]++;
- nNumbers[x + 1][y - 1]++;
- nNumbers[x + 1][y + 1]++;
- nNumbers[x + 1][y]++;
- nNumbers[x][y + 1]++;
- nNumbers[x - 1][y]++;
- nNumbers[x][y - 1]++;
- }
- }
- nScale = ScreenWidth() / nSize;
- bGameRunning = true;
- return true;
- }
- bool OnUserUpdate(float fElapsedTime) {
- if (!bGameRunning) { return false; }
- int nMouseX = GetMouseX() / nScale;
- int nMouseY = GetMouseY() / nScale;
- Clear(BLACK);
- for (int x = 0; x < nSize; ++x)for (int y = 0; y < nSize; ++y) {
- if (cField[x][y].bRevealed) {
- FillRect(x*nScale + 1, y*nScale + 1, nScale - 1, nScale - 1, cField[x][y].bMine ? RED : GREY);
- if (!nNumbers[x][y] == 0)
- DrawString(x*nScale + 2, y*nScale + 2, to_string(nNumbers[x][y]), palletteLetters[nNumbers[x][y]], 1);
- }
- else {
- FillRect(x*nScale + 1, y*nScale + 1, nScale - 1, nScale - 1, DARK_GREY);
- if (cField[x][y].bFlagged)
- DrawString(x*nScale + 2, y*nScale + 2, "F", RED, 1);
- }
- }
- DrawRect(nMouseX * nScale, nMouseY * nScale, nScale, nScale);
- if (GetMouse(0).bPressed)
- Reveal(nMouseX, nMouseY);
- if (GetMouse(1).bPressed)
- cField[nMouseX][nMouseY].bFlagged = !cField[nMouseX][nMouseY].bFlagged;
- return true;
- }
- };
- int main()
- {
- Engine game;
- if (game.Construct(200, 200, 4, 4))
- game.Start();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement