主要内容
计算机编程
记忆游戏:得分和获胜
我们的 “记忆” 游戏几乎完成了!它只缺少一件事:计分。这里我们回顾一下部分游戏规则:
游戏的目标是在最少尝试次数中将所有卡牌面朝上翻转(即,找到所有匹配的图像对)。这意味着尝试次数越少,得分越高。
如何跟踪尝试次数?好的,每次你翻转两个卡牌时都会 进行一次 “try”,这对应于检查
flippedTiles.length === 2
的 if 块。我们可以添加一个新的全局变量numTries
,在该条件下递增。if (flippedTiles.length === 2) {
numTries++;
...
}
我们希望在游戏结束时显示得分 —— 当玩家匹配所有卡牌时。我们如何检查?可以想到两个选择:
- 我们遍历 tile的数组,并检查它们所有的
isMatch
是否为true
。 - 我们使用全局变量来追踪玩家找到的匹配数量,然后检查他们是否已经完成了可匹配的总数。
我们之前有过类似的争论,我选择了不必每次迭代整个数组的选项。现在再来一次,选择2。
首先我们将
numMatches
初始化为0,同是我们初始化所有其他全局游戏状态变量:var numMatches = 0;
然后在 匹配的tile 的
if
块内,我们增加 numMatches
变量:if (flippedTiles[0].face === flippedTiles[1].face) {
flippedTiles[0].isMatch = true;
flippedTiles[1].isMatch = true;
flippedTiles.length = 0;
numMatches++;
}
在我们的
draw
函数结束时,检查玩家是否找到所有匹配项,然后向用户显示一些祝贺文本:if (numMatches === tiles.length/2) {
fill(0, 0, 0);
text("You found them all in " + numTries + " tries",
20, 360);
}
你可以在下面尝试一下,但是可能需要一段时间才能达到胜利状态(没有冒犯,当然,我也需要一段时间!)。
这里有个小技巧,在测试难以达到的游戏部分时——可以暂时修改你的游戏,以便更达成目标。例如,在这个游戏中,将
NUM_ROWS
和NUM_COLS
更改为较小的数字,你将能够更快地完成。现在,挑战 下方 !