• Software Engineering Project – Forbidden Island
•
Objective
You are required to design and implement the Forbidden Island game. Objective of the game is to work cooperatively with the other players to keep Forbidden Island from sinking, in order to buy enough time to capture its four treasures. Once you have captured them, you must make it to Fools’ Landing and escape by helicopter to win.
Game Components
• 4 Treasures: The Earth Stone, The Statue of the Wind, The Crystal of Fire, and The Ocean’s Chalice.
• 24 Island Tiles (see Figure 1). Each Island tile has 2 sides: unflooded side and a “flooded” (blue and white). For example, Figure 2a and Figure 2b, show respectively the unflooded and the flooded sides of tile “Fools’ Landing”. Some of the Island tiles are associated with the 4 treasures. More precisely 2 Island tiles are associated with each treasure (see Figure 3): the Temple of the Moon and the Temple of the Sun are associated with the Earth Stone; the Whispering Garden and the Howling Garden are associated with The Statue of the Wind; the Cave of Embers and the Cave of Shadows are associated with the Crystal of Fire; the Coral Palace and the Tidal Palace are associated with The Ocean’s Chalice.
• 4 Pawns each of them should be associated with a player
• Treasure Deck: contains 28 cards in total. 20 Treasure cards are associated with the treasures (5 cards for each treasure); 3 Helicopter Lift cards; 2 Sandbags cards; and 3 Water Rise cards.
• Flood Deck: contains 24 cards, each of them corresponding to an Island Tile.
• Water Meter: Measures the level of the water in the island, which can range from 1 to 5.
The number of players should range from 2 to 4. Each Player can have a role: Engineer, Explorer, Diver, Pilot, Messenger, Navigator. Depending on his/her role, a player’s pawn will be placed initially on a specific Island tile. The Engineer will be placed on Bronze Gate, the Explorer will be placed on Copper Gate, the Diver will be placed on Iron Gate, the Pilot will be placed on Fools’ Landing, the Messenger will be placed on Silver Gate, and the Navigator will be placed on Gold Gate.
Game Setup
• Create Forbidden Island: Shuffle the Island tiles and place them as shown in Figure 1, with the unflooded side up. Your pawns will move on each of the tiles like a game board.
Figure 1. Island tiles
Figure 2a. Fools’ Landing (Unflooded side) Figure 2b. Fools’ Landing (Flooded side)
Figure 3. The Island tiles where the treasures can be collected.
• The Island Starts to Sink: Shuffle the Flood Deck and draw the top 6 cards. For each card drawn, flip the corresponding island tile over its “flooded” side. Place the card drawn in the Flood Discard pile.
• Assign a role to each player: Randomly assign to each player one of the following roles: Explorer, Diver, Pilot, Engineer, Messenger and Navigator.
• Hand Out Treasure Cards: Shuffle the Treasure Deck and assign 2 cards to each player. If anyone gets the Waters Rise cards, you should put it back in the Treasure Deck and assign another card.
• Set the Water Level: Set the Water meter to 1 or to a higher level for a more difficult game.
The Game
Each player in turn should perform the following three things in order:
• Take up to 3 Actions (could also be 0, 1, or 2)
• Draw 2 cards from the Treasure Deck
• Draw a number of Flood cards equal to the Water level
Take up to 3 Actions
You can choose among the following actions: Move, Shore Up, Give a Treasure Card and Capture a Treasure.
• Move: You may, for 1 or more actions, move your pawn to an adjacent Island tile: either up, down, left, or right, but never diagonally. You may move onto a flooded tile. Note that although the original game allows movement exceptions depending on a player’s role, you won’t be required to implement it in this version of the game.
• Shore Up: You may, for 1 or more actions, shore up any adjacent Island tile (up, down, left, right), or the Island tile your pawn is on. This means you can put back the tile to its normal side. Note that the Engineer may shore up 2 tiles for 1 action.
• Give a Treasure Card: You may give 1 or more of your treasure cards to another player if both of your pawns are on the same island tile. It costs 1 action for each treasure card. If a player is a Messenger, s/he may give cards without having to be on the same tile.
• Capture A Treasure: You may, for 1 action, capture a treasure by discarding 4 matching Treasure cards from your hand if your pawn is on an island tile where the same treasure can be collected. For example, the Earth Stone can only be collected if a player is on the Temple of the Moon and the Temple of the Sun. Note that you may collect a treasure even on a flooded tile.
Draw 2 cards from the Treasure Deck
If a player draws a treasure card, s/he can keep it or decide to give it to another player, if possible.
• If a Waters Rise card is drawn, increment the water level of 1 and place the cards in the Flood Discard back in the Flood Deck and shuffle it.
• If a Helicopter Lift or a Sandbag card are drawn, these cards can be played at any time during the game. The Helicopter Lift card allows a player to move one or more players to a specific island tile or to lift the whole team off Fools’ Landing for the win. The Sandbag card allows a player to shore up any tile on the island.
Each player can only hold at most 5 cards from the treasure deck. If it happens that a player has 6 cards s/he should remove one of them and place it in the treasure discard pile.
When the last card of the treasure deck is drawn, immediately shuffle the Treasure discard pile and turn it over to form a new Treasure Deck.
Draw Flood Cards
The player should draw a number of cards from the Flood Deck that is equal to the current water meter level. For each card that is drawn, find the matching Island tile and do one of the following:
• If the matching tile is unflooded (i.e., showing the normal side), flip it to its flooded side
• If the matching tile is already flooded, you will have to remove this tile from the game.
After the flood cards are drawn they need to be placed in the Flood discard pile.
Pawns on Flooded Tiles
If a player pawn is on a tile that becomes flooded, nothing really happens and the pawn can still stay on the tile.
If a player pawn is on a tile that must be removed, s/he must move to an adjacent tile (up, down, left, right). This can also be a flooded tile. If there are no tiles where a player can swim all the players lose the game and the game ends.
Exceptions: The diver may swim to the nearest tile. The Explorer may swim diagonally. The pilot may fly to any tile.
If the Flood Deck runs out, immediately shuffle the cards that are discarded in the Flood discard pile and place them in the Flood Deck.
End of The Game
Winning the game: Once you have collected all four treasures, everyone must move their pawns to the Fools’ Landing tile. Then one player must discard a Helicopter lift card to lift the whole team off Fools’ Landing for the win. You can take a Helicopter lift even if Fools’ landing is flooded.
Losing the game: There are 4 possible ways to lose the game:
• If both Temples, Caves, Palaces, or Garden tiles, where the treasures can be collected, sink before the treasures are collected.
• If Fools’ Landing tile sinks.
• If any player is on an Island tile that sinks and cannot move to another tile.
• If the water level reaches 5
Evaluation Criteria
The project will be evaluated along the following criteria:
• Clean design (30%)
• Game components are implemented appropriately, i.e. separate classes are defined to create different game components.
• Is the project well structured in classes and modules? Each class should perform a small set of related functionalities (No big classes, long methods)
• Are interfaces defined and used appropriately?(Interfaces must be created for classes showing similar behaviour but not extending the same superclass)
• Design patterns (e.g., Singleton, Facade) must be used when necessary
• Functionality (50%)
• The functional requirements of the game is implemented correctly
• Teamwork (10%)
• The distribution of load between teammates is appropriate
• Distributed version repository (Git) is used appropriately (commits are performed by both team members frequently)
• Testing (10%)
• Several and meaningful test cases are implemented to test the main project functionalities.