![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=1739349535-A5vMbZ5AT71wcEmXLCXq9I1IyPbaVZvn-0-0ffdb8efccdea0764f7e3c0d784479e8)
图1
2.对变量进行命名,做到见名知义。(与广播一样)
3.变量可以储存不同类型的数据。但Scratch是一门弱数据类型的语言,换言之,它根本没有明确的数据类型。将变量设定为0,既可以是数字0,也可以是字符串“0”。
4.变量被创建后,是一个圆形的积木。这种圆形的积木,在Scratch中有很多。它们的作用都用来装载数据,所以只要用鼠标点击一下,就能将数据弹出来。见图2。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P38_1237.jpg?sign=1739349535-BEdP5YZj7Ab3MvTAlwv6rGRpcq4Cs9xR-0-487bcb0f0fae792f221477e9b07674e7)
图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=1739349535-bmuc9ShitIBs9ZFgkXol9K4VYHh7e9CO-0-f3fd55fceea8808835b0099f2c834f7b)
图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=1739349535-JndLID5vIbVAgL4HTM3hNyz0PWYSZoiQ-0-cca082d217a304f858231f5be9f347a5)
竞赛中,选手们在与时间赛跑,故用什么方法绘制角色以提高效率就非常重要。下面介绍绘制骰子的最佳方法:
(1)矩形功能,黑色轮廓,白色填充,按住Shift键绘制出正方形,注意中心点,如图1.5.2所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1351.jpg?sign=1739349535-avmGMBugOfkGcKURIElxFM1luh5WmwRc-0-639ba02abc8e5132481a4beaf74e76e9)
图1.5.2
在Scratch 3.9版本中,强化了中心点的设置,使中心点变得可见,使用起来更加方便,如图1.5.3所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P40_1352.jpg?sign=1739349535-ptmS630cEW2ceNXo6oLW2tuBcdGa5LcX-0-813ce59aeb1370d07b800a18ddd520ac)
图1.5.3
(2)复制该造型。不管是1点,还是6点,它们的轮廓都是一样的,如图1.5.4所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1440.jpg?sign=1739349535-Hb7C5WVd6eBPmfhgOP0YYIDuGRmMDiKW-0-2525c6df095bd99ca3122a2cb4e4e25b)
图1.5.4
(3)至于点数,用画笔点点即可。把画笔调粗一些,这样一定比绘制实心圆要快,如图1.5.5所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1441.jpg?sign=1739349535-pnC0vv2nw9GFEKL4JgW4qW8fyWZR1vz4-0-fd060646d22c135daada3c022ec47716)
图1.5.5
(4)完成骰子1,复制一个骰子2,并为其填充蓝色,如图1.5.6所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1442.jpg?sign=1739349535-o8FL5rWuyz6gTx4sowPdsXU8vKy1DO5j-0-24f493222621087b000dd80505cac34e)
图1.5.6
2.按下空格键,骰子1先动。
如何让角色切换随机造型呢?见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1435.jpg?sign=1739349535-7nI9og1xOCoE7QqhY8wyScanfswfhoAC-0-f80b7bb2becf532c17df56af05f853f0)
关于随机取数:
两边都是整数,则取整数。
两边至少有一个小数,取出来的就是小数。
换成小数造型,会四舍五入。
换成0造型,会切换为最后一个造型。
提示:在Scratch中,六边形积木代表布尔型数据类型,它只有两个值,True和False,对应数字1和0。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1445.jpg?sign=1739349535-ZPWcNtDywM5MzSdxMWDaCL2D6PBz9m8i-0-0e6c069d9e5fd282f9796fdfc385ed4c)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1446.jpg?sign=1739349535-4qB0houiP6fbaB017NnqXm6pvPCNB3wW-0-9771059c3bad2611c2a178444b049396)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P41_1444.jpg?sign=1739349535-0o8Q1vaGVz40t5YFbFdT7VKMbX9gS9mJ-0-0ddc76b7fd68deba92f471dda183affe)
这种将布尔型数据相加的方式,通常在解决逻辑推理问题的时候会用到。
由于产生的点数,一会要让Devin角色说出来,此处需要创建一个变量“n1”,用来储存骰子1的点数。储存的目的是为了随时调用。再发出广播“报数1”。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1500.jpg?sign=1739349535-CkzEdsKhNZqO0VuIIlqBrqr5s1qFL4mp-0-f385837d35af08a6fe29e9aaa582e435)
3.Devin角色接收到广播后,就把点数说出来,然后继续向下一个角色传递消息。程序见下图(左)。
4.骰子2开始。程序见下图(中)。
5.Dee角色。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P42_1501.jpg?sign=1739349535-mrdOvkhItxr9p6RCPvs6HTuVRDY9SnSw-0-7c9471b4cccdaacf7e510bd8bf526b9b)
开发需求002:
在程序001的基础上添加一个裁判角色。在Devin和Dee的比赛中,判断胜负并说出结果。
分析:
接着程序001继续编程,要解决在哪进行判断以及怎么进行判断?
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T42_11346.jpg?sign=1739349535-6jjlEvawP4U6GnWO9WCtikbsdzx7kOub-0-293cf245a274587ca833d85bd1f14317)
2.解决在哪里进行判断。
Devin和Dee一前一后掷骰子,应该在最后掷骰子的Dee角色说完点数后开始裁判。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1510.jpg?sign=1739349535-N1skDJ22ksqQBwVKZxEnpeYjhqjHMETM-0-b450735352a1e9cdb9a0ccd43141704f)
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=1739349535-3mIkSQzmHA1tKUnHSmypOiOADQwH3JyA-0-4ae57472712d88443dad6e1b3cc3bac4)
图1.5.7
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_11348.jpg?sign=1739349535-JwC8Q2IJAprVWwpltuV3Gc5XIln3M4SM-0-14f166dd92c09f65105c334f3afbf693)
图1.5.8
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1515.jpg?sign=1739349535-gUTe6sT2vQBOLSi0Yz0oeX8pDQiqFYzM-0-b907f9aed7e02c87468114a2b0f18285)
图1.5.9
方法一:使用单分支结构“如果……那么……”对变量“n1”和“n2”进行比较。程序见下图(左)。
这种方法比较直观,也很好理解,按顺序依次比较就行了。
方法二:使用分支嵌套结构进行判断。程序见下图(右)。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P43_1512.jpg?sign=1739349535-jfKxemQMpW79MICNSDwvzOJuZQxaLH5F-0-7c0cec46f07b8dac1bc1cfdccb40be87)
方法虽然有两种,但建议使用方法二。尽管分支嵌套结构从表面上看,方法二只是省去了一个判断条件,但在实际应用中,这种方法可不仅仅是省一个条件那么简单,1.8节会进行细致分析。
试一试:
玩家和电脑玩石头剪子布的游戏。点击左右箭头,可以实现相应切换玩家手型的效果。选好要出的手型后,点击手型角色,电脑开始随机出拳。由胜利的一方说“我赢了!”1秒,并将胜者的得分增加1。平局的时候,双方同时说“平局!”1秒,均不加分。游戏为三战两胜制,率先拿到2分者,获得最终胜利,并由胜利者说出“太好了,我取得了最终的胜利!”2秒。见图1.5.10及图中文字所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P44_1523.jpg?sign=1739349535-wAuLrB1rBtqXdme10RdJEJc6cRZI8X05-0-2bcb6c757f6a22d457d759c150f6325b)
图1.5.10