Assignment 3 A Game of Shoot em up Due: Oct 27 Sunday 11:59pm
Total Points: 34 (accounting for 10% of your final grade)
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.
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 youve 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 re-open 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.
You are graded on completeness for the basic requirements and visual style evaluated by Effort, Creativity, Originality (ECO) of your assignment
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 players 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 a method 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, weve 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 designed 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 designed 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 players 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 dont have this method in Character or if you dont use the Character fields.
-an accelerate method that changes the Characters velocity using an accelerator (PVector)
-.5 if you dont have this method in Character or if you dont change the Characters 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 doesnt return a boolean
-.5 method doesnt 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 damage.
-.5 method missing from Character class.
-.25 missing parameter -.25 body of method doesnt 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)
-extends the Character class
-1 Player isnt 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 doesnt 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 doesnt 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- loop to check the projectiles against eh basic enemies
call the projectiles hit method to check whether the projectile hit the enemy.
-.75 Player cant shoot projectiles at all or projectiles dont damage the enemies when they hit
-extends the Character class
-1 Enemy isnt 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 doesnt 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 enemys 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 isnt 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 Players Projectiles OR they are a subclass of Projectile that extends the functionality in some way.
-.5 ArrayList to track projectiles doesnt exist OR is defined outside the Boss Enemy class
-.5 Boss projectiles look identical to Players ones -Boss has a method, checkProjectiles, which through each projectile object in its projectile list and uses the Projectiles 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 isnt 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 the game.
-.5 dies instantly or doesnt change appearance during pre- death period
-boss enemy overrides Basic Enemys update method so that it:
checks whether it collides with the player and damages the player if so.
calls the checkProjectiles method
-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 arent 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 the projectile hit a Character
-.5 method isnt 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
-keep track of basic enemies in a typed ArrayList.
-.5 basic enemies not in a typed ArrayList
-keep track of players 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 isnt tracked at all
-.5 score is tracked but doesnt 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
-.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 Characters 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 doesnt invoke move, checkWalls
* Total deduction for Character class Requirements caps at 3 pts even if the add-up goes over it
-.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 isnt inside a method called checkProjectiles -.25 method called from anywhere other than an overriden update -player overrides Characters 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
-.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
* 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 Abraham or me 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 players 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 players 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
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 youve 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 re- open 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.
Reviews
There are no reviews yet.