
If all neighbor hasFlag=true cells are not hasMine=true, game over.If cell neighborMineCount = "neighbor hasFlag=true cell count":.If cell neighborMineCount != "neighbor hasFlag=true cell count", do nothing.If cell neighborMineCount = 0, no nothing.
Multi Click (both Left and Right Click) on a Cell: Note: The last step may be implemented with a recursive call or by using a stacked data structure.
If cell has neighborMineCount = 0, set isOpened=true, call Left Click on a Cell for all neighbor cells, which hasFlag=false and isOpened=false. If all cells which hasMine=false are opened, end game with SUCCESS. If cell has neighborMineCount > 0, set isOpened=true, show neighborMineCount on the cell. If cell isOpened=false, set cell hasFlag=true and show a flag on the cell. Note 2: It's recommended to handle mouse clicks with "mouse release" actions instead of "mouse pressed/click" actions, otherwise a left or right click may be understood as a multi-click or vice versa. Note 1: Neighbor cells should be accessed with the coordinates:Īnd don't forget that neighbor cell counts may be 3 (for corner cells), 5 (for edge cells) or 8 (for middle cells). (This step may be done for each clicked cell while game continues but it may be inefficient.) Calculate neighborMineCount values for each cell, which have hasMine=false. Assign mines to cells randomly (set hasMine=true). So, we have a two-dimensional "Button cells" data structure to handle game actions. neighborMineCount 0 to 8 (default 0, total count of mines on neighbor cells). isOpened = true / false (default false). button), which has the following attributes: We may think of each cell as a UI structure (e.g. If all cells (without mines) are opened using left clicks and/or multi-clicks, game ends with SUCCESS. If neighbor cells' total flag count equals to this multi-clicked cell's count and at least one predicted mine location is wrong, game ends with FAIL. If neighbor cells' total flag count equals to this multi-clicked cell's count and predicted mine locations are true, all closed and unflagged neighbor cells are opened automatically. If you multi-click (both right and left click) on a cell which is opened and has at least one mine on its neighbors:. If you right-click on a closed cell, you put a flag which shows that "I know this cell has a mine". If neighbor cells have no mines, all neighbor cells are opened automatically. If neighbor cell(s) have mine(s), this opened cell shows neighbor mine count. Cells have two states, opened and closed. I also have each square that is clicked check to see how many bombs are adjacent to it and print the number on the square just like in the game. I have my bombs distributed throughout the field, and I have my actionlisteners responding to clicks and mouselistener, responding to right clicks. The board is a two-dimensional space, which has a predetermined number of mines. I am working on a minesweeper program in Java. #MINESWEEPER JAVA WINDOWS#
This blog post explains the essential algorithms for the well-known Windows game "Minesweeper." Game Rules