SandPiles
Place your grains. Tip the balance. In this world of unstable equilibrium, every move can trigger a chain reaction. Conquer the board one avalanche at a time.
An online multiplayer turn-based strategy game based on the mathematical Abelian sandpile model, developed for "Applicazioni e Servizi Web" and "Software Process Engineering" exams at UniBo's Computer Science Master Degree courses.
Table of Contents
Documentation
Full technical documentation and academic report available here: Report
Features
- Competitive matches
- Matches against bot
- Login to save your progress
- Leaderboard to check your skill level
Tech Stack
Frontend
- Vue.js + TypeScript
- SCSS
- MDBootstrap
Backend
- Node.js + Express
- Socket.IO
- MongoDB
- Prolog bot
DevOps
- Build automation with npm scripts
- Docker containerization
- SonarCloud
- GitHub Actions CI/CD
Installation
- Prerequisites:
- Node.js v20+
- Docker (for production)
- Install dependencies:
npm install
- Configure environment:
- Create a
.env
file in the root directory containing: DB_NAME, DB_APP_USERNAME, DB_APP_PASSWORD, DB_ADMIN_USERNAME, DB_ADMIN_PASSWORD, JWT_SECRET, JWT_EXPIRATION.
- Create a
Running system
The system can be executed locally, using the following commands:
npm run build && npm start
and the client can be accessed from http://localhost:4173
.
To run the system in Docker, you first need to create a valid certificate and key pair using the following commands:
openssl req -x509 -newkey rsa:2048 -keyout certs/key.pem -out certs/cert.pem -days 365 -nodes -subj "/CN=sandpiles.com"
Then build and start by running the following commands:
npm run build:docker && npm run start:docker
and accessing the client using https://172.0.0.11
.
Contributing
See CONTRIBUTING for details on how to contribute to this project.
License
MIT Licensed - See LICENSE for details.