CompSci 307
Fall 2022
Software Design and Implementation

Onboarding Project: Breakout Game, Part 3

This exercise is the final part using Breakout Game and is intended for you to practice creating abstractions, i.e., superclasses, and using them polymorphically, i.e., without worrying about the exact subclass implementation. Thus best way to think about abstractions is to focus on their active behavior, i.e., methods, rather than state, i.e., instance variables, so that the public methods do rely on different implementation details.

It will not be explicitly graded but, instead, serve as a starting point for us to see your coding strengths and weaknesses (and how well you follow directions). Thus, you will get the most out of this assignment by putting in a good faith effort.

Submitting Your Work

Continue to work in your provided GIT repository, breakout_NETID, hosted in the course's Gitlab group.

As your submission for this project, use GIT to add, commit, and push the following:

Your code is expected to follow the course coding conventions and be reasonably commented (full Javadoc comments are encouraged but not required yet).

Specifications

Individually, continue to work on your game of Breakout, refactoring your existing code to improve its design while creating abstractions to support as many of these new functionality features as you can:

The basic version of Breakout was designed by Steve Jobs and Steve Wozniak (the founders of Apple, Inc.) and it continues to have appeal because it easily supports complex variants, such as:

Study these for their ideas for functional variations, not their appearance or level of sophistication.

We strongly suggest you refactor the code, creating more methods and classes, before attempting to implement any of the new features.

GIT

Practice using GIT effectively using many, small, purposeful commits with good commit messages rather than just one or two large "kitchen sink" or "submit-only" commits.

Design Goals

Practice the following mindsets about code to help you acclimate you to the course's overall Design Goals:

We strongly recommend refactoring your code at least twice beyond getting it working, like making multiple drafts, to ensure your code is as readable as possible and that every line works together and shows your design intent.

Resources