Thursday, August 4, 2011

A C# Implementation of Board Game: Balloon Cup

Balloon Cup is a 2-player board game published in 2003. The first time I played this game was in the summer of 2010. After I played this game a few times, I noticed that Balloon Cup involves a lot of planning, calculation, and evaluation, which makes this game very exciting as a strategy card game. Also the playing time of is not very long, because the rule is simple and the game setup is very easy. Usually, it takes only 20 minutes to finish a game, which is pretty short comparing with other board games. Since I am very interested in developing video game and I wish some day I can work in the game industry, I decide to implement this game as my first step.

Here is a description of Balloon Cup that I found over the Internet:

In Balloon Cup, the players compete in several short balloon flights (hops) to collect the colored cubes associated with each hop. Four landscape cards, two Plains alternating with two Mountains, are laid out and 1, 2, 3 or 4 cubes in assorted colors (gray, blue, green, yellow, red) are added. From a hand of 8 Balloon cards must try to pass each landscape by adding cards matching the colored blocks onto their side of table, although winds (and cunning) may occasionally cause them to play on their opponent’s side - a move that can really ruin the opponent’s plans.

High-valued balloons are played on the Mountains and low-valued balloons on the plains. Whoever is the better balloonist takes the cubes from the card, which is then flipped over and refilled with cubes. Mountains becomes Plains and vice-versa. 5 Trophy cards of value 3 to 7 are placed at the top of the cards. When a player has collected enough cubes of a given color, he earns the Trophy card for that color. Players may even trade 3 otherwise useless cubes for 1 they can use. The first player to earn 3 trophy cards is the winner!

To my understanding, a video console game should be formed by three parts: Graphics, Game System, and AI System. A successful console video game must have eye-pleasing graphics, an interesting game mechanism, and a challenging AI system. Therefore, how to develop those three parts are the biggest challenges in this project.

In video game development, graphics is the most important part of a game. It involves human computer interaction, art design, and maths calculation. In this project, I am able to find some art works that are originally used in the Balloon Cup board game, such as the cover of the Balloon Cup, the image of 45 cards, the image of 4 boards and the image of 5 trophies. I also found 5 small balloon icons which can be used as "the blocks" in the game. Therefore the only art design that I did is the card back. Although I don't need to spend too much time on the art design, I still need to design the game layout. In order to make the game interface as a player-friendly interface, I decide to draw the trophies, boards and player's hands as the original game setup. In this case, player can easily get all the information directly. Here are some screen shots of the game interface.

Game Main Menu
Game Option Menu
Game Interface

Game System
Because Balloon Cup is a turn based card game, the game system is very simple, which means no multi-threading needed in this game. The game starts with player's turn. The player picks a card from the hand and puts it on a board, either player's side or computer's side. Then the game will check if the board is ready to settle. If not, player's turn ends and computer will make its move with a simple animation. Then switch turn and game goes on until some one wins the game. If the board is ready to settle, a short animation will occur. The blocks on that board will fly to the winner's block bank. If either computer or player has enough blocks to exchange for a trophy, system will automatically assign the trophy to the winner of that trophy by printing the name of winner next to the trophy card. When either computer or player first gets three trophies, the game ends and the winner's name will pop-up. Here is a screen shot of the middle of a game.

AI System
A good console game must have a good AI system. If the AI is too simple, players will easily get bored, because there is no challenge. However, the AI cannot be "too hard" (if that is possible), because no one would like to always lose. In my opinion, AI system should have multiple levels that can satisfy different needs. All the AI levels should provide at least "some kind of challenges" to the players. Of course, a "normal" level AI probably won't be a challenge for an experienced player, but it can be a challenge for a new comer. Also the difference between each AI level should be noticeable, so that players can easily tell which level they are in. In this game, I have two AI levels, "normal" and "hard". The "normal" AI have basic concept of its position on each board and can make move according to its position and hand. The "hard" AI (still working on) have the concept of importance of the block, which means AI will set different priorities to different boards according to the blocks on the board. Hopefully the "hard" AI can be finished in this week.

Here is the Google Project Hosting site for this project. Anyone who is interested may download the source from the "download" page. It has an executable file "balloon2.exe" inside the "/bin/debug" folder for your quick try out.