Pac Man Architecture page Iteration 2

History of Revisions
11/01/02 Chris Epsom Initial Document Creation
11/14/02 Chris Epsom Addition of Class descriptions


Overall Functionality
The OS of the phone will start the MIDlet by calling startApp() in pacman.java. The GameCanvas will have the Display set to the display returned by the pacman.java that is unique to the MIDlet. GameCanvas will display each different type of screen and then change to different screens when needed. The type of screen displayed will defined in a variable and pushing different keys will only affect valid screens through if statements in GameCanvas.keyPressed(int). The actual game board will be created in GameBoardFactory by splitting the screen into different squares and adding walls at hardcoded points to make a maze for Pac Man. Different levels are created by just adding walls at different places and using the same other sections of the code. The squares will be GridNode objects and will have 4 pointers to neighboring GridNodes if there is no wall between the two and a pointer to NULL if there is a wall which is used for navigation of Pac Man and the Ghosts as well as drawing the walls on the screen. FrameTrigger will be a thread that runs during the course of the program that sleeps for a certain amount of time in order to make the animation. It will repaint the screen at defined intervals making a smooth transition. Also in order to make animation smooth, the value of the key being pressed by the user is only checked at the center of each square making direction changes only occur when they are valid. The game ends when all of the dots are gone, then the end game screen is displayed. When the user selects "Pause" and is prompted to save if desired, the saved game will be a GameBoard.java object written to a file so that the exact location of all pixels will be accounted for.


Pacman.java
Description: The class will act like the "main" of the program. It extends javax.microedition.midlet.MIDlet and will be the overhead control of the program that is called by the OS on the phone.
Attributes: GameCanvas canvas is an object that will control what is displayed on the screen.
Methods: Pacman() is the constructor that initializes the Display and GameCanvas.
startApp() redefines the abstract method in MIDlet to start displaying things to the screen.
pauseApp() redefines the abstract method in MIDlet to be used to pause the game.
destroyApp(boolean) redefines the abstract method in MIDlet to be used by the OS on the phone to terminate the application.

GameCanvas.java
Description: This class controls all of the displays and animation for the game. The class extends javax.microedition.lcdui.Canvas.
Attributes: Display disp is an object that holds the information about how to access the display on the phone and is a J2ME library class. disp was initialized by pacman.java.
GameBoard gameBoard is an object that holds level grid pieces and actors.
FrameTrigger frameTrigger is an object that controls the delay time in between animation of each screen.
int screenType will be used to define which screen to show.
Methods: GameCanvas(Display) is the constructor that initializes the gameBoard and the frameTrigger.
paint(Graphics) is the method that redefines the abstract method from Canvas and clears the screen and starts all of the animation.
show() is the method that actually starts the animation.
advanceFrame() is the method that moves animation forward one frame.
keyPressed(int) is used to tell the program which key is being pressed on the phone.


GameBoard.java
Description: This class holds the vectors of level grid sections and actors. It also directly controls what is painted in each section of the screen and when the actors should advance to a different section.
Attributes: Vector nodes is a java.util.Vector object that holds GridNode objects.
Vector ghosts is a java.util.Vector object that holds GhostActors.
PacmanActor pacman is an object that keeps the current information about how many pellets have been eaten as well as the location and animation step of Pac Man.
boolean isPaused is used to tell the program whether or not the game is currently paused.
Methods: GameBoard() is the constructor that initializes the Vectors.
addGridNode(GridNode) is used to add a new GridNode object to the nodes vector.
paint(Graphics) is used to start the display of each grid section as well as the actors.
advanceFrame() is used to advance all of the actors one space.
setPacman(PacmanActor) is used to initialize the PacmanActor object in the class.
getPacman() is used to return the PacmanActor object in the class.
addGhost(GhostActor) is used to add a GhostActor object to the ghosts vector.
removeGhost() is used to reset the Ghost's position after being eaten by Pac Man.
setPaused() is used to set the isPaused flag and is called by GameCanvas.keyPressed().
saveGame() is used to write the current GameBoard.java object to disk on the phone so it can be accessed later.

GameBoardFactory.java
Description: This class is used to hold all of the information for each level in array of arrays form.
Attributes: GridNode levelNodes[][] is used to hold all of the sections of the screen and what is present in each.
Methods: getLevelOne() will be the method that sets all of the levelNodes[][] according to a predefined, hard-coded set sections of the screen that sets where walls are as well as where pacman and the ghosts start.
getLevelTwo() will be the same as above, just with different starting positions and wall locations.
There can be as many different levels as desired or allowed by memory.
UDLink(int, int, int, int) is used to set a certain GridNode to either have a wall on the top or bottom.
LRLink(int, int, int, int) is used to set a certain GridNode to either have a wall on the left or right.

FrameTrigger.java
Description: This class is the thread that causes the animation to happen, and will extend java.lang.Thread. There will be a sleep here that is set in GameCanvas.java that will control animation speed.
Attributes: GameCanvas game will be used to be able to reference the GameCanvas that created this FrameTrigger.
int frameDelay will be the number used by the sleep to determine animation speed.
private boolean stopped will be the boolean that will determine whether or not the thread is running.
Methods: FrameTrigger(GameCanvas, int) is the constructor that will be used to set the frameDelay and the game variables.
stopTrigger() is used to stop the thread.
run() is used to start the thread and will infinite loop until stopTrigger() is called.

GridNode.java
Description: This class is used to describe exactly which pixels in each section of the screen will be colored or not based on presence or lack of presence of pellets, super pellets and walls.
Attributes: static final int NO_PELLET, SMALL_PELLET, BIG_PELLET, are all different integers that are used to tell what kind of pellet is in the node.
int size is the size of the grid square in pixels.
int pellet contains one of the static final ints from above.
GridNode left, right, up, down are used to be pointers to the next GridNode object on the corresponding section of the screen. If they are null, then this means a wall is present, if there is a pointer, then the program knows where to move the actor next.
int gridPosX is the GridNode left to right position on the screen in units of GridNodes.
int gridPosY is the GridNode up/down position on the screen in units of GridNodes.
int pixelULX is the left-right pixel position in the Upper Left corner of the GridNode.
int pixelULY is the up-down pixel position in the Upper Left corner of the GridNode.
int pixelLRX is the left-right pixel position in the Lower Right corner of the GridNode.
int pixelLRY is the up-down pixel position in the Upper Left corner of the GridNode.
int pixelCX, pixelCY are the X and Y coordinates of the center of the GridNode in pixels.
Methods: GridNode(int, int) is the constructor that creates a new GridNode object with all wall pointers set to null at the passed coordinates.
getpixelCenterX(), getpixelCenterY() return the X and Y coordinates in pixels of the center of the GridNode.
setLeft(GridNode), setRight(GridNode), setUp(GridNode), setDown(GridNode) are used to set the wall pointers to other GridNodes.
getLeft(), getRight(), getUp(), getDown() are used to return the GridNodes at the end of each wall pointer.
setPellet(int) is used to change the static final int of the pellet status.
getSize() is used to return the size in pixels of each GridNode.
paint(Graphics) is used to fill in the necessary pixels for the walls and pellets.


Actor.java
Description: This class is a super class for the PacmanActor and the GhostActor. It holds common attributes for both.
Attributes: static final int NONE, UP, DOWN, LEFT, RIGHT are used to define the direction of movement for the Actor.
GridNode myNode is the current location of the Actor.
int pixelX, pixelY are used to tell the current center position of the Actor in pixels.
int newPixelX, newPixelY are used to tell the next center position of the Actor in pixels based on user input.
Methods advanceFrame() is used to animate the movement of the actor.
goToNode(GridNode) is used to change the X and Y position of the Actor.

PacmanActor.java
Description: This class is used to describe the location of the Pac Man icon as well as how many pellets have been eaten. It extends Actor.java. The animation of the mouth and the location of the next GridNode to move to is also controlled here.
Attributes: int pelletsEaten is the number of pellets that have been eaten.
int direction is an integer that holds one of the static final ints from above.
int mouthAngle is the current value of the openness of Pac Man?s mouth.
int mouthAngleChange is the value that defines how quickly the angle changes.
Methods: PacmanActor(Gridnode) is the constructor that creates Pac Man to start at the GridNode passed.
getPelletsEaten() returns the total number of pellets eaten by Pac Man.
setDesiredDirection(int) sets the direction variable.
goToNode(GridNode) changes the newPixelX and newPixelY values when a movement is needed.
advanceFrame() is used to animate the movement of Pac Man.
paint(Graphics) is used to display the pixels that Pac Man is taking up at the current time.


GhostActor.java
DescriptionL This class is used to describe a single Ghost position and movement either towards Pac Man if the game is in normal state, or away from Pac Man if Pac Man has eaten a super dot. It extends Actor.java.
Attributes: static boolean runFromPac is used to tell whether or not the Ghosts are running away from Pac Man or not. It is static so that all Ghosts will do the same.
PacmanActor target is the PacmanActor object so the Ghost can run towards or away from it.
Methods: GhostActor(GridNode, PacmanActor) is the constructor and initializes the Ghost in the desired GridNode.
setRunFromPac(boolean) is used to set the variable for whether or not the Ghosts are running from Pac Man or not.
advanceFrame() is used to move the Ghost around the board based on an algorithm that tries to move closer to Pac Man first in the Y direction, then in the X.
moveTowards(int, int, int, int) is used to select if the Ghosts are running towards or away from Pac Man.
goInDirection(int) is used to choose the best direction for the Ghost to move based on whether it is running away from or towards Pac Man.
goToNode(GridNode) actually returns the best route.
paint(Graphics) draws the Ghost to the screen.


PacScreen.java
Description: This class is the super class for all screens other than the Game Board.
Attributes: Canvas canvas will hold all of the information that is needed to display to the screen.
Methods: setCanvas(Display) is used to initialize the canvas object.
advanceFrame() is an abstract class that is used in each individual screen.
paint(Graphics) is an abstract class that is used in each individual screen.


IntroScreen.java
Description: This class is used to define the Introduction screen for the game and is displayed by GameCanvas and extends PacScreen.java.
Attributes: int isHighlighted is used to tell paint which menu option to highlight.
Methods: IntroScreen() is the constructor and is used to initialize the screen.
advanceFrame() is used to check for user input in order to procede to the game mode.
paint(Graphics) is used to display the Introduction Screen to the display on the phone.


LoadScreen.java
Description: This class is used to make the screen that lists the saved games for the user to select in order to begin playing from a saved point and extends PacScreen.java.
Attributes: int isHighlighted is used to tell paint which menu option to highlight.
Methods: LoadScreen() is the constructor and is used to initialize the screen.
advanceFrame() is used to check for user input in order to procede to the game mode or move the highlighted option.
paint(Graphics) displays the information to the screen.
getSaved() returns the information for the saved games.

ExitScreen.java
Description: This class is used to make the screen that is displayed when Pac Man loses all of his lives or the User exits and extends PacScreen.java.
Attributes:
Methods: advanceFrame() is used to check to see if the user has clicked through to the next screen. paint(Graphics) displays the information to the screen.

Pac Man Architecture Page Iteration 3