|
android游戏开发之连连看(7)
以下代码接在上一篇文件《android开发—连连看开发技巧(6)》的后面
// 触碰游戏区域的处理方法
private void gameViewTouchUp(MotionEvent e)
{
this.gameView.postInvalidate();
}
// 以gameTime作为剩余时间开始或恢复游戏
private void startGame(int gameTime)
{
// 如果之前的timer还未取消,取消timer
if (this.timer != null)
{
stopTimer();
}
// 重新设置游戏时间
this.gameTime = gameTime;
// 如果游戏剩余时间与总游戏时间相等,即为重新开始新游戏
if(gameTime == GameConf.DEFAULT_TIME)
{
// 开始新的游戏游戏
gameView.startGame();
}
isPlaying = true;
this.timer = new Timer();
// 启动计时器
this.timer.schedule(new TimerTask()
{
public void run()
{
handler.sendEmptyMessage(0x123);
}
}, 0, 1000);
// 将选中方块设为null。
this.selected = null;
}
/**
* 成功连接后处理
*
* @param linkInfo 连接信息
* @param prePiece 前一个选中方块
* @param currentPiece 当前选择方块
* @param pieces 系统中还剩的全部方块
*/
private void handleSuccessLink(LinkInfo linkInfo, Piece prePiece,
Piece currentPiece, Piece[][] pieces) //④
{
// 它们可以相连, 让GamePanel处理LinkInfo
this.gameView.setLinkInfo(linkInfo);
// 将gameView中的选中方块设为null
this.gameView.setSelectedPiece(null);
this.gameView.postInvalidate();
// 将两个Piece对象从数组中删除
pieces[prePiece.getIndexX()][prePiece.getIndexY()] = null;
pieces[currentPiece.getIndexX()][currentPiece.getIndexY()] = null;
// 将选中的方块设置null。
this.selected = null;
// 手机振动(100毫秒)
this.vibrator.vibrate(100);
// 判断是否还有剩下的方块, 如果没有, 游戏胜利
if (!this.gameService.hasPieces())
{
// 游戏胜利
this.successDialog.show();
// 停止定时器
stopTimer();
// 更改游戏状态
isPlaying = false;
}
}
// 创建对话框的工具方法
private AlertDialog.Builder createDialog(String title, String message,
int imageResource)
{
return new AlertDialog.Builder(this).setTitle(title)
.setMessage(message).setIcon(imageResource);
}
private void stopTimer()
{
// 停止定时器
this.timer.cancel();
this.timer = null;
}
}
上面程序中的init()方法中粗体字代码负责为gameView组件的触碰事件绑定事件监听器,当用户触碰该区域时,事件监听器将会被触发;程序中①号粗体字代码定义的gameViewTouchDown方法负责处理触碰事件。它会根据先根据触碰点计算出触碰的方块,如上②号粗体字代码所示;接下来该方法会判断是否之前已有选中的方块:如果没有,直接将当前方块设为选中方块;如果有,判断两个方块是否可以相连,如上③号粗体字代码所示。
如果两个方块可以相连,程序将会从Piece[][]数组中删除这两个方块,该逻辑由上面程序中④号粗体字代码定义的handleSuccessLink()方法完成。
除此之外,该程序为了控制时间流逝,程序定义了一个计时器,该计时器会每隔1秒发送一条消息,程序将会根据该消息减少游戏的剩余时间。上面程序中startGame(int gameTime)方法内的粗体字代码负责启动计时器。该消息将会交给程序的Handler对象处理,如上面程序中开始部分的代码。
该Link Activity用的两个类:
1、GameConf:负责管理游戏的初始化设置信息。
2、GameService:负责游戏的逻辑实现。
上面两个工具类中GameConf只是一个简单的设置类,此处不再给出介绍,读者自行参考光盘中的代码即可。(未完.摘自[疯狂Android讲义.李刚])
原文出处:疯狂软件教育http://www.fkjava.org/newsView-417.html |
|