维基少年:树莓派/Scratch 游戏 - 数学问答
这是一个 Scratch 游戏,它向玩家提出了一系列乘法问题。
他们必须在掉落的球到达底部之前给出正确答案。
关键是,当他们玩游戏时,球会掉得越来越快。
删除“Scratch”角色精灵,从素材库添加一个新精灵,并选择要掉落的项目(例如,来自物品文件夹的“棒球”),从现在开始我将其称为“球”精灵。
点击舞台,选择“背景”,并选择合适的舞台。
从变量类别中,创建以下 5 个变量
level
- 这是游戏关卡,将控制球下降的速度。score
- 这是玩家的分数。playing
- 这表示游戏何时运行。first
- 这是第一个要相乘的数字。second
- 这是第二个要相乘的数字。
首先,我们将创建球下降序列
选择球精灵,并确保已选中“脚本”选项卡。
从控制类别中,选择“当接收到…”块。然后选择下拉菜单,输入消息“startDrop”。
移动球,使其非常靠近舞台顶部,但不要接触它。从运动类别中,拖动“移至 x: … y: …”并将它锁定在上方事件之下(您的 x: 和 y: 可能与我的略有不同)。
在编程中,“永远如果”循环称为while循环。循环将运行,直到上面的条件不满足。 |
我们要让球向下移动到屏幕底部。我们将使用“永远如果”循环来执行此操作。
从控制类别中,拖动“重复直到…”并将它锁定在“移至…”块之下。
从感测类别中,拖动“接触到…”并将它放到“重复直到…”块的条件区域中。从“接触到…”条件的下拉列表中选择“边缘”。
从运动类别中,将“改变 y 按…”块拖入循环内部。将值更改为“-10”(这是球每次循环移动的距离)。
从控制类别中,将“等待 1 秒”块拖入循环内部,放在“改变 y 按 -10”块之后。
要计算球的速度,我们将使用以下公式:0.2 + ( 0.01 × ( 20 - "level" ) )
这将使球随着关卡的增加而掉得更快。
从运算符类别中
拖动“… + …”并用它替换“等待…秒”中的 (1)。
现在将“… * …”拖到“… + …”的第二部分。
最后,将“… - …”拖到“… * …”的第二部分。
现在填写上面公式中的值。 (您可能想尝试稍后更改这些值以使游戏更简单或更难。)这些都是实际数字,除了您需要从变量类别中获取的“level
”变量。
如果这个“重复直到…”循环结束,则表示球已到达底部,游戏结束。从外观类别中,选择“说…持续 2 秒”块,并将它锁定在循环之后,将“2
”更改为“5
”。
然后,从运算符类别中,拖动“连接你好世界”并将其放到“说”块内部。将“你好”替换为“游戏结束,你得分为:”。将“世界”替换为变量类别中的“score
”变量。
从变量类别中,拖动“设置…为…”并将它锁定在“说…”块下面。从下拉菜单中选择“playing
”,并将值保留为“0
”。这将表示游戏已结束。
从控制类别中,将“当空格键按下”拖动到脚本区域。
从变量类别中,选择“设置…为…”并将它锁定在“当空格键按下”下面。
从下拉菜单中选择“level
”,并将值保留为 0(这代表起始关卡)。现在,从控制类别中,将“广播 startDrop 并等待”拖动到“设置关卡为 0”块下面。
现在,按下空格键将运行您的球下降序列。试一试,这是最慢的速度。您能在它到达底部之前回答一个数学问题吗?
现在将“设置关卡为 0”块的值更改为“20
”(这代表最高关卡,球下降速度最快) - 您是否仍然认为您有足够的时间?好吧,您稍后就会知道。
问题 1:您能看到如何更改代码以使球在最低关卡时开始下降得更慢吗? |
问题 2:您能看到如何更改代码以使球在最高关卡时下降得更快吗? |
通过将控制类别中的“当按钮点击”事件拖动到脚本区域,开始一个新的脚本。
我们需要先重置变量。从变量类别中,将三个“设置…为…”块拖动到“当点击”块下面。从下拉菜单中,将第一个更改为“score
”,将第二个更改为“level
”,并将这两个都保留为零。将第三个的下拉菜单设置为“playing
”,并将其设置为“1
”(这表示游戏处于活动状态)。
现在拖动一个“重复直到…”块,并将它放在变量下面。这是每个问题的循环。
从运算符类别中拖动一个“… = …”块。从变量类别中,将“playing
”变量拖动到等于运算符的左侧。将右侧设置为“0
”。请注意,我们刚刚将playing
设置为“1
”,并将让我们的问答游戏继续运行,直到playing
= “0
”。
问题 3:我们在哪里将 playing 设置为零?这样做有什么效果? |
现在我们想为我们的问答题选择两个数字。拖动两个“设置…为…”积木并将它们放在“重复直到循环”内部。在第一个下拉菜单中选择“first
”,在第二个下拉菜单中选择“second
”。现在从运算符类别中拖动一个“随机选择…到…”,到每个积木的“到”值中。将每个“随机选择”的值设置为“2
”和“10
”(“1
”太容易了)。
现在从控制类别中拖动一个“广播…”,并在下拉菜单中选择“startDrop”。这将开始球的下降!现在从侦测类别中拖动一个“询问…并等待”积木,并将其放在广播消息下方。从运算符类别中拖动一个“连接… ….”积木,并将其放在“询问”积木中,然后在第一个连接的右侧放置另一个“连接…”,并在那个连接的右侧再放置一个“连接…”。现在我们可以将四件事连接在一起。将第一个“连接”单元设置为“什么是”(在单词“is”后加一个空格)。将变量“first
”拖动到连接的下一个单元格中。然后在第三个单元格中放入“乘以”(前后有空格),最后将变量“second
”拖动到最后一个单元格中。这个脚本现在将等待玩家回答问题,但请记住,另一个脚本仍在让球落下!玩家的时间正在流逝。我们需要不断地询问玩家答案,直到他们答对,所以再拖动一个重复循环,并将其放在“询问”积木下方,但在现有的“重复直到…”循环内部。我们必须停止这个循环有两个原因:要么玩家时间用完,要么玩家得到了正确答案。从运算符类别中拖动一个“…或…”积木,并将其放在“重复直到”条件框中。现在将一个“… = …”积木拖动到“…或…”积木的两侧。
为了停止这个重复循环的第一个原因,我们想要检查“playing
”变量何时为“0
”(零)。
为了停止这个重复循环的第二个原因,我们想要检查答案是否正确。将侦测类别中的“答案”元素拖到左侧,并将运算符类别中的“… * …”元素拖到右侧。将“first
”和“second
”变量放在“… * …”元素中。
当玩家回答错误时,我们想告诉他们并再次询问他们问题。右键单击您已经创建的“询问…”部分,然后选择“复制”。将其放在一个清晰的区域。请注意,这也复制了“重复循环”,我们不想要它,所以将其分离并丢弃。更改第一个单元格中的文本,使其显示为“再试一次,什么是”,现在将其放在重复循环内。我们的程序现在将不断询问,直到时间用完或给出正确答案。现在我们需要检查一下玩家是否答对了。从控制类别中拖动一个“如果…那么”积木,并将其放在内部重复循环的下方,但在外部重复循环的内部。
从侦测类别中,将答案拖到“… = …”的左侧。从运算符类别中,将“… * …”拖到右侧。现在从变量中将“first”和“second”放在乘法积木的两侧。
如果答案正确,我们想增加分数。从数据类别中,将一个“改变…按照…”拖到“如果”积木内部,从下拉菜单中选择“score
”,并将数量设置为“1
”。
问题 4:你能看到如何让玩家在达到更高等级时获得更多积分吗? |
我们还需要提高等级(这将使球的下降速度略微加快),但只能提高到最高等级。从控制类别中拖动一个“如果…那么”积木,并将其放在“改变分数…”积木下方,但仍在现有的“如果”积木内部。
等级只能提高到最大值 20,所以从运算符类别中拖动一个“… < …”到“如果”条件中。从变量类别中,将“level
”变量拖动到“… < …”的左侧,并将右侧设置为“20
”。从变量类别中,将一个“改变…按照…”拖到“如果”积木内部。从下拉菜单中选择“level
”,并将数量设置为“1
”。
你现在可以测试你的游戏了,你能得到多少分?你如何让游戏更容易或更难?
4. 更多活动
[edit | edit source]当玩家答错或答对问题,以及当他们输掉游戏时添加声音。
更改游戏,使其询问您不同的数学问题(例如将三个数字相加)。
文件
[edit | edit source]ScratchGame-MathQuiz-Pi.pdf
[edit | edit source]本教程的原始 PDF可在维基共享资源上获取。