Due:
- 461: during final period — Monday, December 8, 3:30-6pm
- 561: during final period — Wednesday, December 10, 12-2:30pm
Goal: In this assignment you will apply what you've learned of basic WebGL and GLSL to build a simple game.
Submission: Submit your partial and final assignment using this Google Form, and demo your assignment during the final exam period.
BASIC GRADING:
The main components of this programming assignment are:
- 5% Part 1: properly turned in program (new requirements!)
- 20% Part 2: display battlefield, enemy tank, radar and crosshair
- 15% Part 3: animate your tank's view
- 25% Part 4: animate the enemy tanks
- 25% Part 5: your tank's shots and enemy's shots
- 10% Part 6: make it your own
- Participation credit: Receive participation credit (outside of this assignment) for posting your resulting imagery and video, good or bad, on the class forum!
General:
Our suggested game is a modern 3D version of Battle Zone. If you are not familiar with the game, you can play it online here (DOS) or here (arcade), view some historic gameplay on arcade or console, and find more information about the game at its Wikipedia entry here. There are also many other sources online.
If you would rather implement a different game, you may do so, providing you ask for instructor's approval by Monday November 17. To obtain that approval, submit your proposal using this form. Small teams are also acceptable, but the scope of the project must increase to match. Use the same form if you wish to propose a group project. For example, we will approve two-person teams that propose building Battlezone as described below along with all extra credits to earn 100%.
Unlike previous programs, your game is not required to load specific assets (models, textures or lighting). You are free to hard-code paths to the assets your game requires.
Remember that 5% of your assignment grade is for correctly submitting your work! For more information about how to correctly submit, see this page on the class website. Since we encourage variation in your games, make sure to include a readme file.
For this assignment only, you can also earn extra credit (461: 2%; 561: 1%) by allowing us to make your assignment public, and providing us with some extra material to aid us in that. We will pick a few of the best assignments and publish them on our course website. If you wish to allow us, please also deliver:
- a description: your game in four sentences or less
- a screencast: a video walking us through your game within a few minutes.
During the final exam period, you may optionally demo your game in front of the class (without a separate demo to staff). If you do, you will enter a competition for a $20 Amazon gift card. You will win if your fellow students vote your game the best. Students in teams will be in a separate competition from individuals (if there are enough teams).
Part 2: Display battlefield, enemy tank, radar and crosshair
Create and render the player's crosshair, its radar, one enemy tank, and the battlefield (mountains, obstacles). Models should be 3D, and the tank view's projection must be perspective. The radar is simply a small viewport overlaid on the tank view's viewport, using an orthographic plan view of the battlefield and the tanks. Fancy modeling is not necessary; cubes, spheres etc. are enough. Nothing needs to move.
Part 3: Animate your tank's view
The tank can turn left or right across the screen when the player presses the left and right arrow keys, and move forward and backward when the player presses the up and down keys. All motion (and indeed all actual gameplay) is 2D on the ground plane. The player's tank cannot move through obstacles, nor through enemy tanks.
The enemy tanks move randomly, though they are more likely to move toward the player. They cannot move through obstacles or other tanks, including the player's tanks.
When the player presses the space bar, their tank shoots one shot straight ahead. The player cannot shoot again until that shot either flies off the battlefield, or hits an obstacle or an enemy tank. The shot follows a straight line at a fixed velocity, so the player must shoot ahead of moving tanks to hit them. Every several seconds, each enemy tank will turn and shoot toward the player's tank completely accurately, requiring the player to move their tank to avoid being shot. One successful shot destroys a tank, whether the player's or the enemy's. When the enemy tank is destroyed, a new one spawns at a random location at the edge of the battlefield, out of the player's current view. When the player's tank is destroyed, it spawns in the location where it was destroyed, but cannot be shot for a few seconds after spawning.
In Parts 1-5, you strove to make your game work "right". Now you should use the techniques you have learned to make the game "different". To earn full credit, all that you must achieve is to make your game substantially different, visually or behaviorally, from both the standard game and from your fellow students' games. Your "different" game version should appear after you press the exclamation mark (!).
Extra credit opportunities include the following, with values in format (461, 561)%. Other extra credits are possible, but must be approved by teaching staff in advance to ensure credit:
- (1, ⅓)% — track and display score. You can choose any scoring scale you want.
- (1, ⅓)% — add a "third-person" view, with the camera attached to the back of the player's tank.
- (1, ⅓)% — add animated effects, which appear when a tank (both player's & enemy's) is destroyed.
- (2, ½)% — beep for radar periodically, and on shots and hits play a sound effect.
- (2, ½)% — add at least one more level, which increases difficulty. In Battlezone, this means faster motion, more likely to move to the player's tank.
- (2, ½)% — add guided missiles and UFOs, behaving as described on the wiki.
- (2, ½)% — add two power ups, e.g. transparent objects, temporary freeze, or brief invulnerability.
- (2, ½)% — support a second player, either with different keys or the mouse.
- (4, 1)% — add better/different physics, e.g. ballistic shots with gravity, or tank movement with acceleration/deceleration.
- (20, 5)% — 3D gameplay: a field of play with different elevations, rotating turrets, and cannons that can be rotated with up/down and left/right.






