SWEN20003 Object Oriented Software Development
Object Oriented Software Development
Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: THEend8_
SWEN20003 Object Oriented Software Development
Please read the complete specification before starting on the project, because there
are important instructions through to the end!
Overview
Welcome to the first project for SWEN20003, Semester 2, 2023. Across Project 1 and 2, you will
design and create a music arcade game in Java called ShadowDance (an adaptation of the original
90’s arcade game Dance Dance Revolution). In this project, you will create the first level of the
full game that you will complete in Project 2B. This is an individual project. You may discuss
it with other students, but all of the implementation must be your own work. By submitting the
project you declare that you understand the University’s policy on academic integrity and aware
of consequences of any infringement, including the use of artificial intelligence.
You may use any platform and tools you wish to develop the game, but we recommend using IntelliJ
IDEA for Java development as this is what we will support in class.
The purpose of this project is to:
• Give you experience working with an object-oriented programming language (Java),
• Introduce simple game programming concepts (2D graphics, input, simple calculations)
• Give you experience working with a simple external library (Bagel)
Extensions & late submissions: If you need an extension for the project, please complete the
Extension form in the Projects module on Canvas. Make sure you explain your situation with
some supporting documentation such as a medical certificate, academic adjustment plan, wedding
invitation, etc. You will receive an email saying if the extension was approved or if we need more
information.
If you submit late (either with or without an extension), please complete the Late form in the
Projects module on Canvas. For both forms, you need to be logged in using your university
account. Please do not email any of the teaching team regarding extensions or late submissions.
All of this is explained again in more detail at the end of this specification.
You must make at least 5 commits (excluding the Initial Submission commit) throughout the
development of the project, and they must have meaningful messages. This is also explained in
more detail at the end of the specification.
Game Overview
“The aim is simple : the player has to hit the corresponding musical notes that appear on screen
in different lanes on time to score points. Can you beat the target score to win the game?”
The game consists of three levels - Project 1 will only feature the first level. The notes will
descend from the top vertically in the 4 lanes. The player has to press the corresponding arrow key
when the note overlaps with the stationary note symbol at the bottom. The accuracy of how close
the note was to the stationary note when the key was pressed, will determine the points given.
There will be special hold notes that require the player to hold down the key. To win, the player
needs to beat the target score when all the notes have fallen. If the player’s score is lower, the
game ends.
Figure 1: Completed Project 1 Screenshot
2
SWEN20003 Object Oriented Software Development Project 1, 2023
The Game Engine
The Basic Academic Game Engine Library (Bagel) is a game engine that you will use to develop
your game. You can find the documentation for Bagel here.
Coordinates
Every coordinate on the screen is described by an (x, y) pair. (0, 0) represents the top-left of the
screen, and coordinates increase towards the bottom-right. Each of these coordinates is called a
pixel. The Bagel Point class encapsulates this.
Frames
Bagel will refresh the program’s logic at the same refresh rate as your monitor. Each time, the
screen will be cleared to a blank state and all of the graphics are drawn again. Each of these steps
is called a frame. Every time a frame is to be rendered, the update() method in ShadowDance is
called. It is in this method that you are expected to update the state of the game.
The refresh rate is now typically 120 times per second (Hz) but some devices might have a lower
rate of 60Hz. In this case, when your game is running, it may look different to the demo videos
as the constant values in this specification have been chosen for a refresh rate of 120Hz. For your
convenience, when writing and testing your code, you may change these values to make your game
playable (these changes are explained later). If you do change the values, remember to change
them back to the original specification values before submitting, as your code will be marked on
120Hz screens.
The Game Elements
Below is an outline of the different game elements you will need to implement.
Window and Background
The background (background.png) should be rendered on the screen and completely fill up your
window throughout the game. The default window size should be 1024 * 768 pixels. The background has already been implemented for you in the skeleton package.
Messages
All messages should be rendered with the font provided in the res folder (FSO8BITR.ttf), in size
64 (unless otherwise specified). All messages should be roughly centered both horizontally and
vertically (unless otherwise specified).