本系列第 4/8 课,建议 45–60 分钟(估算)。先完成上一课。
这课解决什么
第一次点击记录索引;第二张必须是另一张未匹配牌。相等则两张标记为已匹配,否则翻回。已配对数量达到对数时进入结束并锁定操作。
先预测,再运行
快速点同一张两次,会自动获得一对吗?
先记下自己的答案,运行起始工程与完成工程比较;答案见文末。
开始实战
以上一课完成工程为起点,先导入并运行,再另存为本课作业。
完成工程可以查看答案;独立作业请保留自己的修改。
新增或调整的组件
| 实例名 | 组件 | 本课配置 |
|---|---|---|
标签_标题 |
标签 | Width=Fill parent;FontSize=24;TextColor=#183153;Text=记忆翻牌 · 第 4课 |
逐步搭建
- 增加第一、第二、已配对和步数变量,定义 0盖住/1翻开/2匹配。
- Touched 只处理状态为 0 的牌;第一为空时记录第一,已有第一时才记录第二并加一步。
- 相同内容设置为 2、清空两个索引、增加配对;不同内容翻回。
- 点同张、不同张、已匹配张,最后完成四对;结束后点击不继续计步。

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。
核心积木与数据流
下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。
global 牌 = []
global 翻面 = []
global 第一 = 0
global 第二 = 0
global 锁定 = false
global 已配对 = 0
global 步数 = 0
global 对数 = 4
global 宽 = 70
global 高 = 100
procedure 绘制() {
宽 = 画布1.Width / 4
高 = 画布1.Height / ceil(length(牌) / 4)
画布1.Clear()
for i = 1 to length(牌) {
var 列 = (i - 1) % 4
var 行 = floor((i - 1) / 4)
画布1.PaintColor = choose(翻面[i] = 2, -14575216, choose(翻面[i] = 1,-24576,-14268949))
画布1.DrawShape(list(list(列 * 宽 + 2,行 * 高 + 2),list((列 + 1) * 宽 - 2,行 * 高 + 2),list((列 + 1) * 宽 - 2,(行 + 1) * 高 - 2),list(列 * 宽 + 2,(行 + 1) * 高 - 2)),true)
画布1.PaintColor = -1
画布1.DrawText(choose(翻面[i] = 0,"?",牌[i]),(列 + 0.5) * 宽,(行 + 0.5) * 高)
}
}
when 画布1.Touched(x, y, touchedAnySprite) {
if x >= 0 and y >= 0 and x < 画布1.Width and y < 画布1.Height {
var i = floor(y / 高) * 4 + floor(x / 宽) + 1
if i <= length(牌) and not 锁定 {
if 翻面[i] = 0 {
翻面[i] = 1
if 第一 = 0 { 第一 = i }
else {
第二 = i
步数 = 步数 + 1
if 牌[第一] = 牌[第二] {
翻面[第一] = 2
翻面[第二] = 2
已配对 = 已配对 + 1
第一 = 0
第二 = 0
标签_状态.Text = join("已配对 ",已配对," / ",对数)
if 已配对 = 对数 {
锁定 = true
标签_状态.Text = "全部配对成功"
}
} else {
翻面[第一] = 0
翻面[第二] = 0
第一 = 0
第二 = 0
标签_状态.Text = "不匹配,请再试"
}
}
}
绘制()
}
}
}
中途检查与排错
本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。
- 开局8张卡片。
- 边界不越界。
- 洗牌/初始化保留每种两张。
- 重复点同牌不计分。
- 完整配对、一次胜利。
排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。
界面图是积木执行后的画布近似预览;计时器、绘制与系统控件在设备上的实际表现仍需运行检查。
两个理解题与独立改造
- 快速点同一张两次,会自动获得一对吗?
- 已匹配牌和临时翻开的牌,都显示内容,可以合并状态吗?
独立改造: 增加错误次数,保持步数与错误次数含义不同。
先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。
查看预测与练习参考答案
预测: 不会。第一次翻开后状态已不是 0,第二次点击不会进入匹配分支。
追踪: 不能。临时翻开可能翻回,匹配牌不能再参与;必须区分 1 和 2。
改造思路: 步数在每次选第二张时加一;错误只在两个内容不同时加一。两个计数不要共享变量。
完成与下一步
保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。
扫码添加客服咨询