J2ME游戏代码示例(一)——俄罗斯方块
作者:陈跃峰
下面是我写的一个简单的俄罗斯方块游戏代码,代码中主要包含3个类:
l TerrisMIDlet——MIDlet类
l GameCanvas——游戏界面类
l GameEngine——游戏逻辑类
使用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 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();
}
}
}
//游戏逻辑类
import java.util.*;
import javax.microedition.lcdui.*;
/**
* 游戏数据和逻辑类
* 未实现关卡变化的逻辑
*/
public class GameEngine {
/**方块的信息, 0代表无内容,1代表有内容 */
int[][][][] brick = {
{
{
{ 0, 1, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 0, 0, 0 },
{ 0, 1, 1, 1 },
{ 0, 1, 0, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 1, 1, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{ 1, 1, 1, 0 },
{ 0, 0, 0, 0 }
}
},
{
{
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 },
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 }
},
{
{ 0, 0, 0, 0 },
{ 0, 1, 0, 0 },
{ 0, 1, 1, 1 },
{ 0, 0, 0, 0 }
},
{
{ 0, 0, 0, 0 },
{ 0, 1, 1, 0 },
{ 0, 1, 0, 0 },
{ 0, 1, 0, 0 }
},
{
{ 0, 0, 0, 0 },
{ 1, 1, 1, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 0, 0 }
}
},
{
{
{0,1,0,0},
{0,1,0,0},
{0,1,0,0},
{0,1,0,0}
},
{
{0,0,0,0},
{1,1,1,1},
{0,0,0,0},
{0,0,0,0}
}
},
{
{
{0,0,0,0},
{0,1,1,0},
{0,1,1,0},
{0,0,0,0}
}
},
{
{
{0,0,1,0},
{0,1,1,0},
{0,1,0,0},
{0,0,0,0}
},
{
{0,0,0,0},
{0,1,1,0},
{0,0,1,1},
{0,0,0,0}
}
},
{
{
{0,1,0,0},
{0,1,1,0},
{0,0,1,0},
{0,0,0,0}
},
{
{0,0,0,0},
{0,1,1,0},
{1,1,0,0},
{0,0,0,0}
}
},
{
{
{0,0,0,0},
{0,0,1,0},
{0,1,1,1},
{0,0,0,0}
},
{
{0,0,0,0},
{0,1,0,0},
{0,1,1,0},
{0,1,0,0}
},
{
{0,0,0,0},
{0,1,1,1},
{0,0,1,0},
{0,0,0,0}
},
{
{0,0,1,0},
{0,1,1,0},
{0,0,1,0},
{0,0,0,0}
}
}
};
/**行数*/
final int MAXROW = 19;
/**列数*/
final int MAXCOL = 10;
/**
* 游戏界面信息,0代表无内容,1代表有内容
*/
int[][] map = new int[MAXROW][MAXCOL];
/**每个单元格的宽度和高度*/
public static final int CELLWIDTH = 10;
/**下一个方块的类型*/
int nextBrickType = 0;
//当前下落的方块
/**当前格子的类型*/
int brickType;
/**当前变形信息*/
int index;
/**当前行*/
int cRow;
/**当前列*/
int cCol;
/**速度*/
int speed = 500;
/**加速度*/
int times = 1;
/**当前关卡*/
int level = 0;
/**积分,每消一行加10分*/
int score = 0;
Random r = new Random();
public GameEngine(){
//产生方块
&nb
分享到:
相关推荐
java俄罗斯方块 java凭图游戏 Java利用DES私钥对称加密代码实例 Java加密解密工具集 JCT v1.0源码包.rar Java半透明图片实现的步骤及源代码.rar Java右键弹出菜单源码 Java吃豆子游戏源代码.rar Java图片加水印,...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理 这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...
java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定...
java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定...