Skills: Python
Overview
In this project, we aimed to create an accurate representation of the beloved game, Minesweeper, but with some added features to make our version distinct. The classic Minesweeper is a board of covered squares, where the aim is to clear the board without revealing any mines. In order to find the mine, numbers are revealed stating the number of mines in the adjacent squares. Typically, squares are cleared by left clicking and can be flagged as containing a mine by right clicking. In order to make our implementation different we decided to add a couple additional features that make the game more challenging and annoying for the user.

Features
Our minesweeper game has two different modes - regular and annoying.
The main features of both games include:
- 4 different difficulty levels (easy, medium, hard, and extreme) with increasing board size and number of mines

- A counter of the number of mines left un-flagged

- A menu button that returns back to the first menu page


- The ability to flag a square as a mine by right-clicking

- The ability to clear squares by left-clicking
On top of the previous features, the annoying version includes the following features.
Lying Numbers
A percentage of the revealed numbers are not accurate. These numbers are in the regular minesweeper coloring, while the real numbers are in a “bloody” style.

Hiding Squares
There is a chance that when squares are cleared on the board some of the already cleared squares will be re-hided. The number of squares and which ones are hidden is randomized.
Pop-up Windows
Periodically, when clearing squares, pop-up windows will appear at the middle of the screen that must be cleared before continuing the game. Most of the pop-up windows include discouraging and funny phrases directed at the player. Some of these phrases were written by us and others were generated using Open Source AI’s ChatGPT. In addition, one of the pop-ups is an “Are you sure?” question that can be answered as “yes” or “no”. If “yes” is selected the clicked square is clear. If “no” is selected the square is not cleared.


Moving Board
Periodically, when a square is cleared the board will move a up to 100 pixels to the left or the right to disorient and confuse the user.
Code Architecture
The code was structured using a model, view, and controller method (MVC). This methodology allowed us to develop the basic Minesweeper game by breaking the code into sections. Then, the base game was inherited to develop the "annoying" version of the game.
Model: creates a unique game board and tracks game state
View: displays the board and other features to the player
Controller: takes input from the player (mouse location and click) and updates the board in model.
Video Overview and Demo