# Minesweeper

This project assists creating a minesweeper javascript game.  The purpose of this project was assisting a friend by creating an npm package that she consumed to create a minesweeper game. 

## Getting Started

### Download
```
npm i @jonathanbuchner/minesweeper
```
### Include minesweeper class in JavaScript (Example)
```
import { Minesweeper } from '../node_modules/@jonathanbuchner/minesweeper/dist/minsweeper';
```
Available Methods
```
let width; //Width of board.
let height; //Height of board.
let mines; //Mines in board.

//Constructor
new Minesweeper(width: number, height: number, mines: number);

//Square
class Square{
    id: number; //Position of mine.
    isMine: boolean; //True if mine.
    number: number | null; //is null if square contains mine, otherwise contains the number of surround mines.
    isVisible: boolean;  //Used to track if mine has been.
}

//Methods
game.getBoard();  //returns all squares as an array.

game.getSquare(id: number): Square //returns square based on id.

game.checkIsMine(id: number): boolean //returns if square is mine.

game.getNumber(id: number): number | null //returns squares number.  returns null if mine.

game.getIsVisible(id: number): boolean //returns if square is visible.

game.markVisible(id: number): void //marks a square as visible.

game.HasWon(): boolean //Returns true if all non mines are visible squares.  

game.HasLost(): boolean //Returns true if a mine is a visible. 
```
Recommended Approach
1. Make a new game
2. Use .getboard() to get all the squares.  Only show numbers to squares if the square is marked as visible.
3. When a user clicks a square, 
    1) Mark the square as visible. _.markVisible()_
    2) Display the updated board. _.getBoard()_
    3) Check if the user has lost the game (a visible square that is a mine will return true). _.hasLost()_
    4) Check if the user has won the game (all squares that are not mines are visible).  _.hasWon()_

## Authors

**Jonathan Buchner** - [jonathanbuchner.com](https://jonathanbuchner.com)

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
