C S Software Development Course Project

(COMP 303 SOFTWARE DEVELOPMENT - taught by Martin Robillard)

Project Overview

For the term project, we will design, implement, and test a complete version of the 5-card draw variant of poker. The goal of the project is to give you hands-on experience in developing a quality software product using advanced OOP features and state-of-the-art software engineering tools.

Application Domain

Poker is a gambling game played with a 52-card deck. There are numerous different variants of the game. For this project we will implement the simplest: five-card draw with four players.

This variant can be summarized as follows

  1. Each player pays the ante (a small sum of money to the pot)
  2. Each player is dealt a hand of five cards. Players hope to make the best hand. The strength of a hand is determined through very specific rules (see below).
  3. There is a round of bidding.
  4. Each player is allowed to exchange at most three cards from his hand.
  5. There is another round of bidding.
  6. There is a showdown among whoever is left in the game.
For more detailed explanations, see this website.

We will use this site as the official specification of the ranking of hands.

In addition, our implementation of the game will pit a human player against the computer.

Finally, don't worry if you have never played poker before. In-depth knowledge of poker strategies is not necessary to complete the project, and a summary of the basics of the game will be covered in class.

Project Architecture

Figure 1 shows the architecture for the project. Your design will be required to follow this architecture. The Scoring package will comprise all the functionality needed to automatically rank poker hands. The Game package will group all the classes necessary to maintain the status of the game and carry out actions related to the game. The AI package will implement the behavior of the computer player. Finally, the UI package will contain all the classes required to implement the user interface. An additional package containing useful utility classes will be provided (not shown).

Software architecture
Figure 1. Software architecture for the project


The project will follow a very simple development process consisting of four milestones. A milestone is a coherent set of deliverables that form a working (but incomplete) version of the product. Producing all four milestones will involve a significant amount of programming, including bonus requirements. Information on each project part will be posted on the website during the term. Here's an overview of each part.

Milestone 0: Project Setup

This part of the project will involve setting up your environment, installing the utility classes, studying their implementation, and experimenting with the unit testing framework. There is no deliverable associated with this part.

Milestone 1: Scoring Modules

The first part will involve the development and testing of the scoring module based on standard interfaces that will be provided. The deliverable for this part will include your implementation and test cases.

Milestone 2: Game Module

In this part you will implement a module to store and manage the state of the game. This part will require you to expand Milestone 1. The deliverable for this part will include your implementation, test cases, and a design document.

Milestone 3: AI Module

For this milestone you will expand the game module with the functionality required to support computer players. The deliverable for this part will include your implementation, test cases, and a design document.

Milestone 4: UI and Release

In this part you will implement the Graphical User Interface for the game and integrate it with the rest of the project. The deliverable for this part will be the complete software product, and a design document.


The project will be done in teams of two. Both team members will be jointly responsible for the entire project, and for reaching the learning objectives of the project. Students will be responsible for forming their own team.

Academic Integrity

Except for the source code explicitly provided on the course website, each team must author the entire code of their project. In particular, snippets of code cannot be reused from the other crib implementations you can easily find on the Internet.

McGill University values academic integrity. Therefore all students must understand the meaning and consequences of cheating, plagiarism and other academic offenses under the Code of Student Conduct and Disciplinary Procedures (see http://www.mcgill.ca/integrity for more information).