CPSC 329 Software Development Fall 2026

CPSC 329 Project P1 — Hedgehog 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.

Coming soon!

A3: Choosing a Codebase and Refactoring

This is a team task.

Coming soon!

A4: Dice Scripts

This is a team task.

Coming soon!


[A] Requirements

(the end results for your part A code) Coming soon!



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.

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.

Meetings and Team Log

Communication and Shared Records

Planning: Effort Estimation and Splitting Work

When a team task is split between partners, plan it using SML effort estimation. The goal is a fair split, but just as important is to identify misunderstandings early — if two people give very different estimates for the same task, it is likely that they are picturing different things.

Each split team task has its own plan, consisting of:

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

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 is itself a cost, as time spent figuring out what to do is part of the task. As a (very) rough guide, small tasks shouldn't take more than an hour and medium tasks shouldn't take more than 1-3 hours.

Steps in the planning process:

For each plan, commit a short summary to docs/ (the task instructions give the filename). Refer to tasks by issue number rather than repeating them. The summary contains:

Ownership, Pair Programming, and Swarming

Version Control

Follow the GitHub Flow workflow:

Pull Requests and Reviews

Coming soon!


Deliverables and Handin

Hand in all of the following — each is an essential part of the assessment for this project.

Coming soon!


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.