The game can be run by using the the VS Effekt extension. You have to download the newest version of Effekt and click on the Run button above the main function in the main.effekt file. The game will start in a terminal with instructions on how to play
On Windows some characters won't show correctly in the CLI to fix this you can follow this post (does not work for my Win10 Laptop idk)
- changed grid to 1-D array improving speed by up to 3x (4.3.2025)
- See #38
- See #34
- See #23
- See #22
- some simple tests
- Board
- CLI interactions
- print board
- reveal squares and propagate through field until bombs are nearby
- working bombs
- flag squares
All relevant files are contained in the src folder.
Core files:
- board: The board and solver logic
- boards: Boards for tests and difficulty presets
- main: User interaction logic
- utils: Some helper functions mainly used for board and solver logic
The benchmark.effekt file contains a function to test the speed of the solver and some statistics from previous tests.
test.effekt contains a few tests to test the correctness and speed of solvers
In solver.effekt is a unused and incomplete alternative to the currently used getProbabilities function in board.effekt. There is a possibility to combine the two solver functions for more efficient solution finding.
Currently only BigInt with some related functions is implemented through FFI it is used when finding possible moves by finding all possible boards. It stores the amount of possible boards on which a mine is placed on relevant fields.
Run the main file:
effekt src/main.effektThis (like many other Effekt commands) uses the JavaScript backend by default.
To use a different backend, add the --backend <backend> flag.
Run the tests:
effekt src/test.effektOpen the REPL:
effektBuild the project:
effekt --build src/main.effektThis builds the project into the out/ directory, creating a runnable file out/main.
To see all available options and backends, run:
effekt --helpWhile Nix installation is optional, it provides several benefits:
Update dependencies (also runs automatically in CI):
nix flake updateOpen a shell with all necessary dependencies:
nix developRun the main entry point:
nix runBuild the project (output in result/bin/):
nix buildeffekt-stm- This very project!
.github/workflows/*.yml: Contains the CI definitionssrc/: Contains the source codemain.effekt: Main entry pointtest.effekt: Entry point for testslib.effekt: Library code imported bymainandtest
flake.nix: Package configuration in a Nix flakeflake.lock: Auto-generated lockfile for dependenciesLICENSE: Project licenseREADME: This README file
Two GitHub Actions are set up:
-
flake-check:- Checks the
flake.nixfile, builds and tests the project - Runs on demand, on
main, and on PRs - To run custom commands, add a step using:
nix run -- <ARGS>to run the main entry point with the given argumentsnix develop -c '<bash command to run>'to run commands in the correct environment
- Checks the
-
update-flake-lock:- Updates package versions in
flake.nix - Runs on demand and weekly (Tuesdays at 00:00 UTC)
- Updates package versions in