⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamecanvas.java

📁 我是一个j2ee,开发人员
💻 JAVA
字号:
package src;

//界面类
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
 
/**
 * 俄罗斯方块游戏界面
 */
public class GameCanvas extends Canvas implements Runnable{
     GameEngine engine = new GameEngine();
     int width;
     int height;
     /**游戏结束变量*/
     boolean gameOver = false;
     /**游戏暂停变量*/
     boolean isPaused = false;
     String pauseStr = "暂停";
     String continueStr = "继续";
     public GameCanvas(){
              //全屏幕
              setFullScreenMode(true);       
              width = getWidth();
              height = getHeight();
              //启动线程
              Thread th = new Thread(this);
              th.start();
     }
    
     protected void paint(Graphics g) {
              //清屏
              clearScreen(g);
              //绘制边框
              paintBoard(g);
              //绘制背景
              engine.paintMap(g);
              //绘制当前下落方块
              engine.paintBrick(g);
              //绘制下一个方块
              engine.paintNextBrick(g);
              //绘制关卡和游戏得分
              engine.paintLevelAndScore(g);
              //绘制游戏结束
              if(gameOver){
                       g.drawString("Game Over", 30, 85,
                                          Graphics.TOP | Graphics.LEFT);
              }
              //绘制暂停按钮文字
              if(isPaused){
                       g.drawString(pauseStr,width,height,
                                          Graphics.RIGHT | Graphics.BOTTOM);
              }else{
                       g.drawString(continueStr,width,height,
                                          Graphics.RIGHT | Graphics.BOTTOM);
              }
     }
    
     public void keyPressed(int keyCode){
              if(keyCode == -7){ //右软键,暂停控制
                       isPaused = !isPaused;
              }
              if(!isPaused){
                       int action = getGameAction(keyCode);
                       switch(action){
                       case UP:
                       case FIRE:
                                 engine.changeShape();
                                 break;
                       case LEFT:
                                 engine.moveToLeft();
                                 break;
                       case RIGHT:
                                 engine.moveToRight();
                                 break;
                       case DOWN:
                                 engine.highSpeed(); //加速
                                 break;
                       }
              }
              repaint();         
     }
    
     public void keyReleased(int keyCode){
              int action = getGameAction(keyCode);
              switch(action){
              case DOWN:
                       engine.normalSpeed(); //恢复正常速度
                       break;
              }
     }
    
     /**
      *绘制游戏区域边框
      * @param g画笔
      */
     private void paintBoard(Graphics g){
              g.drawRect(0,0,
                                 engine.MAXCOL * engine.CELLWIDTH,
                                 engine.MAXROW * engine.CELLWIDTH);
     }
    
     /**
      *清屏
      * @param g画笔
      */
     private void clearScreen(Graphics g){
              g.setColor(0xffffff);
              g.fillRect(0,0,width,height);
              g.setColor(0);
     }
 
     public void run() {
              try{
                       while(true){
                                 //延时
                                 Thread.sleep(engine.speed / engine.times);
                                 //逻辑处理
                                 //如果不处于暂停状态
                                 if(!isPaused){
                                          //方块下落
                                          engine.brickDown();
                                          //游戏是否结束
                                          if(engine.isGameOver()){
                                                   //显示游戏结束
                                                   gameOver = true;
                                                   //重画
                                                   repaint();
                                                   //结束线程
                                                   break;
                                          }
                                 }
                                 //重绘
                                 repaint();
                       }
              }catch(Exception e){
                       e.printStackTrace();
              }                
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -