![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=1739545193-HrgfJRLjvQAYWlzShrtihnGJcC2VB61K-0-79a522459262a20cf091236aa4b68bd3)
图1
2.对变量进行命名,做到见名知义。(与广播一样)
3.变量可以储存不同类型的数据。但Scratch是一门弱数据类型的语言,换言之,它根本没有明确的数据类型。将变量设定为0,既可以是数字0,也可以是字符串“0”。
4.变量被创建后,是一个圆形的积木。这种圆形的积木,在Scratch中有很多。它们的作用都用来装载数据,所以只要用鼠标点击一下,就能将数据弹出来。见图2。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P38_1237.jpg?sign=1739545193-9KT6Q5Axa11o8fRgS2rIXWfwv7JlTuBn-0-ce8e1a7b09fa10a35b46fe337a7c9b96)
图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=1739545193-CSZFoksVR7Z2kFLdY9fRmq26e7ZxM9pn-0-c7c1e2a07231ed2f7d081c428c9372e4)
图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=1739545193-I4rmaEvTa4cHmNijQ8255F4QlCFplJlJ-0-7ca9c71d3745e3e84f412424b28310d8)
竞赛中,选手们在与时间赛跑,故用什么方法绘制角色以提高效率就非常重要。下面介绍绘制骰子的最佳方法:
(1)矩形功能,黑色轮廓,白色填充,按住Shift键绘制出正方形,注意中心点,如图1.5.2所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1351.jpg?sign=1739545193-7dJuv3jSWaaWoiMWvJELOUBRbeYfA2J3-0-a4650f2e3ef8e1f6f4f7ea79dc1f5d21)
图1.5.2
在Scratch 3.9版本中,强化了中心点的设置,使中心点变得可见,使用起来更加方便,如图1.5.3所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1352.jpg?sign=1739545193-rOY24r5aV4Y4RNKmJVxG3qh2UIvHCAV7-0-ff9dd4043b923eca62129d49a8432858)
图1.5.3
(2)复制该造型。不管是1点,还是6点,它们的轮廓都是一样的,如图1.5.4所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1440.jpg?sign=1739545193-F4ofIUgqK7E7ZyFjP80MOV8vmWR5cpuo-0-880db1f20867a7fb5e1845cfda4556f5)
图1.5.4
(3)至于点数,用画笔点点即可。把画笔调粗一些,这样一定比绘制实心圆要快,如图1.5.5所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1441.jpg?sign=1739545193-CMLl8TiuAr1iKelTuLqiXZALYiyPwPlL-0-cb93ea79e0aba5ee88b05f5924e9da00)
图1.5.5
(4)完成骰子1,复制一个骰子2,并为其填充蓝色,如图1.5.6所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1442.jpg?sign=1739545193-eRc0N65wIIwpTnsCE5B9zayyyOne4HXJ-0-cbf3e2beec1009f615fd99dbba9f27d5)
图1.5.6
2.按下空格键,骰子1先动。
如何让角色切换随机造型呢?见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1435.jpg?sign=1739545193-QznDkeDsuOgBngaYCUHvMBCE4R5Gkrh0-0-77080feae8e334a1a48efa8921b2f1c9)
关于随机取数:
两边都是整数,则取整数。
两边至少有一个小数,取出来的就是小数。
换成小数造型,会四舍五入。
换成0造型,会切换为最后一个造型。
提示:在Scratch中,六边形积木代表布尔型数据类型,它只有两个值,True和False,对应数字1和0。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1445.jpg?sign=1739545193-QoagFrLHOJJMWX756hCjTEoj0fE1vBuz-0-3f05650159878e06dee54d82687e4977)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1446.jpg?sign=1739545193-PYNX3oV0vOg8WEmYF7ZFGvVoJesf283R-0-1fb8ac9c9a3f94487a6acc5d615c0216)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1444.jpg?sign=1739545193-KYfvHRmjxxZMniLYxnu9VKsn0BY5sfxQ-0-07735649df9c2118dbc4f485bf84868a)
这种将布尔型数据相加的方式,通常在解决逻辑推理问题的时候会用到。
由于产生的点数,一会要让Devin角色说出来,此处需要创建一个变量“n1”,用来储存骰子1的点数。储存的目的是为了随时调用。再发出广播“报数1”。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1500.jpg?sign=1739545193-wskz8E9ZYZWYp4s4VRQfkbochzf7rbsx-0-862ae6813448d7528deeb0f16fdd969c)
3.Devin角色接收到广播后,就把点数说出来,然后继续向下一个角色传递消息。程序见下图(左)。
4.骰子2开始。程序见下图(中)。
5.Dee角色。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1501.jpg?sign=1739545193-sqJm6Qjy4Mii1uRGpNXNJdSjLigX5pMS-0-5c04088164ed4605957374dc241df448)
开发需求002:
在程序001的基础上添加一个裁判角色。在Devin和Dee的比赛中,判断胜负并说出结果。
分析:
接着程序001继续编程,要解决在哪进行判断以及怎么进行判断?
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T42_11346.jpg?sign=1739545193-FoOWApLev873rDnkimjwZdgpLAdXDcGM-0-2aa7c073bae4fab794c27a7feae36902)
2.解决在哪里进行判断。
Devin和Dee一前一后掷骰子,应该在最后掷骰子的Dee角色说完点数后开始裁判。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1510.jpg?sign=1739545193-36DxVTGqN2Y1zj8LOSPVPw3Hmul174EA-0-8761817e74da0a387b1e3b55d9a56e6f)
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=1739545193-1OGvMEDeqTS8Q0TcLnOfbYIZH76RojOu-0-8cca6d1773a3452aa167a20257a2f61c)
图1.5.7
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_11348.jpg?sign=1739545193-7z6jW0CmTTT5L92Imj6Hq3pjfzryCWbn-0-38bf3b98947704530e95793fbb51f7e8)
图1.5.8
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1515.jpg?sign=1739545193-9Bf9jij3YHQ2n7mbHQGOzr0MPCCX5wkt-0-5aaf62471f62660811c437eb0ca92e0b)
图1.5.9
方法一:使用单分支结构“如果……那么……”对变量“n1”和“n2”进行比较。程序见下图(左)。
这种方法比较直观,也很好理解,按顺序依次比较就行了。
方法二:使用分支嵌套结构进行判断。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1512.jpg?sign=1739545193-Ty35A8xqIvdoENWu062fZvzhbg2Y2nSn-0-7b30343cf95fb3f04d8e18f6eb87cf9d)
方法虽然有两种,但建议使用方法二。尽管分支嵌套结构从表面上看,方法二只是省去了一个判断条件,但在实际应用中,这种方法可不仅仅是省一个条件那么简单,1.8节会进行细致分析。
试一试:
玩家和电脑玩石头剪子布的游戏。点击左右箭头,可以实现相应切换玩家手型的效果。选好要出的手型后,点击手型角色,电脑开始随机出拳。由胜利的一方说“我赢了!”1秒,并将胜者的得分增加1。平局的时候,双方同时说“平局!”1秒,均不加分。游戏为三战两胜制,率先拿到2分者,获得最终胜利,并由胜利者说出“太好了,我取得了最终的胜利!”2秒。见图1.5.10及图中文字所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P44_1523.jpg?sign=1739545193-W6rEnRmyGTv6BpWkLJP3NjvGFxscxkCA-0-4ebdc767e6a191d5b81dac3d946979fc)
图1.5.10