Checkers游戏源码 |
| 作者:J2MEDEV 来源:J2MEDEV 发布时间:2006-7-25 9:04:09 |
|
import java.util.Vector; import java.io.*; import javax.microedition.io.*; import javax.microedition.rms.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /** * This is the main class of the checkers game. * * @author Carol Hamer */ public class Checkers extends MIDlet implements CommandListener { //----------------------------------------------------- // game object fields /** * The canvas that the checkerboard is drawn on. */ private CheckersCanvas myCanvas; /** * The class that makes the http connection. */ private Communicator myCommunicator; //----------------------------------------------------- // command fields /** * The button to exit the game. */ private Command myExitCommand = new Command("Exit", Command.EXIT, 99); //----------------------------------------------------- // initialization and game state changes /** * Initialize the canvas and the commands. */ public Checkers() { try { //create the canvas and set up the commands: myCanvas = new CheckersCanvas(Display.getDisplay(this)); myCanvas.addCommand(myExitCommand); myCanvas.setCommandListener(this); CheckersGame game = myCanvas.getGame(); myCommunicator = new Communicator(this, myCanvas, game); game.setCommunicator(myCommunicator); } catch(Exception e) { // if there's an error during creation, display it as an alert. errorMsg(e); } } //---------------------------------------------------------------- // implementation of MIDlet // these methods may be called by the application management // software at any time, so we always check fields for null // before calling methods on them. /** * Start the application. */ public void startApp() throws MIDletStateChangeException { // tell the canvas to set up the game data and paint the // checkerboard. if(myCanvas != null) { myCanvas.start(); } // tell the communicator to start its thread and make a // connection. if(myCommunicator != null) { myCommunicator.start(); } } /** * Throw out the garbage. */ public void destroyApp(boolean unconditional) throws MIDletStateChangeException { // tell the communicator to send the end game // message to the other player and then disconnect: if(myCommunicator != null) { myCommunicator.endGame(); } // throw the larger game objects in the garbage: myCommunicator = null; myCanvas = null; System.gc(); } /** * Pause the game. * This method merely ends the game because this * version of the Checkers game does not support * re-entering a game that is in play. A possible * improvement to the game would be to allow * a player to diconeect and leave a game and then * later return to it, using some sort of session * token to find the correct game in progress on * the server side. */ public void pauseApp() { try { destroyApp(false); notifyDestroyed(); } catch (MIDletStateChangeException ex) { } } //---------------------------------------------------------------- // implementation of CommandListener /* * Respond to a command issued on the Canvas. */ public void commandAction(Command c, Displayable s) { if(c == myExitCommand) { try { destroyApp(false); notifyDestroyed(); } catch (MIDletStateChangeException ex) { } } } //------------------------------------------------------- // error methods /** * Converts an exception to a message and displays * the message.. */ void errorMsg(Exception e) { e.printStackTrace(); if(e.getMessage() == null) { errorMsg(e.getClass().getName()); } else { errorMsg(e.getMessage()); } } /** * Displays an error message alert if something goes wrong. */ void errorMsg(String msg) { Alert errorAlert = new Alert("error", msg, null, AlertType.ERROR); errorAlert.setCommandListener(this); errorAlert.setTimeout(Alert.FOREVER); Display.getDisplay(this).setCurrent(errorAlert); } } /** * This class is the display of the game. * * @author Carol Hamer */ class CheckersCanvas extends Canvas { //--------------------------------------------------------- // static fields /** * color constant */ public static final int BLACK = 0; /** * color constant */ public static final int WHITE = 0xffffff; /** * color constant. * (not quite bright red) */ public static final int RED = 0xf96868; /** * color constant */ public static final int GREY = 0xc6c6c6; /** * color constant */ public static final int LT_GREY = 0xe5e3e3; /** * how many rows and columns the display is divided into. */ public static final int GRID_WIDTH = 8; //--------------------------------------------------------- // instance fields /** * The black crown to draw on the red pieces.. */ private Image myBlackCrown; /** * The red crown to draw on the black pieces.. */ private Image myWhiteCrown; /** * a handle to the display. */ private Display myDisplay; /** * a handle to the object that stores the game logic * and game data. */ private CheckersGame myGame; /** * checkers dimension: the width of the squares of the checkerboard. */ private int mySquareSize; /** * checkers dimension: the minimum width possible for the * checkerboard squares. */ private int myMinSquareSize = 15; /** * whether or not we're waiting for another player to join * the game. */ private boolean myIsWaiting; //----------------------------------------------------- // gets / sets /** * @return a handle to the class that holds the logic of the * checkers game. */ CheckersGame getGame() { return(myGame); } /** * Display a screen to inform the player that we're * waiting for another player. */ void setWaitScreen(boolean wait) { myIsWaiting = wait; } //----------------------------------------------------- // initialization and game state changes /** * Constructor performs siz |
| [] [返回上一页] [打 印] |
|
文章评论 |
