J2ME游戏代码示例——俄罗斯方块(1)

下面是我写的一个简单的俄罗斯方块游戏代码,代码中主要包含3个类:

lTerrisMIDlet——MIDlet类

lGameCanvas——游戏界面类

lGameEngine——游戏逻辑类

使用WTK2.5.1运行通过.

具体代码如下:

//MIDlet类
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;

public class TerrisMIDlet extends MIDlet {
     public TerrisMIDlet() {
          Display.getDisplay(this).setCurrent(new GameCanvas());
     }
     protected void destroyApp(boolean arg0){}
     protected void pauseApp() {}
     protected void startApp() {}
}

//界面类
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

/**

* 俄罗斯方块游戏界面

*/
public class GameCanvas extends Canvasimplements 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;
        }
   }
   /**

时间: 2024-12-08 03:00:46

J2ME游戏代码示例——俄罗斯方块(1)的相关文章

J2ME游戏代码示例——俄罗斯方块(2)

* 绘制当前下落的方块 * @param g 画笔 */ public void paintBrick(Graphics g){ for(int row = 0;row < 4;row++){ for(int col = 0;col < 4;col++){ //判断是否绘制 if(brick[brickType][index][row][col] == 1){ int cx = (cCol + col) * CELLWIDTH; int cy = (cRow + row) * CELLWIDT

j2me游戏菜单代码

问题描述 看了一下这个代码有的地方看不明白哪位大侠给注释一下就是在每个函数写上是干什么的我来回的看逻辑混乱了--这只是一个菜单类midlet没发~还有如果要把菜单加上logo和背景图片怎么弄?importjava.util.Vector;importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Font;importjavax.microedition.lcdui.Graphics;publicclassMenuCa

J2ME游戏APIのGameCanvas游戏画布

GameCanvas是MIDP2.0的一个最主要元素,提高了J2ME游戏开发的方便性,相对于MIDP1.0,降低了J2ME游戏开发的难度跟成本,本文专门详述了GameCanvas游戏画布的有关内容,对GameCanvas有个大概的剖析. 一.GameCanvas中的主要方法.方法原型跟方法的作用如下总结: 1.方法GameCanvas,方法原型protected GameCanvas(boolean suppressKeyEvents),作用:构造方法,参数 suppressKeyEvents

State模式在J2ME游戏设计中的应用(需要源代码留下e-mail)

设计|源代码    游戏设计中的状态转换是一个既是非常重要又十分复杂的部分.我前几天做移植的时候看到一个public void keyPressed(int keyCode)中间竟然有着近2000千行的代码,这样的话冗长的代码不仅不符合OO的思更加严重的是会打扰我们的程序思路.这两天运用State模式做了一个J2ME游戏中的状态转换由于只是一个实验的例子所以只做了开始菜单和帮助的转换,在这个框架下再加入其他的状态实际就是十分的简单的了. 现在DEMO中只有两个状态,两种状态下keyPressed

j2me游戏引擎的基本构成

游戏引擎在国内还是有一批人走在前沿的,但出于种种的原因发展的并不是很好,并且引擎的神秘面纱和不可揣测的高难度使一些人还没有正式开始就已经打了退堂鼓.通常我们说游戏引擎的时候总是想到3D游戏引擎,的确游戏引擎发展到今天将它发挥到极致的正是3D引擎,但在3D引擎之前其实还是有很多2D,2.5D游戏引擎的,它们现在虽然看起来很弱,但却为3D引擎的产生提供了巨大的理论支持. 原理上讲引擎的结构真的很简单,并没有大多数人想的那么复杂.本篇文章不会讲更复杂的引擎,仅仅针对j2me来讲,但麻雀虽小五脏俱全,我

J2ME游戏开发技巧

不久前我曾用J2ME开发了一个MotoT720下的彩色游戏-宝石方块(GridOne).开发过程中积累了一些经验,现在写出来与大家分享. 使用双缓冲避免屏幕闪烁 双缓冲技术是编写J2ME游戏程序的关键技术之一.实际上,双缓冲技术是计算机动画的一项传统技术.造成屏幕闪烁的主要原因在于,画面在显示的同时,程序又在改变它,于是画面闪烁.解决办法就是在内存中开辟一片区域作为后台画面,程序对它更新,修改,完成后再显示它.这样被显示的图像永远是已经完全画好的图像,程序修改的将不是正在被显示的图像.当然还有其

JavaScript编写检测用户所使用的浏览器的代码示例_javascript技巧

能力检测在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数首付存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本. 怪癖检测怪癖实际上是浏览器实现中存在的bug,例如早期的webkit中就存在一个怪癖,即它会再for-in循环中返回被隐藏的属性.怪癖检测通常涉及到运行一段代码,然后确定浏览器是否存在某个怪癖.由于怪癖检测无法精确地检测特定的浏览器和版本. 用户代

J2ME游戏卡的问题....

问题描述 做了一个J2ME游戏在MOTOV8和NOKIA6210上运行没问题移植到N70上就会卡游戏比较大500K左右V8测试虚拟内存好像是1M左右N70好像是512K游戏中的逻辑判断以及绘制的东西也挺多的想问下这游戏在N70上卡的原因到底是我逻辑和绘制问题呢还是JAR包太大? 解决方案 解决方案二:这个吗?我也不知道解决方案三:J2ME开发游戏的应该很少吧?用Java来开发的话,是出于平台考虑,而不是效率了解决方案四:是能不能运行问题解决方案五:不太清楚解决方案六:你描述的不是很清楚,但是卡的

Kafka JAVA客户端代码示例--高级应用

什么时间使用高级应用? 针对一个消息读取多次 在一个process中,仅仅处理一个topic中的一组partitions 使用事务,确保每个消息只被处理一次 使用高级应用(调用较底层函数)的缺点?     SimpleConsumer需要做很多额外的工作(在以groups方式进行消息处理时不需要) 在应用程序中跟踪上次消息处理的offset 确定一个topic partition的lead broker 手工处理broker leander的改变 使用底层函数(SimpleConsumer)开发