|
决定策略
让我们回到游戏最重要的方面,来实现这个游戏。我们在这个部分讨论关于游戏部分中介过的功能。我们按照顺序一个一个实现(其中之一已经在模拟左右键中介绍过了)
完成流程图
扫雷游戏最重要的部分是处理用户操作。首先等待并接受用户输入,然后恰当的处理。我相信与其我用文字来解释,不如我用图表来解释的效果更好,图表的说服力更强。整个循环用下面的流程图表示:
从第一次点击开始
之前我们说过,计时器从第一次点击开始(打开第一个砖块),在按下新游戏按钮时不会开始计时。这一点对于控制时间来说非常重要,为了实现这个功能,我们只需创建一个布尔变量,只要接受到点击事件就检查此变量,开始调用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
|