Due date: 3/31 : 11PM
Objective: (1) to implement changes to the rules of the game and
the mechanism of conducting the game via software (2) to design a
communication protocol for a distributed version of Ingenious
Playing Ingenious: The original Ingenious is played
according to slightly different rules than we have implemented so
far. Also, people tend to interpret the rules with slightly different
actions than our software version. It is time to catch up a bit.
Task 1: An Ingenious player may re-rack at the
end of his turn if his rack (hand) of tiles does not contain any of his
lowest-scoring colors. Re-racking assumes that the administrator has six
tiles left, and the player still has six tiles. The player pulls six new
tiles from the administrator's bag of tiles and then deposits his own six
tiles into the bag.
Modify your code base to accommodate the re-racking rule.
While reracking is optional and you don't have to modify your player
software, your game framework must allow all third-party players to rerack
Task 2: When people play Ingenious, all players know
about each other and see which tiles have been placed where instantaneously.
Design and implement a protocol that informs all players of the names of
the other participants before the administrator runs a complete
Also design and implement a protocol that informs all players of the tile
placements a player executed during his turn. That is, after a player
completes a turn, the administrator informs all other players of the tile
placements of this turn. This provides the players with enough information
to compute every participant's score.
Task 3: When people play Ingenious and they have to
kick out a cheating player, they undo the tile placements of his bad
Modify your administrator so that it cancels tile placements if a player
performs any illegal action during his turn.
Playing Ingenious on a distributed network:
Your company wishes to sell a framework for running software
competitions. Participants will write player modules that may query human
players and/or use an AI to play turns. They will write components that
run on their own local computers and communicate with your administrator
Task 4: Design and specify a communication protocol
for implementing a distributed version of Ingenious. The specification
should come with detailed interaction diagrams that cover all
communication scenarios and typed textual specifications of XML messages
that must flow back and forth per scenario.
Base your remote-interaction protocol on Ingenious as modified in tasks 1
Deliverables: Your SVN directory must contain a
subdirectory labeled "11" with the following pieces:
Source/ ... source files for revised implementation ...
xbuild ... builds an executable ...
xrun ... runs a complete game ...
Protocol/protocol.txt ... a rigorous specification of XML diagrams
Protocol/*.* ... hand-drawn interaction diagrams ...
xrun script sets up a game for four AI players
and then runs the game to completion. It reports to STDOUT the final
ranking of the players.