![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=1739232472-2VbZeBo8V84ADWBDJc3axDPZIzRk7eMk-0-2d962139ae613ebecfdafad107c172a3)
图1
2.对变量进行命名,做到见名知义。(与广播一样)
3.变量可以储存不同类型的数据。但Scratch是一门弱数据类型的语言,换言之,它根本没有明确的数据类型。将变量设定为0,既可以是数字0,也可以是字符串“0”。
4.变量被创建后,是一个圆形的积木。这种圆形的积木,在Scratch中有很多。它们的作用都用来装载数据,所以只要用鼠标点击一下,就能将数据弹出来。见图2。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P38_1237.jpg?sign=1739232472-FySHXhF2TyY8H4zBKZiAARfaSLeKpVtB-0-b476b898a75656775912db3dcc7539db)
图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=1739232472-EqT7aCXpul211X2UrgMuLKfnr1KW1kn2-0-50ab8cdde6b29a3160484eb834cab4f7)
图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=1739232472-sPbnwDDg3RFnFA63E9FMg0slVWtrE8y7-0-2e212590357561783dd0a01c6bc9ce2f)
竞赛中,选手们在与时间赛跑,故用什么方法绘制角色以提高效率就非常重要。下面介绍绘制骰子的最佳方法:
(1)矩形功能,黑色轮廓,白色填充,按住Shift键绘制出正方形,注意中心点,如图1.5.2所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1351.jpg?sign=1739232472-Fd9B0wBwgWf2fOEP5C4jetVzm4SOtbUU-0-88a4ecf010b4c1cfe373d6527c9fbee1)
图1.5.2
在Scratch 3.9版本中,强化了中心点的设置,使中心点变得可见,使用起来更加方便,如图1.5.3所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1352.jpg?sign=1739232472-ls7OVsRpFDu9vyYaJE0ZGZDZuOoDlGGx-0-6a2d5414443c290861b4cfb432e62fc9)
图1.5.3
(2)复制该造型。不管是1点,还是6点,它们的轮廓都是一样的,如图1.5.4所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1440.jpg?sign=1739232472-Dbu3mn9vGfLkcY3Y8wZ04xUDrCIJKTlk-0-004d205ab929009baaa0b0ee9ed77c65)
图1.5.4
(3)至于点数,用画笔点点即可。把画笔调粗一些,这样一定比绘制实心圆要快,如图1.5.5所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1441.jpg?sign=1739232472-nGP9V1rxVoIWXiz0FT8JFpCcuuxwc449-0-9d080cdd1427d709ce3e937e3c70d3a0)
图1.5.5
(4)完成骰子1,复制一个骰子2,并为其填充蓝色,如图1.5.6所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1442.jpg?sign=1739232472-PHGBvKhMlvtKM7FwbunxvOdS08O7rL8U-0-0055ec1f08aec401907d444e7ebf7805)
图1.5.6
2.按下空格键,骰子1先动。
如何让角色切换随机造型呢?见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1435.jpg?sign=1739232472-sypo2qK4DBQ5ujicxsYLDdQgTKj8lBSl-0-d329fba877deeca7589988e9624fd2f5)
关于随机取数:
两边都是整数,则取整数。
两边至少有一个小数,取出来的就是小数。
换成小数造型,会四舍五入。
换成0造型,会切换为最后一个造型。
提示:在Scratch中,六边形积木代表布尔型数据类型,它只有两个值,True和False,对应数字1和0。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1445.jpg?sign=1739232472-36i7cgKNFAvW0DKohS6s2DwyGJWU8lci-0-35ff8cba4e63c908674c5614ab427c90)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1446.jpg?sign=1739232472-5kEykel9L5yr48aFTo5jAfV8RXh4BkYg-0-bbf890b4107c096c377e9d3a2b49e183)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1444.jpg?sign=1739232472-pgVNQQyJcI50o1KWVXlTaGE8IoqVeBAP-0-71918217659fd4fe9cce28717b544af5)
这种将布尔型数据相加的方式,通常在解决逻辑推理问题的时候会用到。
由于产生的点数,一会要让Devin角色说出来,此处需要创建一个变量“n1”,用来储存骰子1的点数。储存的目的是为了随时调用。再发出广播“报数1”。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1500.jpg?sign=1739232472-3jEXjN0wovRrfjL9AY2F5vSrMFC6TNxE-0-29668be537b9e36148233f47860711a8)
3.Devin角色接收到广播后,就把点数说出来,然后继续向下一个角色传递消息。程序见下图(左)。
4.骰子2开始。程序见下图(中)。
5.Dee角色。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1501.jpg?sign=1739232472-fn8KQdw21skvx6Phjn8yGJhYgGf0ERoc-0-88bd964730b7c3fa9dd8ac9fee4eeac0)
开发需求002:
在程序001的基础上添加一个裁判角色。在Devin和Dee的比赛中,判断胜负并说出结果。
分析:
接着程序001继续编程,要解决在哪进行判断以及怎么进行判断?
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T42_11346.jpg?sign=1739232472-xXKLywKu1zh5nGhaUAVXPCuIfx7xpXJ7-0-98b0ea2a9ad4b995c0f79d8d89b52d59)
2.解决在哪里进行判断。
Devin和Dee一前一后掷骰子,应该在最后掷骰子的Dee角色说完点数后开始裁判。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1510.jpg?sign=1739232472-DRQx6JO35hNI2nrmzR7MZmVgKCDJaXyK-0-73c6ce62b3490db545584803fe57722b)
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=1739232472-44yWIF82gHZCt55AtF929rGu3MtklxDF-0-e6dcb809f861906369fec1bec2dd6f18)
图1.5.7
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_11348.jpg?sign=1739232472-yc4d2x1AwBncdFl3HGaAwqLim9gpOacp-0-4da309ec5a3d4b8efefe4f3bc5eb86fa)
图1.5.8
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1515.jpg?sign=1739232472-jyePLUy5J9soRygmqRAoXaf4sst9iwAf-0-bcf84412d56c23eedbd5ae71f2c56533)
图1.5.9
方法一:使用单分支结构“如果……那么……”对变量“n1”和“n2”进行比较。程序见下图(左)。
这种方法比较直观,也很好理解,按顺序依次比较就行了。
方法二:使用分支嵌套结构进行判断。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1512.jpg?sign=1739232472-M0Qbf1Vw76fFup6UFUhCtjvGFRHQiLQd-0-ba5fb5d35b78f8ee2a373df3283da53c)
方法虽然有两种,但建议使用方法二。尽管分支嵌套结构从表面上看,方法二只是省去了一个判断条件,但在实际应用中,这种方法可不仅仅是省一个条件那么简单,1.8节会进行细致分析。
试一试:
玩家和电脑玩石头剪子布的游戏。点击左右箭头,可以实现相应切换玩家手型的效果。选好要出的手型后,点击手型角色,电脑开始随机出拳。由胜利的一方说“我赢了!”1秒,并将胜者的得分增加1。平局的时候,双方同时说“平局!”1秒,均不加分。游戏为三战两胜制,率先拿到2分者,获得最终胜利,并由胜利者说出“太好了,我取得了最终的胜利!”2秒。见图1.5.10及图中文字所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P44_1523.jpg?sign=1739232472-2BPnFJTfprE1PRYC8SNvo7piT8OMxkp6-0-4516ffe1ba0991c3b7a6b88ff4f5d2f9)
图1.5.10