游戏中的算法与计算思维 06:用难度与耗时形成游戏规则

课程首页 · 全部知识课程 · 返回专题主页

本系列第 6/8 课,建议 45–60 分钟(估算)。先完成上一课。

下载本课完成工程 .aia

这课解决什么

难度改变对数和网格行数;计时器只刷新耗时,实际耗时按当前毫秒减开局毫秒计算。匹配结束时停止刷新并冻结成绩,重新开局全部状态重置。

先预测,再运行

刷新回调晚了 7.3 秒,成绩会只增加一秒吗?

先记下自己的答案,运行起始工程与完成工程比较;答案见文末。

开始实战

以上一课完成工程为起点,先导入并运行,再另存为本课作业。

完成工程可以查看答案;独立作业请保留自己的修改。

新增或调整的组件

实例名 组件 本课配置
标签_标题 标签 Width=Fill parent;FontSize=24;TextColor=#183153;Text=记忆翻牌 · 第 6课
下拉框_难度 下拉框 ElementsFromString=4 对,6 对;Width=Fill parent
标签_成绩 标签 Width=Fill parent;FontSize=16;TextColor=#183153;Text=0 步 / 0 秒
计时器_计时 计时器 TimerEnabled=False;TimerAlwaysFires=False;TimerInterval=500

逐步搭建

  1. 增加难度下拉框,4 对或 6 对,对应 8 或 12 张牌。
  2. 新局设置开局毫秒并启用计时器_计时,图形行数由牌数计算。
  3. 计时器刷新秒数;胜利时关闭并读取最终耗时。
  4. 两种难度分别完成;等待 7 秒再刷新,显示真实耗时;重复新局不会继承旧步数。

记忆翻牌游戏第6课运行状态布局预览

图来自本课最终工程执行积木后的状态,为 HTML 近似预览;不是手机截图。

核心积木与数据流

下面是本课完成工程中的核心代码,包含所需全局变量和过程。可在块图中追踪数值,再回到工程对照完整事件;合并到已有工程时,同名事件合并处理。

global 已配对 = 0
global 步数 = 0
global 开始时刻 = 0
global 秒数 = 0
global 对数 = 4



when 计时器_计时.Timer() {
if 已配对 < 对数 {
秒数 = max(0,floor((计时器_计时.SystemTime() - 开始时刻) / 1000))
标签_成绩.Text = join(步数," 步 / ",秒数," 秒")
}
}

中途检查与排错

本课以下控制与数据流已执行最终归档中的真实积木检查。请在伴侣或安装的 APK 中按相同场景操作,记录实际结果;自动检查通过不代表手机已实测。

  1. 开局8张卡片。
  2. 边界不越界。
  3. 洗牌/初始化保留每种两张。
  4. 重复点同牌不计分。
  5. 不匹配延时锁、禁止第三张。
  6. 新局停止旧延时。
  7. 完整配对、一次胜利。
  8. 六对难度与真实耗时。

排查时先确定出错的是输入、状态、数据读取还是显示;用标签暂时显示关键值,每次只改变一个条件。

界面图是积木执行后的画布近似预览;计时器、绘制与系统控件在设备上的实际表现仍需运行检查。

两个理解题与独立改造

  1. 刷新回调晚了 7.3 秒,成绩会只增加一秒吗?
  2. 胜利后仍保持计时器开启,会怎样影响成绩?

独立改造: 增加倒计时模式,结束后禁止继续翻牌。

先完成自己的工程,再对照答案。检查成功路径,也检查空数据、重复操作和取消;写出你改动的规则。

查看预测与练习参考答案

预测: 不会。floor((当前−开局)/1000)得到 7 秒。

追踪: 后续刷新可能继续改耗时;应停止并保存最终值。

改造思路: 保存本局截止,剩余=max(0,ceil((截止−现在)/1000))。到期设置结束状态并停止两个计时器,不能只改成绩标签。

完成与下一步

保存自己的工程并导出 .aia;给文件命名以区分本课作业和参考源码。请用自己的话解释本课知识,并展示一次失败输入的处理。

上一课 · 下一课:按难度保存最佳成绩

文档反馈