A Game of Shoot ’em up

77 views 9:41 am 0 Comments March 28, 2023

Assignment 3 – A Game of Shoot ’em up
Total Points: 34
(accounting for 10% of your final grade)
Assignment Summary
In this assignment, you will create your own game from 2 custom classes and 3 subclasses. You
will practice the concepts of
methods, parameters, arguments, if else statements, for loops,
ArrayLists, PVector, object, inheritance and polymorphism.
The basic game must have this rough form:
– The human user controls a Player character (aka avatar) using the keys on the keyboard
– There are two types of “target/enemy” objects onscreen. The player’s objective is to fire some kind
of projectile at the targets/enemies. The types of targets differ in how many times the player needs
to hit them with the projectile before they are removed from the game.
Learning objectives
By the end of this assignment, you will have earned the following skills:
a) Create a subclass that extends a general class, so that you can create new functionality by
building on existing functionality you have already written
b) Use method overriding in your subclass to allow the subclass to implement some methods
differently than its parent
c) Detect collisions between different objects in your application
d) Enable users to control the onscreen objects using the keyboard
Also with this assignment, you have the opportunity to:
a) Explore different kinds of
game mechanics using a simple game base
b) Begin developing your programmer-intuitions about how to efficiently design and organize the
coding logic of your applications to facilitate
extension and iterative development
Assignment (30 points)
Because the overall purpose of this assignment is to start you the process of using OOP concepts and
techniques to design and implement your program, we’ve imposed a lot of requirements on how you need
to create the game.
I have described each of these requirements in the table below. Be sure to read
them very carefully and use them to design and implement your various classes and methods!
Application Requirements: 4 points
Visual collision between enemies and player (and the player projectile) must be done accurately.
-1 If a player projectile damages the enemy without reaching it visually, or does not damage after
reaching it. The same with the player when hit the enemy.
Visual collision between the boss and player (and their projectile) must be done accurately.
-1 If player or boss projectiles damages their target without reaching it visually, or does not
damage after reaching it. The same with the player when hit the boss.
When enemies or boss hit the player, player must lose one health for each collision.
-1 If enemies or boss reduce the player’s health continually as long as they are in contact with the
player.

Each of the Player, Basic Enemy, Boss Enemy, and Projectiles objects must be displayed on the
screen to get credit
-1 application requirement point + minus half of the coding requirement points (see the table
below) if any of the objects above is not displayed
Coding Requirements: 20 points

A Character
superclass
Requirement
points: 3
A Player
subclass
Requirement
points: 5
A “Basic
Enemy
” subclass
Requirement
points: 3
A “Boss Enemy
subclass
Requirement
points: 4
A Projectile
class
Requirement
points: 3
Your Main
Sketch
Requirement
points: 2
-at least five fields for:
position (PVector)
velocity (PVector)
health
width
height
-.25 for any missing field.
-a moveCharacter method
that moves the Character,
using its velocity and
position fields
-.5 if you don’t have this
method in Character or if
you don’t use the
Character fields.
-an accelerate method that
changes the Character’s
velocity using an
accelerator (PVector)
-.5 if you don’t have this
method in Character or if
you don’t change the
Character’s velocity
using an accelerator
(PVector)
-a “dummy”
drawCharacter method
that just draws a
placeholder shape, which
will be overridden by
subclasses
-.5 is drawCharacter
method missing from
Character
-a hitCharacter method
that detects when two
Characters have collided:
has a single parameter
of type Character
returns a boolean
indicating whether or
not the two Characters
collided.
-.25 parameter has wrong
type
-.25 method doesn’t
return a boolean
-.5 method doesn’t work
when the parameter
Character has collided
with
this Character.
-a decreaseHealth method
that decreases the health of
the Character
has a single parameter
of type int,
representing the
extends the
Character class
-1 Player isn’t a
subclass of
Character or
redefines fields of
superclass
-human user can
move the Character
using
four keys
(either WASD or the
arrow keys)
-.75 Player doesn’t
move by keypress
-the player character
can move freely
through the screen,
horizontally,
vertically, or
diagonally
-.5 Player only
moves in one
drection at a time
– can fire and keep
track of projectile
objects
Player uses a
typed ArrayList
to store its
projectile
objects.
-.5 ArrayList to
track projectiles
doesn’t exist OR is
defined outside the
Player class
-player class has a
method,
checkProjectiles,
which iterates
through each
projectile object in
its projectile list and
checks against each
enemy to see if it
hits the enemy. If the
projectile hit the
enemy, the player
class damages the
enemy. In addition,
the projectiles should
check whether they
hit the boss and
damage the boss if
so
use a nested for-
extends the Character
class
-1 Enemy isn’t a
subclass of Character
or redefines fields of
superclass
-must NOT FIRE
projectiles
.5 enemy fires
projectiles
-player takes damage if
they collide with the
basic enemy
-.5 any logic error that
prevents this from
occurring.
-player needs to fire
between
2-3 projectiles
at the basic enemy and
hit it before it “dies”
(has 0 health)
-.5 basic enemies die
after one hit
-when basic enemy
health is 0, it appears
dead/captured/different
in some way for
1
second
before it is
removed from the
game.
-.5 dies instantly or
doesn’t change
appearance during
pre-death period
-basic enemy overrides
Character update
method so that it checks
whether it collides with
the player and damages
the player if so.
-.5 collisions with
player checked
anywhere other than
in enemy’s update
method or not at all
-basic enemy overrides
Character draw method.
-.5 no overridden
draw method
* Total deduction for
Basic Enemy class
Requirements
caps at
3 pts even if the add
up goes over it
extends the Basic Enemy
class
-1 Boss isn’t a subclass of
Basic Enemy class or
redefines fields of
superclass (those of either
Basic Enemy or
Character)
-can fire and keeps track of
projectile objects in a typed
ArrayList
The Boss projectiles
are either the same
class as the Player’s
Projectiles OR they are
a subclass of Projectile
that extends the
functionality in some
way.
-.5 ArrayList to track
projectiles doesn’t exist
OR is defined outside the
Boss Enemy class
-.5 Boss projectiles look
identical to Player’s ones
-Boss has a method,
checkProjectiles, which
through each projectile
object in its projectile list
and uses the Projectile’s hit
method to
check whether
it hits the PLAYER
only
and damage the player if so
-.5 checks collisions
against anything other
than Player (i.e. with
Basic Enemies)
-0.5 Player isn’t damaged
by the Boss bullets
-player takes damage if
they collide with the boss
enemy
-.5 any logic error that
prevents this from
occurring.
-player needs to fire 6 to 8
projectiles
at the boss
enemy and hit it before
basic enemy “dies” (has 0
health)
-.5 dies after fewer than 6-
8 hits
-when boss enemy health is
0, it appears
dead/captured/different in
some way for 3
seconds
before it is removed from
-Projectile is a
standalone class.
-1 Projectile is a
subclass of
Character
-has fields for
position and
velocity
-has a
constructor
with a parameter
that represents
initial velocity
-.25 for any
missing field.
a move method
that moves the
projectile
-.5 method missing
-a checkWalls
method that checks
if the projectile has
gone out of the
screen.
-.5 method missing
-an update method
that calls the
move,
draw and
checkWalls
methods.
-projectiles that go
out of the screen
should be removed
from the list that
holds it.
-.5 update method
missing or fails to
invoke move,
checkWalls and
draw methods
-.5 projectiles
aren’t removed
from list when
they go offscreen
-a method that
draws the projectile
-.5 missing method
-a hit method that
checks if this
projectile hit a
Character
has a single
parameter,
typed Character
returns a
boolean
indicating
whether or not
-keep track of basic
enemies in a typed
ArrayList.
-.5 basic enemies
not in a typed
ArrayList
-keep track of
player’s score
(related somehow to
the number of
enemies killed) in a
global int variable or
define a class for
score
-display the score
somewhere on the
screen
-.5 score isn’t
tracked at all
-.5 score is tracked
but doesn’t appear
on screen
-there is only one
boss
.
Store the boss
in
the same
ArrayList for
the basic
enemies along
the line of
inclusion
polymorphism.
-1 boss stored
in a single
variable or
inside its own
ArrayList
instead of the
same
ArrayList for
basic enemies

 

damage.
-.5 method missing from
Character class.
-.25 missing parameter
-.25 body of method
doesn’t use parameter to
decrement health field
-a checkWalls method that
checks whether the
character has gone off the
screen boundaries and
compensates in some way
(i.e., reappear on opposite
side, bounce/reverse
velocity)
-.5 method missing from
Character class.
-.25 any error in collision
logic, including use of
wrong type of collision
(bounding box vs radial)
or failure to factor
Character’s dimensions
into the calculation of the
bounds check
-has an update method that
calls the move, and check
walls
-.5 method missing from
Character class.
-.25 update method body
doesn’t invoke move,
checkWalls
* Total deduction for
Character class
Requirements
caps at 3
pts
even if the add-up
goes over it
loop to check the
projectiles
against eh basic
enemies
call the
projectile’s hit
method to check
whether the
projectile hit the
enemy.
-.75 Player can’t
shoot projectiles at
all or projectiles
don’t damage the
enemies when they
hit
-.5 No nested for
loop
-.25 check against
the boss is also
inside of the nested
for loop (instead of
just happening
once for each
projectile)
-player overrides
Character update
method so that it
calls
checkProjectiles.
-.25 logic to check
the projectiles isn’t
inside a method
called
checkProjectiles
-.25 method called
from anywhere
other than an
overriden update
-player overrides
Character’s
drawCharacter
method.
-.5 no overriden
draw method
* Total deduction
for Player class
Requirements
caps
at 5 pts even if the
add-up goes over it
the game.
-.5 dies instantly or
doesn’t change
appearance during pre
death period
-boss enemy overrides
Basic Enemy’s update
method so that it:
checks whether it
collides with the
player and damages
the player if so.
calls the
checkProjectiles
method
-.5 code that checks for
collision with Player or
checks projectiles against
Player is defined
ANYWHERE OTHER
THAN Boss’ overridden
update method
-boss enemy overrides
Character draw method.
-.5 no overriden draw
method
* Total deduction for Boss
Enemy class
Requirements
caps at 4
pts
even if the add-up
goes over it
the projectile hit
a Character
-.5 method isn’t
defined in
Projectile class
-.5 method
parameter has any
type other than
Character
-A projectle that
hits a Character are
removed from the
list that holds it.
-.5 any logic error
that prevents this
from occurring
* Total deduction
for Projectile class
Requirements
caps at 3 pts even
if the add-up goes
over it

ECO: 6 points: for the effort, creativity and originality you put into the game. Here are
some ways to earn ECO points (
Please note that total ECO points cap at 6 even if the add-up
goes over it
). Please note:
Assignment 3 leaves more room for creativity than our previous two assignments. If you have an
idea for how to get ECO points that is NOT on this list, please email your TA or instuctor to
check whether it counts
Everyone is suggested to put a text file (called README) into you assignment file submission
that describes the parts of your code that you think should count for ECO points.
Character animations:
-Use push/pop and translate to allow for different parts of your characters to move independently.
+.5 simple animation involving one part, similar between different characters (Player, Enemy, Boss).
+1 more complex animations involving multiple parts. Bosses, enemies and Players animated in distinct
ways

+1.5 animations tied somehow to the states of the characters. E.g. when enemies start to lose health they
begin to walk as though they are slipping or stumbling.
Gameplay mechanics:
-Implement some “difficulty scaling”:
+.5 enemies move faster as player score increases
+1 enemies develop an ability to use a “shield” (randomly sometimes the enemies can put up a wall to
block a bullet, or dodge a bullet; the probability of this occurring increases with player’s score)
+1.5 program your basic enemies so that they attack in “waves”, which each successive wave involving
enemies that move faster, more intelligently (i.e.,
move intelligently toward the direction of the player)
+.5 make the boss appear only after the basic enemies are dead
+1 boss entry follows a short “cutscene” during which the boss “makes his entrance” or even “says
something” using a textbox
Narrative and Flavour:
-Use screens that have text or text boxes, speech bubbles, etc., to provide a narrative for the game
+.5 start and end screens have some basic “flavour text”
+1 you include “text boxes” that pop up and show dialogue of the enemies, boss, players, or incidental
information (like in the old Star Fox games)
+1 you actually make some kind of “cut scene” (or cut slideshow) involving a few screens, which have
not just text but also images to describe what is happening
Gameplay depth and complexity:
-Implement some powerups or other pickup items
+.5 basic “health boost” item that increases the player health when the player picks it up
+1 implemented different weapons; when the player picks up a new “weapon” their bullets take on
special abilities (e.g. bullet can track an enemy, bullets temporarily do more damage)
+1.5 different weapon has a more complicated status modifier effect. E,g, player can pick up a fire gun
that “burns” the enemy, slowly sapping away at its health for a period of time; player picks up a “freeze
gun” that temporarily stuns and prevents the enemy from moving
+1 implement special defense items (e.g., invincibility, shield, speed boost)
Achievements
-Track some random player behavior and inform them with an “achievement” when they accomplish a
certain random objective. Some examples:
kill X enemies in X amount of time (+1-1.5)*
avoid getting hit for X seconds (+1-1.5)
kill X enemies at once (+1-1.5)
* grading variation depends on how you inform the player of the achievement- do you just a flash a
message on the screen? (less impressive) or do you have a rewarding image and then display the player’s
achievements somewhere on the HUD? (more impressive).
Many other things are possible!!! Examine some old SNES, NES, SEGA, or modern small-scale
indie games (
http://gamejolt.com/) for ideas. Here are some examples that you can draw for
inspirations:
Asteroids
Scrolling Shooter
Top Down Shooter
Submission and Grading
Assignment Code (30 pts):
It is an individual assignment.
Zip the project folder (MUST be the folder NOT individual files) into a single Zip File.
Rename the zip file using the following naming standard:
LabNumber_FirstName_LastName_AssignmentNumber_StudentNumber.zip , e.g.
E101_John_Smith_Assignment3_1234567, and then upload it to the Canvas before or by
the deadline
.
Before the deadline, you are allowed to resubmit if you feel necessary, and the last one
submitted will be graded.
(Please note, -0.25 will be deducted for each violation of the rules specified above)
No late submission will be accepted. If you do not complete the assignment by the deadline,
you will receive
0. You will also receive 0 for missing sketch or folder.
For a legitimate reason a late submission might be allowed pending discussion with your TA
before the deadline. You may be required to provide supporting documents.
You are graded on completeness for the basic requirements and visual style evaluated by Effort,
Creativity, Originality
(ECO) of your assignment
Online Test for the Assignment (4 pts):
 To demonstrate that you learned the relevant concepts, you need to answer an online test regarding
the work you’ve done.
 The test will be posted in Canvas and available immediately after the Assignment DUE TIME.
You must get it done within
2 days after the DUE DATE, and you have 30 minutes to finish it once
started. Please note once the online test is closed by the end of its schedule, there is no way to reopen it for any individual and therefore
NO Make-Up is possible. So it is your responsibility to
make sure you do it in time to get full credit for your assignment.