COMP 303 Fall 2006

Project Overview

For the term project, we will design, implement, and test a complete version of the highly entertaining 2-person card game crib (also known as cribbage). 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

Cribbage is a two-person game played with a 52-card deck. There are different variants of the game. For this project we will implement six-card cribbage. Many websites provide the rules of cribbage. We will use this site as the semi-official version of the rules. I will briefly review the rules in class, but the earlier you learn the game the easier it will be to complete the project.

Our implementation of the game will pit a human player against the computer.

Software 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 compute various crib scores (something non trivial in crib). 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.

Figure 1. Software architecture for the project


The project will be broken down into four parts and three deliverables. All three deliverables will involve a significant amount of programming, including bonus requirements for students willing to go all the way. Information on each project part will be posted on the website during the term. Here's an overview of each part.

Part 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.

Part 1: Scoring and AI Modules

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

Part 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 integrate your deliverable 1. The deliverable for this part will include your implementation, test cases, and a design document.

Part 3: UI

In this part you will implement the Graphical User Interface for the game and integrate it with the game module. The deliverable for this part will be the complete application, 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 for more information).