CPSC 329 Software Development Fall 2026

CPSC 329 Project P1 — Hedgehogs Variants

In this (mostly) group project, you and a partner will extend the Hedgehogs in a Hurry game from project P0. This project has two parts:

Part B will be released after lab 6 on Tuesday 10/6.


Logistics and Due Dates



Part A

In Part A, you'll add reproducible dice rolls to the game, which is handy for testing. Read through this whole part (sections marked with "[A]" in the heading) to get an overview of what you'll be doing, then work through the five tasks in the Tasks section in order.


[A] Functionality Specification

Reproducible Dice Rolls

It can be useful for testing to be able to replay the same sequence of turns. Since the rest of the game is deterministic, this only requires being able to repeat the same sequence of dice rolls: with the same rolls and the same player input, the game plays out the same way.

Computers typically do not generate truly random numbers; instead a pseudorandom number generator produces a sequence of numbers that appears random but is completely determined by a starting value called the seed. Two generators created with the same seed produce the same sequence of numbers. In Java, new Random(seed) creates a generator with the specified seed.

While the same seed ensures the same sequence of values, ensuring the same sequence of dice rolls requires a few additional things:

If these conditions hold, a game can be replayed exactly by starting it with the same number of players, the same dice choice, and the same sequence of player moves.

Three dice roll options should be supported:

There's no way to find out a Random object's seed once it has been constructed, so for random mode it is necessary to generate a seed first and then create the dice generator with that seed. An option here is to create a Random object with the default constructor and use that to generate a random value for the seed. Create a new Random object with the seed to use for dice rolls. Usability suggestion: seeds that are at most 7-8 digits long are much easier to read and type, so consider limiting the range of generated seeds.


[A] Tasks

Do these tasks in order.

A0: Setup

This project starts with each partner working with the other's codebase before settling on one to continue with for the rest of the project.

Each partner, in your own P0 repository:

Each partner, in your partner's P0 repository:

As a team:

A1: Seeded Dice

This is an individual task — no pair programming! You may ask your partner questions about their code if there is something confusing, but not otherwise work together on this part.

Add the random and chosen seed options to your partner's P0 codebase (not your own!). To do this:

Note that all A1 deliverables (other than the initial change impact report submitted on Canvas) go into your partner's repository.

A2: Code Review

This is an individual task.

Review your partner's P0 codebase (including the seeded dice feature you just added). To do this:

A3: Choosing a Codebase and Responding to the Code Review

This is a team task.

The rest of these steps should be taken in the chosen codebase. Note: don't delete the other repository even though it won't be extended farther! It is an essential record of work from project P0 and tasks A1-A2.

Plan and split the work identified in the code review: (see Planning and Splitting Work in the Team Process section)

Now do the work:

A4: Scripted Dice

This is a team task.

Add the dice script option to the chosen codebase. To do this:


[A] Requirements

These are the end results your Part A work is assessed against (see Assessment). Team code is assessed according to ownership.

Program Requirements

For the chosen codebase:

For the other codebase:

Code Requirements

For the chosen codebase:

For the other codebase:

Process Requirements

Follow the steps in each task and the practices in the Team Process section.



Part B

Part B will be added after lab 6 on Tuesday 10/6.



Team Process

These practices apply to all team tasks in both parts; the Version Control and Test Early practices also apply to A1.

Team Kickoff

As part of A0, discuss the following and record notes in a shared document in Google Docs (or similar). Once you've chosen a codebase to work with in A3, move the document to the file docs/team-kickoff.txt.

Meetings and Team Log

Communication and Shared Records

Planning and Splitting Work

Most development in a team project happens independently and the goal in dividing up tasks between partners is a fair split.

Steps in the planning process:

Effort Estimation

When estimating a task's size, include the time to write its tests. As an approximate guide:

A task bigger than large must be split into smaller tasks. If you are unsure how to decide between two sizes, choose the larger — uncertainty about details of the task is itself a cost since time spent figuring out what to do is part of the task.

When doing effort estimation for a set of issues:

The comparison of independent estimates is a key step — the goal of effort estimation is a fair split of work, but just as important is identifying misunderstandings early — if two people give very different estimates for the same task, it is likely that they are picturing different things and that's something to reconcile sooner rather than later.

Ownership

Cooperative Programming

Version Control

Follow the GitHub Flow workflow:

Pull Request Reviews

Pull request reviews will be part of Part B. Coming soon!

Test Early

Testing should be thought of from the beginning:


Deliverables and Handin

Deliverables

Your final code is only part of what is assessed. The list below is for reference — each item is created at a specific point as directed in each task's steps above and together they are a record of your process, not just the end result. Process is a big part of this project! Your commit history, handin tags, and Canvas submissions all provide timestamps to document process.

A0 (in your own repository):

A1 (individual, in your partner's repository unless noted):

A2 (individual, in your partner's repository):

A3 (team, in the chosen repository):

A4 (team, in the chosen repository):

Part B deliverables coming soon!

Handin

Most of the handin happens along the way, through the tags and Canvas submissions listed above. To finish:


Assessment

The course projects together account for 50% of your final grade in this course. There are two distinct components to the project grade:

In addition, teamwork is part of the course engagement grade. Teamwork conduct is assessed through a structured peer evaluation at the end of the project. Your team log and pull request history are used to corroborate the peer evaluations.