当前页面: 开发资料首页 → J2ME 专题 → TilePuzzle剖析(3)
TilePuzzle剖析(3)
摘要: TilePuzzle剖析(3)
TilePuzzle剖析(3)
作者:
前面我们看到了在Board类构造函数中的最有一条语句:
setState(INITIALIZED);
该语句调用setState()函数,其中参数表示游戏的运行状态,定义在Board类的全局变量处:
// state variablesstatic final int INITIALIZED = 0;
//表示初始化static final int PLAYING = 1;
//表示正在运行static final int WON = 2;
//表示取得胜利int gameState;
//记录游戏状态下面我们还是看一看setState函数吧!
void setState(int ns) {
gameState = ns;
//纪录游戏状态 switch (gameState) {
//根据游戏状态进行命令显示 case INITIALIZED:
//初始化状态 addCommand(cmd[CMD_ABOUT]);
//增加about removeCommand(cmd[CMD_RESET]);
//去掉reset addCommand(cmd[CMD_START]);
//增加start addCommand(cmd[CMD_UNLOCK]);
//增加unlock addCommand(cmd[CMD_EXIT]);
//增加exit addCommand(cmd[CMD_OPTIONS]);
//增加options break;
case PLAYING:
//正在游戏状态 addCommand(cmd[CMD_ABOUT]);
//增加about addCommand(cmd[CMD_RESET]);
//增加reset removeCommand(cmd[CMD_START]);
//去掉start removeCommand(cmd[CMD_UNLOCK]);
//去掉unlock addCommand(cmd[CMD_EXIT]);
//增加exit addCommand(cmd[CMD_OPTIONS]);
//增加options break;
case WON:
//胜利 addCommand(cmd[CMD_ABOUT]);
//增加about removeCommand(cmd[CMD_RESET]);
//去除reset addCommand(cmd[CMD_START]);
//增加start addCommand(cmd[CMD_UNLOCK]);
//增加unlock addCommand(cmd[CMD_EXIT]);
//增加exit addCommand(cmd[CMD_OPTIONS]);
//增加options break;
}
}
最终通过命令处理来执行相应的动作:
public void commandAction(Command c, Displayable d) {
//命令处理函数 switch (((BoardCommand) c).tag) {
//根据得到的命令标签筛选动作 case CMD_ABOUT:
//点击about About.showAbout(Display.getDisplay(midlet));
break;
case CMD_EXIT:
//点击exit midlet.notifyDestroyed();
break;
case CMD_OPTIONS:
//点击option dpy.setCurrent(options);
break;
case CMD_RESET:
//点击reset cheated = false;
resetGrid();
setState(INITIALIZED);
repaint();
break;
case CMD_START:
//点击start cheated = false;
if (options.funny) {
rearrangeFunnily(options.hard);
} else {
randomize(options.hard);
}
setState(PLAYING);
//设定状态为进行游戏 repaint();
//调用paint函数,更新游戏画面 break;
case CMD_UNLOCK:
//点击unlock cheated = true;
setState(PLAYING);
//设定状态为进行游戏 repaint();
//调用paint函数,更新游戏画面 break;
}
}
要想知道屏幕会怎样显示,我们还得研究一下paint()函数。
public void paint(Graphics g) {
//清屏g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
//绘制方框 g.translate(gridx, gridy);
g.setColor(0);
g.drawRect(-2, -2, gridw*cellw + 2, gridh*cellh + 2);
//更新每一个小方块,调用piece.paint() for (int j = 0; j < gridw; j++) {
for (int k = 0; k < gridh; k++) {
grid[j][k].paint(g);
}
}
//如果游戏状态为won,那么显示胜利 if (gameState == WON) {
g.translate(-g.getTranslateX(), -g.getTranslateY());
g.setColor(0);
g.setFont(Font.getDefaultFont());
g.drawString(
(cheated ? "CHEATER!" : "YOU WIN!"),
getWidth() / 2,
getHeight() - 1,
Graphics.BOTTOM|Graphics.HCENTER);
}
}