This is a description for the game Blockade that we might be making for a SIGMA trial session. This game is based on the original Blockade game, which can be downloaded at http://anarchy.c0ck.org/game/blockade. They have screenshots there as well, which is important since the game goes extremely fast on today's computers, and it might not be reasonable to actually try to download it and play it.
The basic idea of the game is based on the classic game of Snake. Each player (and multiple computer players) controls a snake on a grid. As the snake moves across the grid, a "tail" remains behind it that no player can go through. The objective of the game is to maneuver your snake in such a way that the opponent is blocked in to a smaller area than you and eventually runs out of space to play in. When a player runs into a cell in the grid that is already filled with a "tail", whether it is your own or someone else's, the player dies. Optionally, dead players' tails disappear slowly once the player has died. The goal is to be the last player left. Points are awarded between rounds, with the winner getting ten points, and other players getting less than that, based on their rank. When a player reaches 100 points, the game is over.
In addition to these rules, we will also want to allow for boards of different sizes, special cells in the grid, like cells that are already filled or allow a second pass through them, and team play.
The major components to the game are as follows:
- Create the Level data structure
- Create a method of reading in level files
- Create the game data structure, which includes:
- A constructor that takes in a list of players in the game
- Ability to create from a level description
- For each cell, stores whether or not it has been filled, and if so, by whom, and additionally, some way of organizing it so that you can remove dead players' trails in order, so something like a number indicating the order
- An Update() method that gets input from each of the players, and if enough time has elapsed, moves each of the players
- Checking to see if two players have tried to enter the same cell at the same time, or if players have tried to enter a filled cell.
- The Player class, which is the base class for all types of players including Xbox Controller players, Keyboard players, and AI players. The player class should also, additionally have an Update() method, which allows them an opportunity to read in input from a controller or do AI processing and return one of four directions for movement.
- An abstract class called GameRenderer that gives a definition for the method Draw(GameState).
- A simple 2D implementation of the GameRenderer class that draws the game on the screen.
- A menu system that has at least the following options:
- Play - starts the game
- Game Type: FFA and Team
- Choose Level
- Choose # Players
- Player Names and Join Game?
- In between rounds, show the current score and give option to quit or continue to next round
- How to Play - some basic instructions, like the paragraph at the top of this page
- Credits - credits for the game. Especially don't forget things like where the music came from, if someone else made it
- Quit - quits the game
- Play - starts the game
- Audio, including sound FX and background music. Possibly menu music, setup music, results music, and several types of in game music. SFX include movement, death, and possibly something when the game is starting, as well as UI beeps and stuff.
- A level editor would be nice.