A simple game of hexagonal tiles.
Note: This requires that you have the .NET 9 SDK installed on your machine.
- Clone the repository.
- Open the BadgerClan.sln file to load the solution.
- Select the "Client and Server" startup project

- Press F5 to run the game (or click the solid green "Start" button).
- A web browser will open to the BadgerClan lobby. Type in a name for your game and click the "Create New Game" button.
- You will also see a new terminal open (it may be minimized, check your taskbar). It should say something like "Welcome to the Sample BadgerClan Bot!"
- Go to "Running the game" below.
- Clone the repository
- Open the directory in VS Code
- In one terminal window, cd into the BadgerClan.Web directory (
cd BadgerClan.Web) and then rundotnet run - Open a browser to http://localhost:5172 Type in a name for your game and click the "Create New Game" button.
- In another terminal window, cd into the BadgerClan.Client directory (
cd BadgerClan.Client) and rundotnet run - Go to "Running the game" below.
- Copy the http://localhost address from the Client terminal window, and paste it into the "Custom" box back in the browser. Click the "Join Game" button.
- Now add a few of the other types of bots by selecting the bot type (e.g. Run & Gun) and clicking "Join Game"
- Once you have at least two bots joined in the game you can click the "Start Game" button.
- Notice that the terminal window with your Sample BadgerClan Bot is starting to spit out logs. That shows the server is talking to the client.

Don't forget to set the startup project to "Client and Server" (not BadgerClan.Client or BadgerClan.Web)
- Navigate to BadgerClan.Client and open its Program.cs file
- Look for the comment that says "Your code goes right here".
- The
requestobject gives you a list of Units with their locations. Your units are the ones whoseTeammatchesrequest.YourTeamIdvar myUnits = new List<Unit>(); foreach(var unit in request.Units) { if(unit.Team == request.YourTeamId) { myUnits.Add(unit); } }
Coordinate System: https://www.redblobgames.com/grids/hexagons/
- After some rounds of no units dieing, every Unit loses one hitpoint
- Count the Rounds
- If everyone dies as the same time (stalemate) tiebreakers are
- Keep track of when people die, to assign ranking
- Team with most kills
- Most units before final hitpoint loss
- For long games either
- shrink the board, push or kill those on the boundries
- slowly kill the units by attrition
- for Large games
- introduce fog of war
- allow for concurrent turns
- Track number of kills
- Units can act if they have at least 0.1 moves remaining
- Improve effectiveness of Medpacs, gameengine not giving enough medpacs
- Limit the number of players
- Ability to boot players from a game that hasn't started
- Limit the size of the client move list
- Game Log
- Ability for host to slow down the game, make tick interval variable
- Tournament system
- Randomize start postions
- Ability to increase board size for more players
- Turn off default bots for game day, players must host bots
- Hover over a team name to highlight thier units on the board
- Pass team name so that you can add in friendly teams
- Host can end the game from the game page, in cases of stalemate or false start
- Timeout the calls to clients
- Don't make calls to dead teams
- Ability for the host to restart the game with the same players
- Add a game leader board
- Delete the weather and counter page
- Second Leaderboard with number of kills
- If you click the join button after start, the UI is odd
- Validate the client endpoint with a request/response
- Limit the characters for name and urls
- Websocket occasionally disconnects from server
- Units can be placed off the board, if there are lots of units
- If there are multiple games created but not started, the radio buttons don't work right
- Game does not declare the correct winner
- Create game component not properly listening to game state change, specifically if another person adds a new team
- Only the host should have the start game button
- A bad response from the client crashes causes an exception that stops the server
- Review GameEngine.ProcessTurn(), Attack does not have the same rounding benefit as Walk, is that intentional?
- Example tutorial for determining boundaries
- Example tutorial for moving around
- Example tutorial for identifying nearest enemies
- Example tutorial for a sample bot
- Rename Unit.Moves to ActionsRemainingThisTurn (or something similar)
- Rename AttackCount to ActionsCostPerAttack (or something similar)

