Assignment #6 Description

At this point your game should be fairly close to playable. You should have in most of the logic for controlling things. For this assignment we will turn to making it look nicer and having a GUI that gives the player more information and you more flexibility. You will do this by having your Player return functional status panels and having one of your entities or blocks return a functional edit properties panel or putting in something else that takes user input from the GUI.

Design

The design for this assignment will include UML class diagrams for the classes that you will write. It should also include text descriptions of your implementation of the GUIs that you create. It will also include all of the classes that you wrote for the earlier assignments.

Remember that the design should put in comments for every class and method that tell two things. It needs to specify how the classes fit into the game play as well as give some implication as to what the methods are going to do to make that a reality. For a GUI this needs to include some information about what the components will be and how they are going to be laid out in your panels. You can also talk about the functionality of those components and how they will be updated as things change in the game.

As always, submit the design as described in the main project description page.

Code

Basically this assignment is about having you write GUIs. The most important part of it is for you to write code that creates game status panels for your player to return. Note that your player can return four separate panels. You only have to use one. This panel should display relevant information about the game in some reasonably appealing format. It will be drawn in either the north, south, east, or west of the normal playing area depending on the parameter that is passed in when you return it. In addition to writing code that builds the component, you also need to write code that will update the panel depending on what happens in the game. So if you display a score, it needs to be changed when the player does something that increases the score. The same is true for any other pieces of information that you display that are altered during the course of the game.

In addition to the game status panel, you need to make something that takes input from the user and makes some change based on it. This can happen in the game status panel, but there are some problems you might face getting it to work properly. One way to do this is to add an edit properties panel to either an entity, screen, or block. This panel will give you the ability to alter properties of that object in the ScreenEditor. Sometimes you want to have objects that are similar in most respects but different in some minor way that affects appearance or behavior, e.g., in the game I showed you at the beginning of the semester, there were keys of different colors. It makes sense to represent these objects as instances of the same class with a property (color in the case of the keys) that can be different for different instances. Another option would be to add a menu item on the game menu that brings up a frame or dialog box that can take user input.

To help you debug, you should put a main method in those classes that brings up a JFrame that has just the panel you are working on added into it. Once you have make sure that this looks right then you can run it in the game or the screen editor to make sure that it looks right in that situation.

If you haven't been using the API at the Sun website, this is when you will need to start doing that. The GUI libraries are quite extensive. We haven't had enough time in class to cover even a small fraction of what is in them, and even if we did, you wouldn't be able to store it all in your head. Use that resource and the tutorials to which it points to help in figuring out what you can do and how to do it.

JAR File

Here is the JAR file for this assignment. The only thing changed in this jar is that it tries to clean up the graphics a bit for the when you use a panel.