{"id":24380677,"url":"https://github.com/ophiase/board-game-cpp","last_synced_at":"2025-12-27T10:03:24.815Z","repository":{"id":216686713,"uuid":"720180719","full_name":"Ophiase/Board-Game-CPP","owner":"Ophiase","description":"🕹️ C++ interface to play board games against bots or players.","archived":false,"fork":false,"pushed_at":"2024-05-24T23:19:18.000Z","size":61086,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-12T15:32:15.194Z","etag":null,"topics":["board-game","game-development"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ophiase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-17T18:56:38.000Z","updated_at":"2024-10-10T14:43:46.000Z","dependencies_parsed_at":"2025-01-19T08:37:54.844Z","dependency_job_id":null,"html_url":"https://github.com/Ophiase/Board-Game-CPP","commit_stats":null,"previous_names":["ophiase/board_game_cpp"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Ophiase/Board-Game-CPP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ophiase%2FBoard-Game-CPP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ophiase%2FBoard-Game-CPP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ophiase%2FBoard-Game-CPP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ophiase%2FBoard-Game-CPP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ophiase","download_url":"https://codeload.github.com/Ophiase/Board-Game-CPP/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ophiase%2FBoard-Game-CPP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28077395,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["board-game","game-development"],"created_at":"2025-01-19T08:27:46.493Z","updated_at":"2025-12-27T10:03:24.790Z","avatar_url":"https://github.com/Ophiase.png","language":"C++","readme":"# Board Game 🕹️\n\nSimple c++ interface to play board games against bots or players.\\\nGames supported :\n- **Loot** [(french tutorial for \"Butin\")](http://jeuxstrategieter.free.fr/Butin_complet.php)\n- **Checkers** [(french tutorial for \"Dames\")](https://infolib.re/storage/files/documents/jeux_de_societe/Les%20dames%20-%20R%C3%A8gle%20du%20jeu.pdf)\n- **BullTricker** [(french tutorial for \"BullTricker\")](http://www.bulltricker.com/fr/regle_simplifiee.html)\n\n## Table\n- Introduction\n    - [Demo](#demo)\n- Setup\n    - [Installation](#installation)\n    - [Run](#run)\n- Functionality\n    - [Features](#features)\n    - [Architecture](#architecture)\n- Future Development\n    - [Future Development](#future-development)\n\n## Demo\n\n### Loot\n- Select the number of real players and bots before the party\n    - \u003cimg height=200 src=\"resources/demo/loot_menu.png\"\u003e\n- Select a yellow pawn and then click on all the cases you want to jump to\n    - \u003cimg height=200 src=\"resources/demo/loot_begin.png\"\u003e\n- Game is finished when there is not any action left\n    - \u003cimg height=200 src=\"resources/demo/loot_end.png\"\u003e\n\n### Checkers\n\n- Choose if you want to play against a bot or a player \n    - \u003cimg height=100 src=\"resources/demo/checkers_menu.png\"\u003e\n- On each turn, the pieces that you can use are marked (in yellow)\n    - \u003cimg height=200 src=\"resources/demo/checkers_begin.png\"\u003e\n\n### BullTrickers\n\n- Choose if you want to play against bots or players\n- On each turn, the pieces that you can use are marked in (yellow)\n    - \u003cimg height=200 src=\"resources/demo/bulltricker_game.png\"\u003e\n    \n\n## Setup\n### Installation\nCompilation require g++ and sfml installed.\\\nTo install sfml :\n```bash\n# Ubuntu\nsudo apt-get update\nsudo apt-get install libsfml-dev\n# Fedora\nsudo dnf install SFML-devel\n# Arch linux\nsudo pacman -S sfml\n```\n\nCompilation\n```bash\nmake\n```\nFlags\n```bash\nmake RELEASE=1  # to disable debugging.\nmake MAC=1      # necessary on MAC OS\n```\n\n### Run\n\n```bash\n./run\n```\nor\n```bash\nmake run\n```\n\n## Features\n\n- Game Loot\n- Game Checkers\n- Game BullTricker\n- Bot\n    - RandomStrategy\n        - Pick a random action\n    - GreedyStrategy\n        - Pick an action the maximise the next turn score\n    - AlphaBetaStrategy\n        - Only in zero sum 1 vs 1 games (checkers and bulltricker)\n        - Maximise score over $n$ parties in the future\n            - Assume each player will try to minimize/maximize the player score\n\n## Architecture\n\nThis project has an MVC architecture.\n\n- #### Model :\n    - Each game have its own implementation of GameState class, Action class\n        - a GameState is composed of :\n            - a BoardType (inherits Board class)\n            - a list of scores\n            - its step\n            - current player id.\n        - ActionType :\n            - It requires to implement the following methods\n                - ``getActions`` : Get all the actions appliable on a given GameState.\n                    - Checkers queen can have a gigantic number of possible actions, so we restrict the actions given for capture\n                - ``hasRemainingActions`` : is there any action left ?\n                - ``isValid`` : Can the action be applied on a GameState ?\n                - ``apply`` : Apply the action onto a GameState.\n                - ``actionEquivalence`` : Do the two actions have the same effect over a given GameState?\n                \n- #### View :\n    - The launcher alternates between Menu and Games\n        - If Menu.focus is empty, it focuses the Menu\n        - If Menu.focus is non empty, it focuses the corresponding Game \n    - Each game have its own implementation of the Game class\n        - a Game class is a view for a specific game.\n- #### Controller :\n    - Each game have its own implementation of Manager class\n    - Manager acts as the controller :\n        - it initializes the first game state, and it checks if an action is valid before applying it \n\n## Future Development\n\n- GUI\n    - helper for Checkers\n    - arrows for Checkers\n- BOT\n    - MonteCarloStrategy\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fophiase%2Fboard-game-cpp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fophiase%2Fboard-game-cpp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fophiase%2Fboard-game-cpp/lists"}