# Minesweeper
A classic Minesweeper game for the terminal, built with Dart and [nocterm](https://pub.dev/packages/nocterm).
```
███╗ ███╗██╗███╗ ██╗███████╗███████╗
████╗ ████║██║████╗ ██║██╔════╝██╔════╝
██╔████╔██║██║██╔██╗ ██║█████╗ ███████╗
██║╚██╔╝██║██║██║╚██╗██║██╔══╝ ╚════██║
██║ ╚═╝ ██║██║██║ ╚████║███████╗███████║
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝╚══════╝
```
## Features
- Terminal-based UI with keyboard controls
- Three difficulty levels:
| Difficulty | Grid Size | Mine Density |
| ---------- | --------- | ------------ |
| Easy | 9×9 | 12% |
| Medium | 16×16 | 24% |
| Hard | 24×24 | 36% |
- Animated game over sequence
- Flag system to mark suspected mines
## Requirements
- Dart SDK `>=3.9.0 <4.0.0`
## Installation
```bash
dart pub get
```
## Usage
```bash
dart run
```
## Controls
| Key | Action |
| ---------- | ----------------- |
| Arrow Keys | Move cursor |
| Space | Reveal cell |
| F | Flag/unflag cell |
| Enter | Confirm selection |
## How to Play
1. Select a difficulty level on the intro screen
2. Navigate the grid using arrow keys
3. Press **Space** to reveal a cell
4. Press **F** to flag cells you suspect contain mines
5. Reveal all non-mine cells to win
6. Hit a mine and it's game over!
## Project Structure
```
lib/
├── main.dart # Entry point
└── src/
├── app.dart # Root application component
├── models/ # Data models (Difficulty, Place, etc.)
├── provider/ # State management
└── screens/
├── intro/ # Difficulty selection screen
├── mine_sweeper/ # Main game screen
└── game_over/ # Game over screen
```
## Dependencies
- [nocterm](https://pub.dev/packages/nocterm) – Terminal UI framework
- [scoped_deps](https://pub.dev/packages/scoped_deps) – Dependency injection
- [file](https://pub.dev/packages/file) – File system abstraction