Final Project: ___ ___ / /\ / /\ / /\ / /\ /__/\ / /::\ / /::\ / /::\ / /:/ \__\:\ / /:/\:\ / /:/\:\ / /:/\:\ / /:/ / /::\ / /:/ \:\ / /::\ \:\ / /:/ \:\ /__/:/ ___ __/ /:/\/ /__/:/ \__\:| /__/:/\:\ \:\ /__/:/ \__\:\ | |:| / /\ /__/\/:/~~ \ \:\ / /:/ \ \:\ \:\_\/ \ \:\ / /:/ | |:|/ /:/ \ \::/ \ \:\ /:/ \ \:\ \:\ \ \:\ /:/ |__|:|__/:/ \ \:\ \ \:\/:/ \ \:\_\/ \ \:\/:/ \__\::::/ \__\/ \__\::/ \ \:\ \ \::/ ~~~~ ~~ \__\/ \__\/ ___ ___ ___ ___ / /\ / /\ / /\ / /\ / /::\ / /::\ / /::| / /::\ / /:/\:\ / /:/\:\ / /:|:| / /:/\:\ / /:/ \:\ / /::\ \:\ / /:/|:|__ / /::\ \:\ /__/:/_\_ \:\ /__/:/\:\_\:\ /__/:/_|::::\ /__/:/\:\ \:\ \ \:\__/\_\/ \__\/ \:\/:/ \__\/ /~~/:/ \ \:\ \:\_\/ \ \:\ \:\ \__\::/ / /:/ \ \:\ \:\ \ \:\/:/ / /:/ / /:/ \ \:\_\/ \ \::/ /__/:/ /__/:/ \ \:\ \__\/ \__\/ \__\/ \__\/ Create a classic video game using the tools you've learned throughout the quarter. You have two options: Option 1: Use the MVC architecture (provided in the code base) to create a game other than Asteroids (except Tetris, which we will be creating in class) such as Galaga, Space Invaders, Missile Command, Qix, etc. You MUST extend the code base provided, but you would effectively ignore/delete the Asteroids model and create your own model. Option 2: Use the base code provided and extend the Asteroids model to create your own version of Asteroids. If you choose this option, you should expect to make your own special weapons, provide explosions with debris. Other options include a shield, hyperspace, firing UFOs, guided missiles, etc. You MUST extend the code base provided. Each grader will select the top 5 games. The ten finalists will demonstrate their games and present their code and architecture, and the class will vote (noise-meter) on the best game. The winner will receive a prize during an awards-ceremony/reception on the last day. ************************************************** ************************************************** ************************************************** Use GameBase06.tar Many features of the game have already been implemented. So, what else do we need to do?? Potentially a lot. At the very minimum, you need to: Implement debris. Implement scoring. When the falcon collides with a NewShipFloater, you should increment the number of falcons. What else? It's your game, so use your imagination, but consider the following: Special weapons: You have an example of a special weapon (cruise missile). Consider creating other special weapons. You might consider spawning an explosion (friend) when your special weapon either hits a foe, or expires. Consider steerable missiles which activate steering while a particular key is in key-press state, and explodes (as well as returns steering control back to the falcon) upon key-release. Hyperspace: As a defensive measure, you can implement a hyperspace to randomly move the falcon to another location on the screen. Foes: Various UFOs. TitaniumAsteroid which appears at higher levels, has a special color, requires several hits before it explodes, changes color as it weakens, and spawns smaller versions of itself like Asteroid. Consider heat-seeking missiles that are fired from a Foe; in that case you would override the move method of HeatSeekingMissile and adjust its orientation depending on the location of the target (the Falcon reference). Counter-measures: Consider defensive countermeasures like chaffing to throw your foe's heat-seeking weapons off their intended target (the Falcon). A chaff is a heat flare that acts as a decoy to a heat-seeking missile. Power-ups: You have an example of a power-up called NewShipFloater. Create other power-ups for special weapons and other goodies. These goodies should have time limits which would then be refelcted in a meter displayed in the margin. Shield: Create a shield for the falcon. Perhaps the shield changes color as it weakens, and perhaps you need to get a power-up to use the sheild for a limited period of time. Meters: Create color-coded meters that show graphically how much time is left on a power-up, goodie, shield, or other vital information. Falcon morphs: Consider morphing the falcon into various color/shape cobminations as it recieves power-ups (see Cruise to see how morphing is done). You are not limited to two morphs, create several if you want. Debris: The Sprite class has a method called public Point[] getObjectPoints(). YOu can use this to get the points which describe the Sprite an any given frame. It may be easier for you to create your own Debris class from scratch that implements Movable, rather than extending Sprite, but either way will work. Special Levels: You may consider creating a labyrinth out of which the falcon must successfully navigate within a given time, without touching the walls, and acquiring goodies along the way. Other: I've just scratched the surface as far as possible mods to the game; use your imagination to come up with more features. Some things to keep in mind. 1/ Sprite is essentially a shape circumscribed by a circle, which makes collision detection really easy. The down-side is that polar coordinates are difficult to work with. However, I created a method that allows you to create shapes using an ArrayList where the points are on a cartesian grid with 0,0 at the origin. When you add your points to the ArrayList, order matters, so that each point is adjascent to its neighbor in the ArrayList. The following ArrayList describes the shape of the cruise-missile prior to deploying its wings and accelerating. Just keep in mind that creating this ArrayList out-of-order will produce a jaggedy-shaped sprite. The following order is correct (though I could have traversed the points counter-clockwise with the same good result). ArrayList pntAs = new ArrayList(); pntAs.add(new Point(0, 5)); //top point pntAs.add(new Point(1, 3)); //right top point pntAs.add(new Point(1, -2)); //right bottom point pntAs.add(new Point(-1, -2)); // left bottom point pntAs.add(new Point(-1, 3)); //left top point assignPolorPointsAlts(pntAs); Some addition info: the M key is for muting music. the f-key is for firing the cruise missile.