📄 gamescreen.java
字号:
import java.util.Random;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;class GameScreen extends Canvas implements CommandListener{ //定义不变量 private static final int BLACK = 0x00000000; private static final int WHITE = 0x00FFFFFF; private static final int RED = 0x00FF0000; private static final int BLUE = 0x000000FF; private static final int NO_MOVE = -1; private final SVSBMIDlet midlet; private final Game game; private final Command quitCommand; private final Command newGameCommand; private final Random random = new Random(); private int screenWidth,screenHeight; private int boardCellSize,boardSize,boardTop,boardLeft; private boolean playerIsCircle ,computerIsCircle; private int preCursorPosition,cursorPosition; private int computerMove = NO_MOVE; private int playerMove = NO_MOVE; private int computerGamesWonTally = 0; private int playerGamesWonTally = 0; private boolean isRestart; private Image[] aImage = {loadImage("/white.png"),//0 loadImage("/black.png"),//1 loadImage("/white2.png"),//2 loadImage("/black2.png"),//3 loadImage("/d1.png")};//4 public GameScreen(SVSBMIDlet midlet,boolean playerIsCircle) { this.midlet = midlet; this.playerIsCircle = playerIsCircle ; computerIsCircle = !playerIsCircle; game = new Game(random); initializeBoard();//调用地图初始化 quitCommand = new Command("退出",Command.EXIT,1);//配置游戏窗口下方命令栏 newGameCommand = new Command("新游戏",Command.SCREEN ,1); addCommand(quitCommand); addCommand(newGameCommand); setCommandListener(this); initialize();//调用游戏初始化函数 } private void initialize()//游戏初始化函数定义 { game.initialize(); preCursorPosition = cursorPosition =0 ; playerMove = NO_MOVE; boolean computerFirst = ((random.nextInt() & 1) == 0); if(computerFirst) { computerMove = game.makeComputerMove() ; } isRestart = true; repaint(); } public void paint(Graphics g) { if(game.isGameOver()) { paintGameOver(g); } else { paintGame(g); } } private void paintGame(Graphics g) //绘出游戏画面 { if(isRestart) { g.setColor(WHITE); g.fillRect(0,0,screenWidth,screenHeight); drawBoard(g); isRestart = false ; } drawCursor(g); if(playerMove != NO_MOVE) { drawPiece(g,playerIsCircle,playerMove); } if(computerMove != NO_MOVE) { drawPiece(g,computerIsCircle,computerMove); } } private void paintGameOver(Graphics g)//绘出游戏结束的画面 { Image gameOverImage = null ; if(game.isComputerWinner())//电脑胜利 { if(computerIsCircle)//傻大母胜利 { g.setColor(WHITE) ; g.fillRect(0,0,screenWidth,screenHeight); gameOverImage = loadImage("/lost.png");//电脑傻大母胜利图 g.drawImage(gameOverImage,0,0,g.TOP|g.LEFT ); } else//不死胜利 { g.setColor(WHITE) ; g.fillRect(0,0,screenWidth,screenHeight); gameOverImage = loadImage("/lost.png");//电脑不死胜利图 g.drawImage(gameOverImage,0,0,g.TOP|g.LEFT ); } } else if(game.isPlayerWinner())//玩家胜利 { if(playerIsCircle) //傻大母胜利 { g.setColor(WHITE) ; g.fillRect(0,0,screenWidth,screenHeight); gameOverImage = loadImage("/win.png");//玩家傻大母胜利图 g.drawImage(gameOverImage,0,0,g.TOP|g.LEFT); } else//不死胜利 { g.setColor(WHITE) ; g.fillRect(0,0,screenWidth,screenHeight); gameOverImage = loadImage("/win.png");//玩家不死胜利图 g.drawImage(gameOverImage,0,0,g.TOP|g.LEFT ); } } else { g.setColor(BLUE) ; g.fillRect(0,0,screenWidth,screenHeight); gameOverImage = loadImage("/stalemate.png");//drawn game 图 g.drawImage(gameOverImage,screenWidth/2,screenHeight/2,g.HCENTER|g.VCENTER ); } } public Image loadImage(String imgName) //加载图片的函数 { Image image = null ; try { image = Image.createImage(imgName); } catch(Exception e) { } return image; } public void commandAction(Command c,Displayable d) { if(c == quitCommand) { midlet.exit() ; } else if(c == newGameCommand) { initialize(); } } private void initializeBoard()//地图初始化函数调用 { screenWidth = getWidth(); screenHeight = getHeight(); if(screenWidth>screenHeight) { boardCellSize = (screenHeight - 2)/3 ; boardLeft = (screenWidth - boardCellSize*3)/2; boardTop = 1; } else { boardCellSize = (screenWidth -2)/3; boardLeft = 1; boardTop = (screenHeight - boardCellSize*3)/2; } } protected void keyPressed(int keyCode) { if(game.isGameOver()) { return; } int gameAction = getGameAction(keyCode); switch(gameAction) { case FIRE: doPlayerMove(); break; case RIGHT: doMoveCursor(1,0); break; case LEFT: doMoveCursor(-1,0); break; case UP: doMoveCursor(0,-1); break; case DOWN: doMoveCursor(0,1); break; default: break; } } private void doPlayerMove() { if(game.isFree(cursorPosition)) { //下面两句为玩家移动 game.makePlayerMove(cursorPosition); playerMove = cursorPosition; if(!game.isGameOver())//玩家移动完了电脑紧接着移动 { computerMove = game.makeComputerMove() ; } repaint(); } } private void doMoveCursor(int dx,int dy) { int newCursorPosition = cursorPosition + dx + 3*dy; if ((newCursorPosition>=0)&&(newCursorPosition<9)) { preCursorPosition = cursorPosition ; cursorPosition = newCursorPosition; repaint(); } } private void drawPiece(Graphics g,boolean isCircle,int pos) { int x = ((pos%3)*boardCellSize)+3; int y = ((pos/3)*boardCellSize)+3; if(isCircle) { drawCircle(g,x,y); } else { drawCross(g,x,y); } } private void drawCircle(Graphics g,int x,int y) { //Image aImage =null; //aImage = loadImage("/white2.png"); g.drawImage(aImage[2],x+boardLeft,y+boardTop,g.TOP|g.LEFT); } private void drawCross(Graphics g,int x,int y) { //Image aImage =null; //aImage = loadImage("/black2.png"); g.drawImage(aImage[3],x+boardLeft,y+boardTop,g.TOP|g.LEFT); } private void loadMap(Graphics g) { //Image mapImage = null; // mapImage = loadImage("/d1.png"); g.drawImage(aImage[4],0,0,g.TOP|g.LEFT); } private void drawBoard(Graphics g) { loadMap(g); //在这里加载地图,随即在三副地图中选一个 g.setColor(BLACK); for (int i = 0; i < 4; i++) {//画四根横线 g.fillRect(boardLeft, boardCellSize * i + boardTop, (boardCellSize * 3) + 2, 2);//最后一个2表示横线宽度 //画四根竖线 g.fillRect(boardCellSize * i + boardLeft, boardTop, 2, boardCellSize * 3); } } private void drawCursor(Graphics g) { // draw cursor at selected Player square. g.setColor(BLACK); g.drawRect(((preCursorPosition % 3) * boardCellSize) + 1 + boardLeft, ((preCursorPosition/3) * boardCellSize) + 1 + boardTop, boardCellSize - 2, boardCellSize - 2); // draw cursor at selected Player square. g.setColor(RED); g.drawRect(((cursorPosition % 3) * boardCellSize) + 1 + boardLeft, ((cursorPosition/3) * boardCellSize) + 1 + boardTop, boardCellSize - 2, boardCellSize - 2); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -