System Overview

This application will implement a computer version of the board game Monopoly. This version will simulate
as much of the physical game as possible including some additional features.

Characteristics of the computer version of Monopoly will be:
Standard features:
  1. Graphical representation of the board, cards and pieces.
  2. Movement of pieces over the board
  3. Display of players, how much money they have, properties owned, houses
    and hotels owned
  4. Play of a complete game as according to the rules
  5. Implementation of the Community Chest and Chance cards
  6. Support for the standard number of players at a novice level

Additional features:
  1. Multiplayer Internet Monopoly (supporting the standard number of players, playing over the internet
  2. Multiplatform Internet Monopoly (supporting Linux and Windows, playing together)
  3. New Mexico State University version

The code itself will be written in Java, which will be advantageous due to its
Graphical User Interface capabilities.


Adaptation

The board, cards, game pieces, and money will be converted to digital images
that will correspond to the actual physical pieces. Information about the
pieces will be located in 'classes.' The information in the classes will be
changed and updated as events occur during play of the game.
The player will use a keyboard and mouse to interact with the game and make
decisions on their particular turn or as instructed by the system. At the
beginning of the game the player will choose a token and will be issued
starting money. The mouse will be used to roll the dice and perform various
other interactions with the game.


Arbitrary Aspects

Much of the game will be computerized so that the player will not have to be
responsible for tasks such as drawing a card, physically paying money to the
bank or other players, moving a game piece, holding property cards and
counting money. Also, the tokens will be moved automatically after the player
has rolled the dice. The dice will be represented by a random number
generator. The largest aspect of the game that will be automated will be the
role of the 'Banker.' The Banker will be represented by the system and will
do the following as needed:
  1. Automatically deduct funds from player's accounts as needed for such
    things such as fines, fees, money for property purchase and money for house
    and/or hotel purchase.
  2. Automatically add to player's accounts for salaries, refunds, bonuses,
    and prizes.
  3. Automatically deduct rent from one player's account and add it to the
    account of the player to whom it is owed.
  4. Automatically perform mortgages when a player decides he/she wishes to
    do so.
  5. Automatically declare a player bankrupt (when the player does not have
    enough money to pay either the bank or another player) and remove him/her from
    the game accordingly.


With the Banker's role automated, it will cut back on many responsibilities of
the player and the player will merely have to play the game and make decisions
as the game goes on. The player's accounts will be simplified because there will
not be a stack of each currency for them to count. Instead the money will be
automated and the player will only see a total amount of how much money they
possess (in currency only), and how much their net worth is including any properties.
Properties will be simplified in that the player will not have cards to keep
track of during the game. The system will show them a listing of which
properties they own and if they have any houses and/or hotel on those
properties. As mentioned earlier, the system will automatically take care of
rent paying to and from players, so the player does not need to notify another
player when he/she has landed on a property that is already owned.
Finally, the Community Chest and Chance cards will be automated so that when a
player lands on a space to draw a card, the system will show them the card and
will automatically follow the instructions on the card for the player.


Schedule

Part One: Initialization (Three weeks)

  1. (Board Group) Create a usable representation of the board, cards, houses, hotels, and tokens.
  2. (Networking Group) Make the board be accessed from different terminals.
  3. (Board Group) Create the player display.
  4. (Game Group)Create a working dice function (including additional instructions for rolling doubles).
  5. (Game Group)Set up the ?Bank? to perform the initial distribution of money.
  6. (Game Group/AI Group)Set up the initialization of the game:
    a. Token choices
    b. Allow players to choose a computer player
    c. Allow players to set the number of players for the game
    d. Allow the players to choose which type of game they wish to play
  7. (Networking Group) Work on the chat area of the game.
  8. (Game Group) Implement the different rules for the Short Game, Timed Game and Long Game.
  9. (Networking Group) Allow players from different computers to begin a game, make sure all players are
    represented over the network.
  10. (AI Group) Allow players to choose a computer player, and make sure it is represented properly among the
    other players.
  11. (Game Group/Board Group) Implement the actual 'Start' of the game and actually place the tokens on 'Go'
    and wait for the first player to roll the dice.
  12. (Game Group/AI Group) Implement the sequence of the game moving from player to player (including computer player).
  13. (Game Group/Board Group) Implement the beginning of a player's turn consisting of making decisions about trading
    property, buying houses or hotel, rolling the dice and moving the token to the corresponding place.
  14. (AI Group) Implement the beginning of the computer player's turn, which will look different from the human player's turn.

Part two: Functionality (Three weeks)

  1. (Board Group) Properties: Inputting names and checking for ownership.
  2. (Game group) Purchasing, mortgaging, charging rent
    -make sure the player accounts reflect the transactions properly.
  3. (AI Group) Implement computer player decisions for buying property, mortgaging, charging rent.
  4. (Networking Group) Allow different computers to be running the game at one time.
  5. (Game Group) Implement all non-property spaces of the game including taxes, 'Go to Jail' (this includes just visiting and
    the process for getting out of jail), passing 'Go'.
  6. (Board Group) Create the Community Chest and Chance cards.
  7. (Game Group) Implement the Community Chest and Chance cards.
  8. (AI Group) Make the Community Chest and Chance cards also work for the computer player.
  9. (Networking Group) Work on allowing the game to run on Linux and Windows.
  10. (Board Group) Input the railroads and utilities.
  11. (Game Group) Implement the railroads and utilities (including purchasing, calculating rent and paying rent).
  12. (AI Group) Make the railroads and utilities work for the computer player.
  13. (Game Group) Implement 'Bankruptcy': Includes removing a player from the game and either crediting their net worth
    to the bank or to another player.
  14. (Game Group) Implement Mortgage: Includes allowing a player to mortgage and un-mortgage property.
  15. (Game Group) Implement trading and selling among players.
  16. (AI Group) Make the bankruptcy, mortgage, trading and selling work for the computer player.

Part three: Final Phase-One to two weeks

  1. (All groups) Testing, testing and more testing!


Classes/Tasks

Board:
Attributes: skin, text

Space:
Attributes: position

Go:
Method: collect_200()

Go to Jail:
Method: move_to_jail()

Luxury Tax:
Method: pay_bank()

Income Tax:
Method: pay_10percent_or_200()

Jail:
Method: pay_50()

Free Parking:

Community Chance: (space)
Method: draw_top()

Chance: (space)
Method: draw_top()

Property:
Attributes: name, color, price, position, mortgage_value,
number_of_houses, number_of_hotels, mortgaged
Methods: rent()

Railroads
Attributes: position, mortgage
Method: rent()

Utilities
Attributes: position, mortgage
Method: rent()

Tokens/Players
Attributes: name, player_id, net_worth, money_worth, picture,
double_roll, in_jail, bankrupt, properties_owned
Methods: trade(), move(), buy_property(), roll(), mortgage(), decl_bankruptcy()

Bank:
Attributes: unowned_properties
Methods: initialization(), deal_deed(), issue_house_or_hotel(), auction()

Card Deck:
Methods: pull_card()

Community Chest and Chance:
Attributes: instruction, picture, index
Methods: Pay_bank(), receive_from_bank(), go_to_jail(), get_out_of_jail(),
move_somewhere(), pay_player(), receive_from_player()