If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

记忆游戏:得分和获胜

我们的 “记忆” 游戏几乎完成了!它只缺少一件事:计分。这里我们回顾一下部分游戏规则:
游戏的目标是在最少尝试次数中将所有卡牌面朝上翻转(即,找到所有匹配的图像对)。这意味着尝试次数越少,得分越高。
如何跟踪尝试次数?好的,每次你翻转两个卡牌时都会 进行一次 “try”,这对应于检查flippedTiles.length === 2的 if 块。我们可以添加一个新的全局变量numTries,在该条件下递增。
if (flippedTiles.length === 2) {
  numTries++;
  ...
}
我们希望在游戏结束时显示得分 —— 当玩家匹配所有卡牌时。我们如何检查?可以想到两个选择:
  1. 我们遍历 tile的数组,并检查它们所有的isMatch是否为 true
  2. 我们使用全局变量来追踪玩家找到的匹配数量,然后检查他们是否已经完成了可匹配的总数。
我们之前有过类似的争论,我选择了不必每次迭代整个数组的选项。现在再来一次,选择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_ROWSNUM_COLS更改为较小的数字,你将能够更快地完成。现在,挑战 下方