Assignment 10: Final Project

Note: You may not use a late coupon on this assignment. All projects are due on April 27th by 5:30PM. No exceptions.

Introduction

The game we will be making this semester is called Gorrilas. If you have not played the game before you can find an online version here. Take a few minutes to play the game and become familiar with how it works before starting the assignment.

Please put all of your work in the project package in the labs folder of your repository.

Objectives

Everyone must do the following (60 points):

  • You should draw a game board. You do not need to draw buildings, the landscape can be flat. Both players need to appear on the screen, you can use simple shapes for this (we suggest either squares or circles).

  • You should be able to prompt each player to enter an angle and a velocity. Using ArgsProcessor for this is acceptable.

  • Once you have recieved the angle and velocity, you should make a projectile that moves accross the screen accordingly.

  • You should check to see if your projectile hits a player, the ground, or if it goes off of the edge of the screen, and react accordingly.

  • If a player is hit, you should display a simple message stating which player won. The game should then restart.

  • You are required to use at least one interface. Consider the behviors of the objects in your game. Do any of your objects share certain behaviors? If so, that is a good candidate for an interface. Create the interface and then implement it on each of the objects accordingly. We first saw interfaces in Module 8, so it may help to review that material if you get stuck.

In addition to the above, everyone must choose one item from the following list and include it in your game (10 points):

  • Allow players to keep playing until one of the players has won a certain number of times. You should ask the players to enter this number at the beginning of the game. Display the number of points that each player currently has on the screen. Once a player has won, include a simple animation on the game over screen before restarting.

  • Include a wind factor and a gravity factor that affects the movement of the projectile. The wind factor should be randomly chosen and displayed on each level. The gravity factor should be chosen by the user at the beginning of the game.

  • Include a simple explosion animation that will display when the projectile hits the ground or a player.

  • Instead of using ArgsProcessor, get user input using StdDraw and display it on the screen.

  • Allow the player to use the keyboard to move the gorillas a little bit before they throw. The amount that the gorrilas can move should be limited.

Finally, you also need to choose one item from the following list and include it in your game (30 points):

  • Randomly generate a city skyline for each round. The projectiles need to collide with the skyline appropriately.

  • If you implemented explosions, make the explostions modify the game board appropriately. That means if you hit the ground or a building, the explosion should remove part of the ground or building that was hit. If another projectile lands in the same spot, it should collide with the new boundary instead of the old (now exploded) boundary.

  • Add power ups to the game. These power ups should randomly appear on the screen at random times. If a powerup is hit by a projectile, the player that threw the projectile should have the powerup applied to them. You must have at least 3 different types of powerups to recieve credit for this option. You should also make each type of power up look different.

For all of the above options, you should apply any relevant interfaces to the classes that you create.

Notes:

  • Please design your game before starting to write code. There will be a studio on April 13th that will ask you to consider the design of your game. You will not be able to submit your completed project until after this date.

  • We are looking for good style. This includes things such as appropriate documentation (Javadocs) and proper use of spacing and indentation.

  • We are also looking for a design that uses objects effectively. If you put all of your code into one or two objects, you will lose points. If you create unnecessary classes (hint: there should only be one class to represent both players) you will lose points. If you find yourself creating two classes that are extremely similar to each other, you should consider how to remove one of those classes.