/wallwars

online board game. Play online: wallwars.net

Primary LanguageTypeScript

WallWars

Url to play: http://wallwars.net

WallWars discord: https://discord.gg/nwHWzbyJtd (to find players to play, or discuss the game's development)

About

Source code for the frontend and backend of "WallWars", an online 2-player strategy game (There is also an AI with a CLI tool which is not yet integrated with the website).

The goal of each player is to reach their goal before the opponent gets to theirs, placing walls to reshape the terrain to their advantage.

WallWars is inspired by board games Blockade and Quoridor. The main difference is that in WallWars there is no limit to how many walls you can place, and moves are more flexible (for instance, you can move and place a wall in the same turn).

Features

  1. Create public games that anyone can see and join from the lobby, or private games that can only be joined with a join code.
  2. No registration needed to play (start playing with 1 click).
  3. Navigate through recent past games played by anyone and watch any of them.
  4. Random past games are showcased (auto-played) in the lobby.
  5. Play offline games against real-life friends.
  6. Customizable game settings, like time controls (duration + increment) and board dimensions.
  7. Make premoves during your opponent's turn.
  8. Move with mouse or keyboard arrows.
  9. Out-of-board interactions: resign, offer draw, request takeback, and increase the opponent's remaining time.
  10. Navigate to any previous position during or after the game.
  11. Ability to request a rematch and play multi-game matches.
  12. Gicko-2 rating system and ranking (ELO-like system).
  13. Multi-game scores (a win is 1 point and a draw is 0.5).
  14. Ability to return to a game even after leaving the page.
  15. Real-time indicator of when the opponent disconnects/returns to the game.
  16. Responsive design for mobile (smaller board dimensions recommended, as it can be hard to tap the right cell in a small screen).
  17. Optional sound effect for moves.
  18. Two color themes (red/green and blue only), each with a dark mode.
  19. Adjustable board scaling to fit different screen sizes.
  20. Customizable tokens (the look of your piece).
  21. Settings are stored in cookies for convenience (username, time control, board dimensions, token, color theme, dark mode, ...).
  22. Visual highlight of the last move played on the board.
  23. Use ctrl+click to highlight cells without making a move.

Planned features

  • List ongoing public games in the lobby and allow to spectate them in real time.
  • Play against an AI.

Tools used

Frontend

  • React as the framework.
  • gh-pages module to host the client directly from this github repo (it uses the gh-pages branch).

Backend

  • Node.js and express for the server.
  • Socket.io for real-time two-way client-server communication.
  • MongoDB as the database.
  • Heroku to deploy the backend server with Git integration.
  • Kaffeine to keep the backend awake.

AI

  • C++ (in the future, the AI may be integrated with the website via the cpp -> llvm -> wasm -> js pipeline).

License

MIT