I commented out some debugging code in the PlayerAttributes and PlayerEntity classes.
I added more audio formats to ignore.
I added more audio formats to ignore.
I added sound effects to the game using Paul Lamb's library, which can be found at http://www.paulscode.com

TODO: I still need to add intro music when the game first begins.
I cleaned up some of the old commented out sound code from previous sound libraries that I tested.
Merge branch 'addingsounds' into development

Now that sounds seem to be working, I am merging the 'addingsounds' branch with the development branch.
First, I fixed a bug that occured when the player shot hit the shorty UFO. I had the same code to handle the playing of the sound for both the case for the strong UFO and the shorty UFO. Here, I was typecasting the entity to the strong UFO and when the case for the shorty UFO was reached in the switch statement, I was getting a cast exception. I added a break command to the case for the shorty UFO. I just need to add a sound to be played now when the player shot hits the shorty UFO.

Seconds, I fixed the code for the quickPlay(String filename, boolean priority) method in the sound manager class. The priority parameter was not used in the call to Paul Lamb's quickPlay() methid, so I added it to the call to this method in Paul's sound library.
I added an image manager that stores all images in a map. This cleans up the dozens of variables currently used to store images used in the game. Also, since the image manager is static, it can be accessed from anywhere in the project to access images used in the game.
I removed more references to the existing ImageEntity objects that store images for use in the game and I replaced them with references to the ImageManager.
The biggest change in this commit is refactoring the powerup code. I removed the methods responsible for spawning powerups and added them to a new PowerupManager. Also, creating a powerup manager allowed me to clean up a few utility methods from the PlayerEntity class.

I also finished removing the remaining EntityImage variables and replacing their references with the ImageManager.

I also tweaked how the sounds are called. I removed the calls for the asteroid breaking apart from the method breakAsteroid and moved them to the collision methods. I also changed when an asteroid sound is played. When an asteroid hits the players shield, only the sound of the shield getting hit is played. Otherwise the asteroid sound is played. This makes the game a bit mroe cleaner by not trying to play multiple sounds at the same time, which has resulted in some of the sounds not being played.
I refactored more the the code for the image manager. I moved all of the code that loads each image into the image store (e.g., ImageManager.loadImage(image_filename)) from the main game class Asteroids and moved it to a method in the ImageManager in order to clean up and reduce the amount of code in the main game class.

I refactored the code responsible for generating UFOs by moving it from the main game class and placing it in the ufo manager. I also modified the code to  use a Factory appraoch.

I also cleaned up some erroneous code in each of the UFO classes. I realized I was doing similar logic in the overridden updatePosition methods in UFOShorty and UFOStringEntity that I was doing in UFOEntity. So I eliminated the overriden methods in UFOShorty and UFOStrongEntity.

I also started to move the code for displaying the HUD in its own method in the Asteroids class.
First, I tested the refactoring of the UFO code from the previous commit. I made sure the respective UFOs were being launched. During testing I noticed there was a problem with the UFOs position on the screen. As it turns out when I changed the constructor signature for the UFOEntity I removed the image parameter. When I was setting the image in one of the UFO sub classes after calling the super constructor, the posiiton was getting reset to 0,0 (via the EntityImage setImage method). I changed back the constructor for UFOEntity to include the image parameter and everything is not working correctly.

I also improved the logic for determining the UFO position, direction and headign vector in the class UFOEntity. The logic seems a bit more straight forward and the heading vector will be between  set of specified angles to make the game play better.

I also cleaned up some of the code to display the HUD by using the StaticText class for some of the messages displayed to the screen. This reduces some of the code in the main game class Asteroids.
I refactored the method for stocking UFO bullets. Originally out of haste I created two different methods for stocking UFO bullets (one for normal and strong UFOs and one for the shorty UFO). There was a lot of duplicate code between the two methods, so I combined them into one method and moved it from the main game class Asteroids to the UFO manager class.

I cleaned up more code in the main game class Asteroids. This involved removing old commented out code and unused variables. I also moved more constants from the main game class Asteroids to the Constants class.

I moved the method shouldFireShot from the UFOEntity class up to the parent class EnemyEntity.
I changed back the ufo spawn levels to their original values.
I added the ability to pause the game when the user presses 'P'.
I added a paused message as a static text object.
I added a powerup screen that describes all power-ups in the game.
I continued to add additional screens including instructions and a powerup details screen.
I added more screen for the introduction and came up with a flow for the screens to easily allow the user to cycle through them so he/she can get an overview of the game details.

Game screens include Instructions, Powerups, Enemies, Powerup Details and Credits.
I cleaned up some of the code for the powerup screen and the enemies screen.

I also added my copyright to the bottom of the main introduction screen.