COMP 303 Fall 2008

Milestone 2 - Game Engine and AI

Version 1.0 - 24 September 2008

Objectives

To provide an opportunity to gain additional experience and skills with:

Required Problem 1

Implement the model module (see the project overview). This module should be made accessible through a class model.GameEngine that will control the state and playing of the game for one human and one computer player. This state should include, for example, the cards played, the state of the deck, the score of each player, which player is the dealer, etc. This module should have no GUI, but should provide an API allowing clients to "virtually" play the game, i.e., change the state of the object to allow it to control the playing one complete game (which involves multiple hands). Example of methods in your GameEngine API would typically include newGame(), discard(...), etc.

It is your responsibility to design a module with an interface meeting the principles seen in class, and that will make it as convenient as possible to create the user interface.

Besides the main GameEngine class, you can create as many helper classes as necessary to solve the problem.

The only "hard" requirement for the GameEngine class is that is plays the role of the Subject in the Observer design pattern.

You must provide a set of unit tests that demonstrate and test your Game module. You should have unit tests for each public method of your GameEngine class (except trivial getters and setters). In addition, you must provide a driver program (i.e. a main method) that simulates playing a game using GameEngine. Note that the role for the Driver is not to allows humans to play interactively, but merely to demonstrate you GameEngine API in action. For example, Driver code would typically look like:

GameEngine lEngine = new GameEngine();
lEngine.addPlayer(...);
...
System.out.println("Begin new game");
lEngine.newGame();
...
lEngine.getHumanPlayer().discard(...);

and so on.

Required Problem 2

Implement the AI module (see the project overview). This module provides behavior for the computer player. This behavior provides a way for the game to automatically handle decisions that a human player would normally take (i.e., what card to discard, when to knock, etc). Isolate the decision-making behavior a computer player object should have in an interface, and implement it. Note that the behavior of the computer player should be honest, i.e., decisions should not be made using any information that could not be obtained by a human player.

In designing your AI module, you may want to consider the following points:

The design of the AI module should not allow the system to break the rules of the game or to cheat. Note that the "artificial intelligence" in computer players does not have to be "smart" or rely on advanced AI techniques. However, it should be reasonable and justifiable.

Bonus Problems

To make the game more exciting, and to obtain more points on your project. Only tackle bonus problems if you can complete the basic requirements. Bonus marks will be at the discretion of the markers based on the sophistication level of the bonus features, up to a maximum of 20% of the total mark for the milestone. The following are ideas for extension. Other ideas may be considered: please discuss them with the instructor.

Bonus Problem A - Gambling Mode

Support vegas-style playing, where players exchange money based on their score, and where it is possible to play multiple games in one session.

Bonus Problem B - Statistics

Accumulate stats about the performance of the player in persistent storage.

Bonus Problem C - Difficulty Levels

Support different computer players with different skill levels.

Bonus Problem D - Autoplay

Allow two computer players to play against each other.

Deliverables

  1. A zip file containing all your code and class files, including tests. Please submit through WebCT. See the schedule for the deadline.
  2. A UML state diagram modeling the GameEngine class. The diagram must be in jpeg format.
  3. A text file (ASCII) with maximum one page of text explaining your main design, addressing the design points mentioned in "Required Problem", and explaining the rational behind the AI "behavior" you have implemented.

Evaluation

This part will be marked out of 35 and will be worth 35% of the overall project grade. It will also be the backbone for your GUI so it is important that you do it well. In marking your project, we will looking for the following points: