This assignment is due by 09/20/2024 11:59pm.
Part I - 2D Video Game
For this Side Quest, you will create an OpenGL 2D animated video game. With only the tools needed for the second assignment, it is now possible to make some complex and amazing looking video games. Many classic games are on a 2D platform, from Pong and Asteroid to Super Mario Bros and Tetris. Your task is to create a 2D video game (it can be a new idea of your own, or you can re-implement a favorite).
There are several elements that must be present in your game:
- Your scene must be drawn using OpenGL 2D primitives, at least one of which is solid.
- Your game must be animated.
There should be some form of constant animation. (We are not implementing Zork.) As with Assignment 2, when the user is not interacting with the game there should still be some animation occurring. - Your game must accept input from the keyboard and the mouse.
Be sure to explain in theREADME.txt
what the different keys and mouse do. A new player should be able to read this file and start playing the game right away. As with A2, the position of the mouse must be incorporated into the controls. For instance, the mouse may be used to aim a missile launcher and clicking shoots a missile. It is typically standard for thew, a, s, d
keys or arrow keys to be used if moving a character around the screen. Lastly, theESC
key should exit your game. - Your game must have an incentive/reward/goal/target.
In most games this is Points, but it doesn't need to be, many racing games have a fastast lap record. Your game must have a goal that the player is striving for. Why is the user playing your game? What are they trying to accomplish? - Your game must have a conflict which attempts to hinder the user from achieving the incentive/reward/goal/target.
There should be an antagonist present that is attempting to prevent the player from completing their given task. This does not need to be complex! There does not need to be a multilayer AI playing for the computer. Think of the asteroids in Asteroid, they have a direction they move along and if they hit the ship, you lose a life. Or in Tetris the blocks can only move until they hit another block. More details about the conflict are given below. - It must be possible to lose your game.
Oddly enough, it is not always fun to play a game that is "broken" and is instantly beatable. If the conflict in your game occurs often enough, then the game should end. This does not necessarily need to be a health system (number of lives, Health Points, etc.). Perhaps a task needs to be completed in a certain amount of time. Whatever method is used, make sure this information is available to the user so they are aware of if the end is near. When a player loses a game, they now have an additional incentive to play again and better their score or get further into the game.
It is up to you to determine the format and structure of your game. The graphics involved do not need to be complex either, the focus is not on the design or modelling of each object in your scene. Instead, the focus should be on the interaction between the player and the game as well as the gameplay. Once the above criteria are satisfied, then feel more than free to make your game look as cool as possible.
After all games have been submitted, there is an Arcade page where everyone in the class will be able to download and play your game. We will track high scores across the various games.
Part II - Website
Update the webpage that you submitted with A2 to include an entry for this assignment. As usual, include a screenshot (or two) and a brief description of the program, intended to showcase what your program does to people who are not familiar with the assignment.
Documentation
With this and all future assignments, you are expected to appropriately document your code. This includes writing comments in your source code - remember that your comments should explain what a piece of code is supposed to do and why; don't just re-write what the code says in plain English. Comments serve the dual purpose of explaining your code to someone unfamiliar with it and assisting in debugging. If you know what a piece of code is supposed to be doing, you can figure out where it's going awry more easily.
Proper documentation also means including a README.txt
file with your submission. In your
submission folder, always include a file called README.txt
that lists:
- Your Name / HeroName
- Assignment Number / Project Title
- A brief, high level description of what the program is / does
- A usage section, explaining how to run the program, which keys perform which actions, etc.
- Instructions on compiling your code
- Notes about bugs, implementation details, etc. if necessary
- How long did this assignment take you?
- How much did the lab help you for this assignment? 1-10 (1 - did not help at all, 10 - this was exactly the same as the lab)
- How fun was this assignment? 1-10 (1 - discontinue this assignment, 10 - I wish I had more time to make it even better)
Grading Rubric
To earn the achievement, your game must exhibit these qualities:
- At least one object is drawn using OpenGL 2D primitives and at least one is solid and drawn in hierarchical fashion.
- Game is animated.
- Game accepts input from the keyboard and the mouse. The position of the mouse affects the input response.
- Game has a clear incentive/reward/goal/target.
- Game has a clear conflict that makes the incentive/reward/goal/target difficult to achieve.
- Game can be lost.
- Submission includes source code, CMakeLists.txt, and
README.txt
. Source code is well documented. Webpage namedHeroName.html
submitted and updated with screenshot from latest assignment. - Submission compiles and executes.
IN ADDITION: IN ORDER TO EARN THE ACHIEVEMENT, THIS SIDE QUEST MUST BE SUBMITTED PRIOR TO 09/20/2024 11:59PM. LATE SUBMISSIONS WILL BE ACCEPTED AND ADDED TO THE GAME PAGE, BUT THE ACHIEVEMENT WILL NOT BE AWARDED FOR A LATE SUBMISSION.
Experience Gained & Available Achievements
Assignments +75 XP
|
Web +50 XP
|
Pong Master
|
Submission
When you are completed with the assignment, zip together your source code, CMakeLists.txt
, and
README.txt
into a folder named src/
plus include your www/
folder. Name the zip file, HeroName_SQ1.zip
.
Upload this file to Canvas under SQ1. The structure of your submission should look as follows:
HeroName_SQ1.zip
src/
images/
- all_images
README.txt
CMakeLists.txt
main.cpp
SQ1Engine.cpp
SQ1Engine.h
- all_additional_code
www/
images/
- all_images
HeroName.html
- all_additional_files
This assignment is due by 09/20/2024 11:59pm.