![Scratch 编程竞赛指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/247/33094247/b_33094247.jpg)
1.5 掷骰子
教学目标:认识变量。
变量是一个有名字的容器,用于装载不同类型的数据。
1.创建的时候,分为适用于所有角色(全局变量)和仅适用于当前角色(私有变量)。一般情况下使用默认的全局变量即可,在本书4.5节中会详细讲解私有变量。见图1。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P38_1243.jpg?sign=1739317825-pyzcaY5MZIEU8CVI4eSAOrRBNJYHY9Jn-0-0fb6050336856dcee950c2f3b9f6de03)
图1
2.对变量进行命名,做到见名知义。(与广播一样)
3.变量可以储存不同类型的数据。但Scratch是一门弱数据类型的语言,换言之,它根本没有明确的数据类型。将变量设定为0,既可以是数字0,也可以是字符串“0”。
4.变量被创建后,是一个圆形的积木。这种圆形的积木,在Scratch中有很多。它们的作用都用来装载数据,所以只要用鼠标点击一下,就能将数据弹出来。见图2。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P38_1237.jpg?sign=1739317825-ukOaZOzt5xra2oDej0e2UPwhgmERiPsN-0-a18b3200e09b31c4bdc0a94a23fde526)
图2
开发需求001:
Devin和Dee在派对上玩掷骰子游戏(背景为Party)。Devin的骰子是白色的,Dee的骰子是蓝色的。按下空格键,Devin先掷,Dee后掷,骰子的点数均随机产生,为了真实一些,骰子的造型要变化几次再停下。每一次掷完骰子,Devin和Dee都会切换一个造型,并说出各自骰子的点数1秒。见图1.5.1。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P39_1343.jpg?sign=1739317825-9l8kQB2Lt3A6p2Fp84WngoODM3P763KP-0-01e3a10fa2286a3cf436a1287e53eeeb)
图1.5.1
骰子(tóu zi),北方的很多的地区又叫色子(shǎi zi)。它是一颗正立方体,每个面分别是1~6点,其相对两面之数字和为7。相传,骰子的发明人是三国时代的文学家曹植,最初用做占卜的工具,后来才演变成游戏。
分析:
本题有四个角色,应注意先后顺序。按下空格键后,骰子1先产生随机点数,Devin说出点数,然后骰子2产生随机点数,最后Dee说出点数。每一步的衔接,应当通过广播来实现。
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T39_11341.jpg?sign=1739317825-3NPFR6Y3IOBexLoO4ZPIcuKg7uQoUGV4-0-38aac62690409a0f64df5637743f5f78)
竞赛中,选手们在与时间赛跑,故用什么方法绘制角色以提高效率就非常重要。下面介绍绘制骰子的最佳方法:
(1)矩形功能,黑色轮廓,白色填充,按住Shift键绘制出正方形,注意中心点,如图1.5.2所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1351.jpg?sign=1739317825-CaYFIba2iErNodK7fpWWmKI1axfesbFu-0-94b715d0070a88c07ab35d56d5b6b0b8)
图1.5.2
在Scratch 3.9版本中,强化了中心点的设置,使中心点变得可见,使用起来更加方便,如图1.5.3所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1352.jpg?sign=1739317825-qV7wXdA1JPn0eANxC1AKKYvU2Cnr6Xxn-0-88afb14e40fd780c4dcc5498fe2183d0)
图1.5.3
(2)复制该造型。不管是1点,还是6点,它们的轮廓都是一样的,如图1.5.4所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1440.jpg?sign=1739317825-6xPWJomugbzpigdZMNue8Qk62oVCNFeM-0-0d97919c2944e28b382a071e3f453304)
图1.5.4
(3)至于点数,用画笔点点即可。把画笔调粗一些,这样一定比绘制实心圆要快,如图1.5.5所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1441.jpg?sign=1739317825-3r9N5IMRdhmwann79BaIFwFFV1J2EHvB-0-37b5603340f01cd211810210bb75b2a3)
图1.5.5
(4)完成骰子1,复制一个骰子2,并为其填充蓝色,如图1.5.6所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1442.jpg?sign=1739317825-YtrM4vEqVuqpdvLsOapNCOVrIH3bsdya-0-250d425f069db48dbf39695e076d7261)
图1.5.6
2.按下空格键,骰子1先动。
如何让角色切换随机造型呢?见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1435.jpg?sign=1739317825-OuVoUj3mcyCvzzhjbhKXFZVpbH09eXQE-0-56c425365aa6f37e0c5b5f332438116d)
关于随机取数:
两边都是整数,则取整数。
两边至少有一个小数,取出来的就是小数。
换成小数造型,会四舍五入。
换成0造型,会切换为最后一个造型。
提示:在Scratch中,六边形积木代表布尔型数据类型,它只有两个值,True和False,对应数字1和0。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1445.jpg?sign=1739317825-vDIOYcLmyt8bCh1PhRjDyBXrfBB1Jc2s-0-ae2dfa4b6139b9e027e06325572967d8)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1446.jpg?sign=1739317825-dA9CyZXQRK6CKSmc87ntctP67jtq0xBi-0-8be26432c0aa556b1c52c55aafc47f72)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1444.jpg?sign=1739317825-VlyBw65AP65fZP9nv76HSa6VvXe7F67X-0-2c34b3cdf43882aa3d36da5de7a1129a)
这种将布尔型数据相加的方式,通常在解决逻辑推理问题的时候会用到。
由于产生的点数,一会要让Devin角色说出来,此处需要创建一个变量“n1”,用来储存骰子1的点数。储存的目的是为了随时调用。再发出广播“报数1”。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1500.jpg?sign=1739317825-k5lI6Fk5IOfSKMscR8FWC6I7STOIEHbA-0-9b93f4aab837a1e6f4e222ab9a51a6d2)
3.Devin角色接收到广播后,就把点数说出来,然后继续向下一个角色传递消息。程序见下图(左)。
4.骰子2开始。程序见下图(中)。
5.Dee角色。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1501.jpg?sign=1739317825-0S1HBcB4gQ5CUijLLIDhjUUMuIudNumf-0-c7c91a6682721bf5efe038865a71a7bb)
开发需求002:
在程序001的基础上添加一个裁判角色。在Devin和Dee的比赛中,判断胜负并说出结果。
分析:
接着程序001继续编程,要解决在哪进行判断以及怎么进行判断?
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T42_11346.jpg?sign=1739317825-jvc9L7UjpdHbB0Ic8Mx1pYwclIUX534F-0-d849fee1d0cdcd55a91ce10cbdd3473d)
2.解决在哪里进行判断。
Devin和Dee一前一后掷骰子,应该在最后掷骰子的Dee角色说完点数后开始裁判。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1510.jpg?sign=1739317825-Mp8Zxd1zVpX7yZxwvQfUdUv30oFyALfP-0-9ca4a98254824f2d4102b1aa568b5988)
3.解决如何判断。
当小猫裁判接收到广播,说明两人的骰子都已掷完,此时可以裁判了!
在编程中分支结构表示判断。在使用分支结构的时候,要先进行分析,并找到一共有几种可能产生的结果。本题应有3种结果:平局、Dee胜、Devin胜,分别如图1.5.7、图1.5.8、图1.5.9所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_11347.jpg?sign=1739317825-e2zCCgcyQn84izNTaMn4p8OIdZztz5Q2-0-c6b8529cc392d78a0f32587773db2409)
图1.5.7
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_11348.jpg?sign=1739317825-Rw5MswbJThaqO3FM5v80mplScksTSS6M-0-012205f0a85d89cbfd9bdacc162daff2)
图1.5.8
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1515.jpg?sign=1739317825-UCp2H6QpFwKoWGiXt1jaHqrD1pGtdIEy-0-c0671da1fb6132d19f898fb624c3227f)
图1.5.9
方法一:使用单分支结构“如果……那么……”对变量“n1”和“n2”进行比较。程序见下图(左)。
这种方法比较直观,也很好理解,按顺序依次比较就行了。
方法二:使用分支嵌套结构进行判断。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1512.jpg?sign=1739317825-UsWiDh78xd84gSgiz0UI6Tmqs9Q674So-0-2fb33e29305d455ce7501fa6f2734f08)
方法虽然有两种,但建议使用方法二。尽管分支嵌套结构从表面上看,方法二只是省去了一个判断条件,但在实际应用中,这种方法可不仅仅是省一个条件那么简单,1.8节会进行细致分析。
试一试:
玩家和电脑玩石头剪子布的游戏。点击左右箭头,可以实现相应切换玩家手型的效果。选好要出的手型后,点击手型角色,电脑开始随机出拳。由胜利的一方说“我赢了!”1秒,并将胜者的得分增加1。平局的时候,双方同时说“平局!”1秒,均不加分。游戏为三战两胜制,率先拿到2分者,获得最终胜利,并由胜利者说出“太好了,我取得了最终的胜利!”2秒。见图1.5.10及图中文字所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P44_1523.jpg?sign=1739317825-cA6VJNwv0UqxucHb8ki8v8u1PtUnvQjf-0-af4337f4fbddba8095765ac1609eb087)
图1.5.10