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入门到精通教程
查看: 675|回复: 0

Android 扫雷游戏(四) - Android学习

[复制链接]

该用户从未签到

发表于 2011-10-26 16:55:07 | 显示全部楼层 |阅读模式
       决定策略

  让我们回到游戏最重要的方面,来实现这个游戏。我们在这个部分讨论关于游戏部分中介过的功能。我们按照顺序一个一个实现(其中之一已经在模拟左右键中介绍过了)

  完成流程图

  扫雷游戏最重要的部分是处理用户操作。首先等待并接受用户输入,然后恰当的处理。我相信与其我用文字来解释,不如我用图表来解释的效果更好,图表的说服力更强。整个循环用下面的流程图表示:




       从第一次点击开始


  之前我们说过,计时器从第一次点击开始(打开第一个砖块),在按下新游戏按钮时不会开始计时。这一点对于控制时间来说非常重要,为了实现这个功能,我们只需创建一个布尔变量,只要接受到点击事件就检查此变量,开始调用Handler,然后改变此变量的值。这部分代码如下:


java代码:
private boolean isTimerStarted; // check if timer already started or not



blocks[row][column].setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View view)

{

// start timer on first click

if (!isTimerStarted)

{

startTimer();

isTimerStarted = true;

}

...

}

});
复制代码
       第一次点击没有地雷

  用户的第一次点击不应该触发地雷,否则一开始就要猜测。因此我们在第一次点击后设置地雷。我们在用户刚刚打开的砖块之外的部分随机设置地雷(通过随机设置行和列的数字)。之后为所有砖块计算邻近的地雷数目生成数字砖块。这部分代码如下:

java代码:
private boolean areMinesSet; // check if mines are planted in blocks



blocks[row][column].setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View view)

{

...

// set mines on first click

if (!areMinesSet)

{

areMinesSet = true;

setMines(currentRow, currentColumn);

}

}

});



private void setMines(int currentRow, int currentColumn)

{

// set mines excluding the location where user clicked

Random rand = new Random();

int mineRow, mineColumn;



for (int row = 0; row < totalNumberOfMines; row++)

{

mineRow = rand.nextInt(numberOfColumnsInMineField);

mineColumn = rand.nextInt(numberOfRowsInMineField);

if ((mineRow + 1 != currentColumn) || (mineColumn + 1 != currentRow))

{

if (blocks[mineColumn + 1][mineRow + 1].hasMine())

{

row--; // mine is already there, don't repeat for same block

}

// plant mine at this location

blocks[mineColumn + 1][mineRow + 1].plantMine();

}

// exclude the user clicked location

else

{

row--;

}

}



int nearByMineCount;



// count number of mines in surrounding blocks

...

}
复制代码
系列之Android 扫雷游戏(一)的帖子链接http://www.eoeandroid.com/thread-102103-1-1.html
系列之Android 扫雷游戏(二)的帖子链接http://www.eoeandroid.com/thread-102105-1-1.html
系列之Android 扫雷游戏(三)的帖子链接http://www.eoeandroid.com/thread-102116-1-1.html
系列之Android 扫雷游戏(五)的帖子链接http://www.eoeandroid.com/thread-102273-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 19:48 , Processed in 0.325515 second(s), 37 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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