教学原文参考:吃角子老虎机
这篇文章会介绍如何使用「函式」、「计次回圈」、「随机取数」、「加减乘除」、「余数」、「点亮」等积木,实作一个小型的吃角子老虎机游戏 ( 五颗灯从上往下重复循环移动,停止时如果五颗灯在同一直线上就获胜 )。
吃角子老虎机是一种赌博游戏机,开始游戏後 ( 投币 + 拉下拉霸 ),机器萤幕上会随机滚动出现不同图案,当停止後如果出现指定的图案连线,则以不同赔率胜出。
这个范例会透过 micro:bit 的 LED,模拟吃角子老虎机的游戏程序。游戏操作步骤如下:
- 按下 A 按钮,开始游戏,灯号从上往下不断移动。
- 灯号会从第一排依序停止道第五排。
- 如果五个灯号连成一直线则获胜。
- 如果连成一直线太困难,也可绘制图形卡,如果灯号最後的排列组合和图形卡相同则获胜。
因为吃角子老虎机要用「同样的程序」去控制五颗灯的移动,所以可以使用「函式」将同样的程序独立出来,建立一个名为 slot 的函式,并加入 x 和 y 两个数字参数。
接着编辑 slot 函式内容:
将函式放入「当启动时」积木里,micro:bit 启动後,会看到 LED 灯依序从第一排到第五排,从上往下移动。
不过由於回圈的特性是「在同一组积木里,回圈结束後,才会进行下面的程序」,所以如果按照上面的做法,LED 无法同时一起移动,这时就必须使用「多个」「重复无限次」积木,来让回圈可以同时运作。
将函式分别放入五个重复无限次积木里,micro:bit 启动後,会看到 LED 灯第一排到第五排,同时从上往下移动。
到这个步骤,已经大致了解灯号移动的原理,接下来要修改 slot 函式,让灯号的移动是随机的:
接着在「当启动时」和「当按钮 A 被按下」的积木里,放入 a0、a1、a2、a3、a4 五个变数,当启动时的数值设定 -2,按下按钮的数值设定为 -1,目的作为「游戏开始」以及「最後是否同一直线」的判断依据,此外再新增一个数值为 1 的 ok 变数,作为最後是否获胜的判断。
修改第一个灯 ( 0,y ) 的重复无限次积木,放入「逻辑判断」积木,判断当 a0 = -1 时就呼叫 slot 函式。
slot 函式执行结束後,会返回 y 除以 5 的余数给 a0,所以 a0 的数值会从 0 变成 y 除以 5 的余数。
第二个灯 ( 1,y)、第三个灯 ( 2,y ) 和第四个灯 ( 3,y ) 的重复无限次积木几乎相同,分别让 a1、a2、a3 变数等於 slot 函式执行後的结果,接着使用逻辑判断数值是否相同,如果相同,表示在同样的位置,如果不相同,就让 ok 变数等於 0。
最後一颗灯的重复无限次积木和前几颗灯类似,差别在於最後判断如果 ok 等於 1,表示获胜,出现爱心图示。
完成後,启动 micro:bit,按下 A 按钮,开始玩吃角子老虎游戏机。
范例解答:吃角子老虎机
为什麽要使用那麽多个「重复无限次」呢?
因为每个灯号都要各自移动,如果放在同一个回圈里,会互相干扰和影响,造成程序较为复杂,分成不同的回圈也较容易管理。
函式里的变数,使用时需要特别注意
实作过程中,曾经一度想在函式里建立新的变数,但积木在转换成 JavaScript 的过程中,会发生区域变数和全域变数互相干扰状况 ( 直接写程序不会发生,但积木转换後就会发生错误 ),因此不建议直接在函式里建立变数 ( 除非很熟悉程序语法 )。
大家好,我是 OXXO,是个即将迈入中年的斜杠青年,如果对我有点兴趣(笑,可以与我联系,一起来做点有玩又有创意的东西吧!
<<: Day_16 : 让 Vite 来开启你的Vue 之 资料定义 ref 与 reactive
>>: 【day13】DashboardFragment X CardView
实务上,因应不同的开发阶段,应用程序会运行在开发环境 (Develop Environment)、预...
前言 前两天讲完基本的格式、语义检查後,今天特别来讲一下关於 email 的部分 大部分网站希望使用...
useEffect 的 Effect 意指「副作用」, 即是指 fetch 资料、订阅事件与改变 D...
在pod的生态中,本身就是一个小小世界,新旧pod之间通常不影响,当建立新的pod时,基本上不会跟被...
C# C# 读做 (see sharp), 是一个基於 .Net Framework 的通用, 多范...