WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发MIDP1.0-五子棋1.1读后的修改

MIDP1.0-五子棋1.1读后的修改
作者:ftmcxh  来源:j2medev  发布时间:2005-11-3 14:06:47
首先感谢yinnowl提供的文章MIDP1.0-五子棋1.1,我是一个J2ME的初学者,看了yinnowl的这篇文章后,有些自己的想法,所以就冒昧和大家分享,请大家批评指正。

我的思路是把MIDP1.0-五子棋1.1改成在MIDP2.0上实现,同时感觉原文在判断胜负的时候比较慢做了下优化,原文链接请点击这里

关于详细的解释,原文已经都有,我这也不敢班门弄斧,只给出我自己用到的4个类:
1.MIDlet 主类Gobang.java
package hero;

import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Image;

public class Gobang
extends MIDlet
{

startForm startform;
private Display dispaly;
public static Gobang instance;

public Gobang() {
instance = this;
dispaly = Display.getDisplay(this);
}

protected void startApp() {
startform = new startForm();
dispaly.setCurrent(startform);

}

protected void pauseApp() {

}

protected void destroyApp(boolean uncondition) {

}

protected void quitApp(){
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;

}

//读取并添加图片
public static Image createImage(String name) {
Image aImage = null;
try {
aImage = Image.createImage(name);
}
catch (Exception e) {
}
return aImage;
}


}
2.棋子类 Chesses .java
package hero;

public class Chesses {
boolean isPlayer1;
public Chesses(){


}

public Chesses(boolean isPlayer1) {
this.isPlayer1=isPlayer1;
}

}
3.图形加载类 startForm.java (一个过渡界面)
package hero;

import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;

public class startForm extends Form implements CommandListener {
private static Command exitCmd;
private static Command okCmd;
private Image startImage;
protected Gobang gobang;
private GobangCanvas gobangcanvas;
//显示程序的启动画面//
public startForm() {
super("");
okCmd = new Command("进入", Command.OK, 1);
exitCmd = new Command("离开", Command.EXIT, 1);

Image startImage = Gobang.createImage("/res/me.png");

this.addCommand(okCmd);
this.addCommand(exitCmd);
this.setCommandListener(this);
//Graphics g=getGraphics();
this.append(new ImageItem(null, startImage, ImageItem.LAYOUT_CENTER, null)) ;
// this.append(startImage);

Display.getDisplay(gobang.instance).setCurrent(this);

}
public void commandAction(Command command, Displayable displayable) {
if (command == okCmd)
{
gobangcanvas = new GobangCanvas();
Display.getDisplay(gobang.instance).setCurrent(gobangcanvas);
gobangcanvas.startup();

}
if (command == exitCmd) {
gobang.instance.quitApp();
}
}
}
4.主要实现类
package hero;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;

public class GobangCanvas
extends GameCanvas
implements Runnable, CommandListener {
protected Gobang gobang;
private Graphics g;
int empty; //游戏界面到屏幕边缘的留空
int canvasW, canvasH; //画布的长和宽
int chessLength; //棋子的直径
int chessMapLength, chessMapGrid, chessGridLength; //棋盘的边长,棋盘一边格子数,每格宽度
int chessMapX, chessMapY; //棋盘左上角x,y坐标
int selectedX, selectedY; //选择框在棋盘格局上的x,y位置
boolean isPlayer1; //是否是玩家1
Chesses[][] chesses; //棋子数组
boolean newGame; //是否是新的游戏
boolean isplay; //是否游戏进行中
private Command exitCommand;
private Command startCommand;
int player1win, player2win;

public GobangCanvas() {
super(true);
newGame = true;
empty = 10;
canvasW = getWidth() - empty;
canvasH = getHeight() - empty;
chessMapGrid = 15;
chesses = new Chesses[chessMapGrid + 1][chessMapGrid + 1];
if (canvasW > canvasH) {
chessMapLength = canvasH - canvasH % chessMapGrid;
chessMapX = (canvasW - chessMapLength) / 2 + empty / 2;
chessMapY = (canvasH % chessMapGrid) / 2 + empty / 2;
}
else {
chessMapLength = canvasW - canvasW % chessMapGrid;
chessMapX = (canvasW % chessMapGrid) / 2 + empty / 2;
chessMapY = (canvasH - chessMapLength) / 2 + empty / 2;
}
chessGridLength = chessMapLength / chessMapGrid;
chessLength = chessGridLength - 1;
selectedX = selectedY = chessMapGrid / 2;
isPlayer1 = true;
exitCommand = new Command("退出", Command.EXIT, 1);
startCommand = new Command("开始", Command.SCREEN, 1);
addCommand(startComm

[1] [2] [3]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码