五子棋手机游戏开发需要安装,j2me环境,MyManagerPro.exe开发工具
需要创建三个类,棋子类,棋盘类,界面类
如果在jbuilder中开发,工具中自带有j2me插件功能,如果在myEclipse中开发,需要下载j2me插件
此类为Gobang.java
package com.occo.j2me.game.gobang;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
public class Gobang extends MIDlet {
GobangCanvas gobang;//定义游戏界面的Canvas类GobangCanvas的对象gobang
public Gobang() {
super();
gobang=new GobangCanvas(this);//生成GobangCanvas类的对象gobang
}
protected void startApp(){
Display.getDisplay(this).setCurrent(gobang);
//在屏幕上绘出游戏见面gobang
}
protected void pauseApp(){
}
protected void destroyApp(boolean arg0){
}
}
此类为Chesses.java
package com.occo.j2me.game.gobang;
public class Chesses {
boolean isPlayer1;
public Chesses() {
}
public Chesses(boolean isPlayer1) {
this.isPlayer1=isPlayer1;
}
}
此类为GobangCanvas类
package com.occo.j2me.game.gobang;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
public class GobangCanvas extends Canvas implements CommandListener{
protected Gobang gobang;
public GobangCanvas(){
}
public GobangCanvas(Gobang gobang){
this.gobang=gobang;
}
protected void paint(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;//是否是新的游戏
public GobangCanvas(Gobang gobang){
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;
}
/**
*画棋盘代码
*最先要绘制的是棋盘,棋盘是正方形,但屏幕有矩形的,所以棋盘边长要按短边计,但短边未必是棋盘格子数的整数倍,因此
* 棋盘边长 = 短边 - 短边 % 格子数
*因为棋盘要居中,所以在算左上角坐标时,记得也要把留空(empty)除以2,以下是画棋盘的代码:
*/
protected void paintMap(Graphics g){
for(int i=0;i
/**
*绘制选择框代码
*/
protected void paintSelected(Graphics g){
g.setColor(0,0,255);
g.drawRect(chessMapX+selectedX*chessGridLength-chessGridLength/2,
chessMapY+selectedY*chessGridLength-chessGridLength/2,
chessGridLength,chessGridLength);
}
/**
*接着是按照棋子二维数组绘制已经下了的棋子。玩家每下一次棋,就修改数组,在重新绘图的时候就能绘出
*/
protected void paintChesses(Graphics g){
for(int i=0;i
/**
*最后是绘制玩家提示框,并且把所有部件的绘制汇总在paint()方法中,注意绘制的顺序,显而易见,应该先绘制提示框-棋* *盘-选择框-棋子:
*/
protected void paintPlayer(Graphics g,boolean isPlayer1){
if(isPlayer1)
g.setColor(255,255,255);
else
g.setColor(255,0,0);
g.drawRect(1,1,getWidth()-2,getHeight()-2);
g.drawRect(2,2,getWidth()-4,getHeight()-4);
g.drawRect(3,3,getWidth()-6,getHeight()-6);
}
protected void paint(Graphics g) {
g.setColor(0x00000000);
g.fillRect(0, 0, getWidth(), getHeight());
paintPlayer(g,isPlayer1);
paintMap(g);
paintSelected(g);
paintChesses(g);
}
/**
*响应玩家操作
*接下来应该添加命令按钮和游戏操作控制。我们在游戏中需要有两个按钮,重新开始和退出,此外还必须接收玩家控制选择框*的操作上下左右和着棋,添加代码到GobangCanvas.java:
*/
Command exitCmd;
Command restartCmd;
public GobangCanvas(Gobang gobang){
...
restartCmd = new Command("重新开始", Command.SCREEN, 0);
exitCmd = new Command("退出", Command.EXIT, 0);
addCommand(restartCmd);
addCommand(exitCmd);
setCommandListener(this);
}
private void init(){
if(newGame){
&nb