今天跟大家分享怎么用Scratch制作羊了个羊,《羊了个羊》可谓空前火爆,当大家都在考虑如何加入羊队时,我却不能专心玩游戏,作为一个编程的从业者,看到这种小游戏往往思考的是:它是如何做出来的?经过一番尝试,初步完成了Scratch版的核心功能。将游戏的核心功能分章节阐述,本文主要聚焦卡片的功能,如有不当之处,欢迎指正。由于《羊了个羊》游戏的卡片有很多,并且堆叠了多层。所以需要用到列表数据结构来存储卡片的相关信息。
思路:
- 添加一个角色多个造型和背景带卡槽的背景
- 背景功能和克隆功能排序
- 点击角色到卡槽
- 占位
- 删除三个相同的造型
- 判断输
- 卡片二层
- 判断赢
添加一个角色多个造型和背景带卡槽的背景
添加角色卡片,分别把不同卡片的样式添加到角色卡片造型里面去。本文里面用到了9个造型,背景一样。如图1
图1
背景功能和克隆功能排序
- 点击绿旗开始把背景换成开场造型,将旋涡特效增加3重复20次,再将旋涡特效增加-3重复20次变回了,换成游戏中带卡槽的造型。多线程播放声音乐羊了个羊等待完毕重复执行。
代码参考:如图7
2.排序之前我们来了解游戏卡片排序规则,横多少张卡片,竖多少张卡片,卡片长度,卡片宽度。本程序横9张卡片,竖6张卡片,卡片在程序中的步长也就是宽度为40,高度为45。通过横竖卡片数量可以计算出第一层卡片数量为54张。通过上述条件我们就可以利用克隆功能把我们第一层的卡片排序出来。
3..首先隐藏掉角色,建立变量排序,建立列表卡片造型,角色卡片移动到舞台左上角,建议坐标XY方向尽量取值整数便于好计算。变量排序设置为1。54次重复执行变量排序加1,再把排序加入列表卡片造型,如果变量排序大于9就把变量排序设为1,这样列表卡片造型执行出来的效果就是有6个1-9,列表长度54显示自己。
4.将变量排序设置为1到列表卡片造型的项目数之间的随机数,换成列表卡片造型排序项的造型,克隆自己,删除列表卡片造型的排序项,X方向增加40重复9次,再次回到原点,Y方向增加-45重复6次第一层的卡片就排序完成再隐藏自己。
5.当作为克隆体启动重复执行碰到卡片2将亮度设为-50,否则设为0,
参考代码:如图2。
图2
点击角色到卡槽
- 设置列表卡槽X,卡槽id。列表卡槽X的作用主要是在背景卡槽位置上固定卡槽X方向值,根据游戏规则,卡槽容纳7张卡片,卡片的宽度步长40。所有我们要添加7个方向值到列表卡槽X里面去。Y方向固定值。
- 当角色点击,将造型编号加入到列表卡槽id,移动到最前沿,在0.3秒移动到X方向卡槽X的卡槽id项目数值项上。Y方向就在固定值上。
参考代码:如图3
占位
1.这块比较复杂了,占位什么意思呢?比如当我们点击卡片的时候,前3次卡片飞到卡槽是不一样的卡片,第4次飞到卡槽的卡片和卡槽里面的第1张相同,那么第4次的卡片排位到第1张后面就叫占位。
2.利用否则如果的条件判断,如果列表卡槽id包含了造型编号?那么在列表卡槽id第(卡槽列表中的第一个造型编号的编号加1)项前插入造型编号实现占位功能。否则将造型编号加入列表卡槽id。参考代码:如图3
删除三个相同的造型
- 这一步思路有点绕,用到了如果否则嵌套判断。新建三个列表,临时卡槽id,重复1,重复2。实现思路就是没有重复的加入列表临时卡槽id,重复1次的加入列表重复1,重复两次的加入列表重复2,重复2里面就是重复三次的卡片。
- 程序嵌套:如果列表临时卡槽包含了造型编号,嵌套如果列表重复1包含造型编号,将造型编号加入列表重复2,否则加入列表重复1,如果两个都没有包含就造型编号加入列表临时卡槽id。
- 广播消息1到角色候补里面去,删除此克隆体。
图3
图3
判断输
- 复制角色卡片命名为候补,为什么是候补呢,其实角色卡片克隆体飞到卡槽的卡片这个克隆体已经删除,需要新角色候补来显示。绘制角色结束(也就是输),自定义函数积木刷新,新建变量编号,临时排序,最后点击,总卡片数。
- 功能实现:当点击绿旗,隐藏角色候补,将变量编号,临时排序设为1。移动到X方向(列表卡槽X的第变量值临时排序项),Y方向固定值,克隆自己,将变量编号,临时排序增加1重复7次。
参考代码如4
- 当接收到角色卡片发出的消息1时,如果列表重复2项目数大于0执行刷新(其实就是把有三个相同的卡片删除重新排序显示),否则里面嵌套判断如果变量编号小于列表卡槽id加1的项目数,执行显示,否则隐藏,回到第一个判断否则换成列表卡槽id的第变量编号项造型。
参考代码如4
- 自定义函数积木刷新:将变量最后点击设为列表重复2的第一项,删除列表重复1,重复2,临时卡槽id中第一个最后点击的编号项。重复3次删除列表卡槽id的第列表卡槽id变量最后点击的值的编号项。将变量总卡片数增加-3。
参考代码如4
图4
- 角色结束:点击绿旗隐藏,接收到背景发出消息失败(参考代码:图7)移动到最前面显示输了。
参考代码如图5
图5
卡片二层
1.复制角色卡片命名为卡片2。
2.自定义函数积木制作卡片二。
3.当绿旗被点击,隐藏自己等待4秒,制作卡片二层
4.自定义函数积木制作卡片二层:方法也简单,跟角色卡片原理一样,只不过横排卡片数量为5,竖排没变化,方向xy取值到合理的位置生成二层。到这里我们就知道两层卡片总卡片数为84了,大家跟角色卡片思路来操作加强记忆和理解。(注:列表卡槽x和克隆体被点击的程序别忘了哦)
参考代码:如图6
图6
判断赢
- 判断赢其实很简单,只要总卡片数等于0就是赢了,本文程序写在背景里面
参考代码:图7