12 — Implementing Tournament Observers—Bonus

Due Monday, November 12, midnight

Delivery Create a top-level folder named 12off/.

General You have a choice of two alternatives:
  • place a file called reworked.md into 12off that explains what you improved about your existing code base in response to having a week off. Use a Markdown unordered list to enumerate your changes on a per git commit basis

  • if you do not believe that your code needs to be improved, you can work on one or both of the following proposals to enhance the project functionality. If you choose this option, place a file called enhanced.md into 12off. The Markdown enumeration of one or two bullet items should state which enhancements you implemented.

    Place the Santorini-specific enhancements into the appropriate Santorini/ sub-directory and the xtm harness in your 12off folder.

We will check the Markdown files in 12off. We may or may not evaluate other aspects of what you did. If we do, all points will be bonus points.

Implementation Task: An Infinite Playing Field Your manager has a brand-new idea for making Santorinin more exciting. Instead of limiting the playing field to a 6 by 6 grid, let the players use a grid that extends infinitely both toward the southern and eastern direction.

Naturally, the lifting of this limitation does not make much sense for the beginning of the game. Hence, players remain obliged to initially place their workers on the 6 by 6 grid. However, after the game has started the players may use the full, infinite play ground.

Implementation Task: Tournament Observer In addition to observing the steps in individual games, a supervisor may wish to observe nothing but the outcome of encounters ("best of" series) within tournaments.

Modify your tournament manager so that its context can register an observer. The manager must inform an arbitrary number of observers about the outcome of each encounter in a tournament. The outcome information includes who won and, if applicable, whether the loser got kicked out and why.

Implement an observer component that renders its data representation as a JSON value to STDOUT.

Harness Produce a harness that runs a tournament via one manager, the player configuration from 11 — Implementing the Tournament Manager, and one tournament observer. Call it xtm. The harness consumes a configuration; it renders the encounter outcome as JSON values to STDOUT:
where EncounterOutcome is one of the following:
  • [String, String], which is the name of the winner followed by the loser;

  • [String, String, "irregular"], which is like the first alternative but signals that the losing player misbehaved.

Per piazza post @201, it is ambiguous whether the observer is to print a sequence for the entire tournament or a sequence per "best of" series. While I consider the former interpretation more natural, feel free to implement either interpretation.