CrazyPuzzle的完整源代码,整个架构已经基本打好,但因为某些原因,部分功能尚未实现,在此一并贴出来.如果各位朋友有兴趣,可自行完善相应功能.
//
------------------------------
// MyGameCanvas.java
// ------------------------------
package src;
import javax.microedition.lcdui.game. * ;
import javax.microedition.lcdui. * ;
import javax.microedition.media. * ; // 西门子C65不支持,故无法以此方法播放声音,在此不插入
import java.util. * ;
import java.io. * ;
public class MyGameCanvas extends GameCanvas implements CommandListener
... {
/** *//** 代表标题显示状态的常量 */
private static final short STAGE_TITLE = 0;
/** *//** 代表关卡开始显示状态的常量 */
private static final short STAGE_START = 1;
/** *//** 代表关卡显示状态的常量 */
private static final short STAGE_PLAYING = 2;
/** *//** 代表游戏中显示完整图案的常量 */
private static final short STAGE_PLAYING_SEE_PERFECT_PIC = 3;
/** *//** 代表关卡结束显示状态的常数 */
private static final short STAGE_OVER = 5;
/** *//** 代表过关显示状态的常量 */
private static final short STAGE_CLEAR = 7;
/** *//** 代表全关卡过关显示状态的常量 */
private static final short ALL_STAGE_CLEAR = 9;
/** *//** 代表游戏结束的常量 */
private static final short GAME_END = 10;
/** *//** 最大关卡数 */
private static final short MAX_STAGE = 5;
/** *//** 正常模式常量 */
public static final short MODE_NORMAL = 1;
/** *//** 极限模式常量 */
public static final short MODE_UTMOST = 2;
/** *//** 储存现在之显示状态的变量 */
private short gameState;
/** *//** 储存游戏模式的变量 */
private short gameMode;
/** *//** 储存目前的关卡 */
private short stageNum;
/** *//** 储存已过关的关卡 */
private short stagePassedNum;
/** *//** 储存剩余的时间 */
private long lastTime;
/** *//** 储存损耗的时间,普通模式用到 */
private long usedTime;
/** *//** 储存单关通过的最短时间 */
private long quicklyPassOneStageTime;
/** *//** 游戏过程暂停状态所用的标志 */
private boolean isGamePaused;
/** *//** 储存显示的对象 */
private Display display;
/** *//** 储存音乐的对象 */
private Player player;//西门子C65不支持
/** *//** 储存主类的对象,方便进行退出之类的操作 */
private CrazyPuzzleMIDlet mainMIDlet;
/** *//**层管理*/
private LayerManager lm;
/** *//**背景*/
private TiledLayer puzzlePic;
/** *//**建一个画图对象*/
private Graphics g;
/** *//**时间倒计时,类为继承*/
private TimeCounterTask timeCounter;
/** *//** 储存各关卡谜题资讯的变量 */
private static final short[][] PUZZLE_MAP = new short[][] ...{
...{ //关卡1的谜题
1, 5, 9, 13,
2, 6, 10, 14,
3, 7, 11, 15,
4, 8, 12, 0
},
...{ //关卡2的谜题
4, 3, 2, 1,
8, 7, 6, 5,
12, 11, 10, 9,
15, 13, 14, 0
},
...{ //关卡3的谜题
12, 8, 4, 1,
15, 9, 5, 2,
13, 10, 6, 3,
14, 11, 7, 0
},
...{ //关卡4的谜题
14, 15, 12, 13,
8, 9, 10, 11,
4, 5, 6, 7,
1, 2, 3, 0
},
...{ //关卡5的谜题
14, 12, 15, 13,
11, 10, 9, 8,
7, 6, 5, 4,
3, 2, 1, 0
}
};
//norains:*构造函数*
public MyGameCanvas(Display disp,CrazyPuzzleMIDlet m,short mode)
...{
super(false);
this.display=disp;
this.mainMIDlet=m;
this.gameMode=mode;
stageNum=1;
stagePassedNum=0;
lastTime=0;
usedTime=0;
quicklyPassOneStageTime=0;
isGamePaused=false;
g=this.getGraphics();
gameState=STAGE_TITLE;
this.setFullScreenMode(true);//全屏幕
//增加命令
//this.addCommand(new Command("重新开始",Command.OK,1));
this.addCommand(new Command("取消",Command.BACK,1));
this.addCommand(new Command("返回列表",Command.BACK,1));
this.addCommand(new Command("退出游戏",Command.EXIT,1));
this.setCommandListener(this);
render();
}
public void commandAction(Command command, Displayable arg1)
...{
// TODO Auto-generated method stub
String cmd=command.getLabel();
if(cmd.equals("重新开始"))
...{
//不知为何,下面这段代码无法正常关闭音乐流,无论在模拟器还是在实体机上
//造成的后果是两首音乐一起播放,以致于系统变慢,无法正常游戏
//估计产生原因是上一首歌还没退出来,下一首就播放了
//关闭本节声音播放,以方便下一关播放新音乐
gameState=STAGE_TITLE;
try
...{
player.stop();
}
catch(Exception exp)
...{}
render();
}
else if(cmd.equals("返回列表"))
...{
if(player!=null)
...{
//关闭本节声音播放
try
...{
player.stop();
&
// MyGameCanvas.java
// ------------------------------
package src;
import javax.microedition.lcdui.game. * ;
import javax.microedition.lcdui. * ;
import javax.microedition.media. * ; // 西门子C65不支持,故无法以此方法播放声音,在此不插入
import java.util. * ;
import java.io. * ;
public class MyGameCanvas extends GameCanvas implements CommandListener
... {
/** *//** 代表标题显示状态的常量 */
private static final short STAGE_TITLE = 0;
/** *//** 代表关卡开始显示状态的常量 */
private static final short STAGE_START = 1;
/** *//** 代表关卡显示状态的常量 */
private static final short STAGE_PLAYING = 2;
/** *//** 代表游戏中显示完整图案的常量 */
private static final short STAGE_PLAYING_SEE_PERFECT_PIC = 3;
/** *//** 代表关卡结束显示状态的常数 */
private static final short STAGE_OVER = 5;
/** *//** 代表过关显示状态的常量 */
private static final short STAGE_CLEAR = 7;
/** *//** 代表全关卡过关显示状态的常量 */
private static final short ALL_STAGE_CLEAR = 9;
/** *//** 代表游戏结束的常量 */
private static final short GAME_END = 10;
/** *//** 最大关卡数 */
private static final short MAX_STAGE = 5;
/** *//** 正常模式常量 */
public static final short MODE_NORMAL = 1;
/** *//** 极限模式常量 */
public static final short MODE_UTMOST = 2;
/** *//** 储存现在之显示状态的变量 */
private short gameState;
/** *//** 储存游戏模式的变量 */
private short gameMode;
/** *//** 储存目前的关卡 */
private short stageNum;
/** *//** 储存已过关的关卡 */
private short stagePassedNum;
/** *//** 储存剩余的时间 */
private long lastTime;
/** *//** 储存损耗的时间,普通模式用到 */
private long usedTime;
/** *//** 储存单关通过的最短时间 */
private long quicklyPassOneStageTime;
/** *//** 游戏过程暂停状态所用的标志 */
private boolean isGamePaused;
/** *//** 储存显示的对象 */
private Display display;
/** *//** 储存音乐的对象 */
private Player player;//西门子C65不支持
/** *//** 储存主类的对象,方便进行退出之类的操作 */
private CrazyPuzzleMIDlet mainMIDlet;
/** *//**层管理*/
private LayerManager lm;
/** *//**背景*/
private TiledLayer puzzlePic;
/** *//**建一个画图对象*/
private Graphics g;
/** *//**时间倒计时,类为继承*/
private TimeCounterTask timeCounter;
/** *//** 储存各关卡谜题资讯的变量 */
private static final short[][] PUZZLE_MAP = new short[][] ...{
...{ //关卡1的谜题
1, 5, 9, 13,
2, 6, 10, 14,
3, 7, 11, 15,
4, 8, 12, 0
},
...{ //关卡2的谜题
4, 3, 2, 1,
8, 7, 6, 5,
12, 11, 10, 9,
15, 13, 14, 0
},
...{ //关卡3的谜题
12, 8, 4, 1,
15, 9, 5, 2,
13, 10, 6, 3,
14, 11, 7, 0
},
...{ //关卡4的谜题
14, 15, 12, 13,
8, 9, 10, 11,
4, 5, 6, 7,
1, 2, 3, 0
},
...{ //关卡5的谜题
14, 12, 15, 13,
11, 10, 9, 8,
7, 6, 5, 4,
3, 2, 1, 0
}
};
//norains:*构造函数*
public MyGameCanvas(Display disp,CrazyPuzzleMIDlet m,short mode)
...{
super(false);
this.display=disp;
this.mainMIDlet=m;
this.gameMode=mode;
stageNum=1;
stagePassedNum=0;
lastTime=0;
usedTime=0;
quicklyPassOneStageTime=0;
isGamePaused=false;
g=this.getGraphics();
gameState=STAGE_TITLE;
this.setFullScreenMode(true);//全屏幕
//增加命令
//this.addCommand(new Command("重新开始",Command.OK,1));
this.addCommand(new Command("取消",Command.BACK,1));
this.addCommand(new Command("返回列表",Command.BACK,1));
this.addCommand(new Command("退出游戏",Command.EXIT,1));
this.setCommandListener(this);
render();
}
public void commandAction(Command command, Displayable arg1)
...{
// TODO Auto-generated method stub
String cmd=command.getLabel();
if(cmd.equals("重新开始"))
...{
//不知为何,下面这段代码无法正常关闭音乐流,无论在模拟器还是在实体机上
//造成的后果是两首音乐一起播放,以致于系统变慢,无法正常游戏
//估计产生原因是上一首歌还没退出来,下一首就播放了
//关闭本节声音播放,以方便下一关播放新音乐
gameState=STAGE_TITLE;
try
...{
player.stop();
}
catch(Exception exp)
...{}
render();
}
else if(cmd.equals("返回列表"))
...{
if(player!=null)
...{
//关闭本节声音播放
try
...{
player.stop();
&
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow