A lichess clone of SHOBU powered by Rust.
how 2 run:
-
Get rust
-
cargo run
-
???
-
Profit.
Keep in mind that this is just the backend you also need the frontend in order to run it: https://github.com/Kapsyloffer/RUSTBU-FE
- Render the boards on the frontend.
- Create a new game and get a sharable link to it
- Entering a link joins the game.
- Allow moves only if it's your turn.
- Write good UI.
- Determine which colour a player is.
- A Black player cannot move white rocks, and vice versa.
- Mirror the game for the white player. (i.e. white rocks on bottom)
- Render actual rock positions.
- Proper use of websockets/broadcasting.
- Move using clicks
- Move by dragging
- Render rocks on top of the board, independently, rather than in divs.
- Highlight boards where movement is possible. (homeboards on passive, boards of opposite colour on aggresssive)
- Locally change board layouts between standard and "dork" (See figure 1)
- Show possible movement path, like in lichess.
- Max 2 steps per move.
- Take back passive move locally.
- Render local rock positions. i.e. if we moved passive, show it.
- Aggressive move should have the same size and direction as passive.
- Prevent aggressive move on a board of the same colour as the passive move.
- Prevent aggressive move on a board of the same colour as the passive move.
- End the game when we have a winner.
- Rewrite websocket related functions to support broadcasting.
Figure 1:
Standard layout: "DORK" layout:
[B][W] [B][W]
------ ------
[B][W] [W][B]
- Passive Movement Phase.
- Prevent pushing any rocks in the passive move.
- Max 2 steps per move.
- Prevent the passive move from being on the opponent's homeboard.
- Prevent pushing any rocks in the passive move.
- Aggressive Movement Phase.
- Prevent pushing of same coloured rock.
- Prevent pushing of more than 2 rocks at once.
- Prevent aggressive move on a board of the same colour as the passive move.
- Prevent aggressive move that's different from the passive move.
- Prevent moves on boards of same colour.
- Check for winner.
- Change active player if both the passive and aggressive move are OK.
- Unit test movement rules.
- Handle websocket connection.
- Verify which player is making a move. Black should not move white rocks.
- Generate link on new game, and redirect.
- Update state for both players on board change. (TODO: Do properly...)
- Joining a game; lobby owner is black, next person to join is white.
- If a game is full you're spectator. (ish)
- Prevent the first move from being on the opponent's homeboard.
- No moves can be made until the game has started.
- End the game when we have a winner.
- Prevent duplicate URLs. (Rare issue, but still bad if it happens.)
- Broadcasting.
- Sound effects, like in Lichess/Chess.com
- Ability to draw arrows like in Lichess/Chess.com
- Lobby browser.
- Lobby/in-game chat.
- Option to select your color on lobby creation.
- Option to surrender.
- Option to offer draw.
- Option to ask for takeback.
- Movement History (+ Algebraic notation).
- Visual settings for boards.
- bo3, winner plays white next game (goes second).
- gamemodes: Different board sizes? bo3? House Rules?
- Game timer, with the rope burning to show time remaining.
- Return to lobby after the game is over.
- Account.
- ELO.
- Friends.
- Show a little flag next to name.
- Navigatable page.
- Themes for boards and pieces.
- SHOBU engine/AI.
- SHOBU engine/AI but good.
- Movement animations / Smooth movement.
- Allow aggressive moves first / Detect which of the two moves is aggressive.
- Make good.
Disclaimer: I do not own SHOBU in any way, shape, or form. I just find the game neat hence I'm doing this project.