Project 2: Platformer
For your second project, you will create a platformer As with your first project, this project will be split into two parts: A "Complete Playable", which represents a playable (though simple) version of the game, and an "Enhanced Version", which adds features. You will also be graded on your playtesting report of other team's projects.
Complete Playable
For the first version of your game, you need to have the following:- A world/level that can be read in from a data file. You have several options for how to implement your world file
- An XML file describing the size of the world, and the positions of all game geometry (platforms), enemies, goals, etc.
- A pure ASCII text file describing the world
- An image file (from which you need to be able to extract the logical game elements, like where the player can walk, etc)
- Some combination of the above (an image file that shows a pretty version of the world, plus some other file -- XML or text -- that gives the logical position of all platforms, etc
- A character that can navigate the world, including jumping onto platforms. This will require some simple physics (simple gravity, collision detection, being able to land on platforms).
- Scrolling world (in at least one dimension)
- Some kind of goal (get to a particular point in the level, free the princess, collect all of the coins, defeat an enemy or enemies, etc)
- Animation of some kind
- Some amount of data drive design. In addtion to your world/level being read in from a data file, you should be able to change properties of objects in the world by just changing the data file, and not changing any code. It should be possible to add an entirely new entity (like a new enemy -- including new animations and new properties) by only changing the data files. You should have as few constants (including string literals!) defined in your game as possible -- they should all be read in from data files.
- Some kind of hazzard or enemy.
Note that you should be thinking ahead to what kind of platformer you want to create, even when doing the basic version. Are you creating a puzzler (how can I navigate through these moving platforms, to collect the proper keys, to open the the doors, to get to the next area?), a shooter (Kill all the enemies, protect the hostages, etc), a Mario-style jump on enemys' heads style platformer, or something completely different?
Extended Version
For the enhanced version, you need to add some more interesting features to your platformer. As before, what you add is up to you. You should decide what kind of platformer you are interested in creating -- a "hop and bop"Super Mario Bros, a shooter like Contra, a puzzler, or the something completely different. Once you know what kind of game you are going to do, you can decide what kind of enhancements to add. Some ideas:- Moving Enviorment Objects -- simple horizontal / vertical moving platforms, extending / retracting plaforms, opening & closing doors, platforms that move in a circle or along a curve, etc.
- Constant movement: Platform constantly moves from left to right, or up and down, or in a circle
- User triggered movement: Stepping on a button opens a door, or extends a platform. This can be combined with timimg puzzles -- stepping on a button opens a door, that slowly closes, giving the player a limited amount of time to get to it
- Collapsing platforms: Really just a special case of user triggered platforms -- when a player steps on a platform, it starts to shake, and if the player doesn't get off soon, it collapses (or it collapses anyway, only giving the use a small amount of time to cross it)
- Enemy Triggered movement: When an enemy or some other entity steps on a button, or enters an area, etc, then a platform moves, a door opens, etc
- Telportation Devices, conveyor belts, springs, fans, gravity-reversing areas
- Playing with time -- allowing the player to rewind time, slow time, slow time for everthing in the world except the player, etc. (this one can be tricky!)
- Keys that can be collected and used to unlock gates, enable teleporters, start conveyor belts, etc.
- Playing with the "camera" (zoom in, zoom out, shake, rotate, etc.) You would want to encapsulate this functionality as much as possible in a camera class -- there is some danger of spaghetti code if this is not designed correctly
- Minimap, that shows the entire world, with/without enemies, bullets, etc
- Weapons of all kinds, especially for shooters
- Simple weapons that shoot left and right (or up, down)
- Weapons that can shoot in all directions (you have a second analog stick, use it!)
- Grenades, mines, projectiles that bounce around walls, rockets with blast area-of-effect, etc.
- Something else of your own design
Teams
You are encouraged (but not required!) to work in teams for this project. Teams of two tend to work well for this kind of project, but larger teams may be allowed (ask first!) -- beware that larger teams will be expected to produce a more impressive product! You may wish to create a new subversion repository for your team, so that everyone on the team can access you code (without giving access to the rest of your subversion repository for other classes)
Playtesting
Play each others games! Give feedback, and get ideas for what you can do in your own game. In adition to informal feedback you give to other teams, you are required to give formal feedback to at least one team. (That is, each member of your team is required to give formal feeback to at least one other team) This formal feedback will be part of your grade for your project. Your formal feedback needs to include:
- Best feature of the game, that should be emphasized
- Any bugs found (with reproduction steps!)
- Suggested features to add / things to change
- Overall feedback -- how are the controls? The pacing? The difficulty? Was it fun? Were there any "wow" moments?
Grading
Your code will be graded on the following metrics:
- Basic Platformer (technical): 40 points
- Compiles and runs
- Correctly handles input
- Allows the player to move and jump onto platforms
- Collision detection and handling works correctly
- Reads in data from data files correctly, values not hard-coded in source code
- Code structure and program decomposition is reasonable
- Enhances Platformer (technical): 40 points
- Enhancements are sufficiently complicated
- Enhancements are well executed and (reasonably) bug-free
- Fun Factor: 15 points
- This is more of a subjective measure -- how fun is your enhanced platformer? Are the controls tight? Do the enhancements add up to a unified whole? Does your game have an interesting or compelling story? Is there a unified artistic style or "feel" to the game?
- Written reports: 5 points
- Formal Feedback. This the the feedback that you give to one of your fellow groups. How complete and helpful was your feedback?
- Feedback Response. Which suggestions did you decide to implement? Which suggestions did you decide not to implement? Why?