Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 555|回复: 0

android连连看开发技巧(7)

[复制链接]

该用户从未签到

发表于 2012-3-31 14:01:37 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-12 01:03 , Processed in 0.339621 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表