投稿  收藏 
Scratch复刻游戏《羊了个羊》


《羊了个羊》可谓空前火爆,当大家都在考虑如何加入羊队时,我却不能专心玩游戏,作为一个编程的从业者,看到这种小游戏往往思考的是:它是如何做出来的?经过一番尝试,初步完成了Scratch版《羊了个羊》的核心功能。
  下面跟大家分享怎么用Scratch制作《羊了个羊》,受篇幅所限,本文主要聚焦卡片等核心功能的实现,如有不当之处,欢迎指正。由于《羊了个羊》游戏的卡片有很多,并且堆叠了多层,所以需要用到列表数据结构来存储卡片的相关信息(如图1)。
Scratch复刻游戏《羊了个羊》
 

一、程序思路


  1. 一个卡片角色添加多个造型,背景是带卡槽的草地。
  2. 背景功能和卡片克隆功能排序。
  3. 点击卡片,角色移动到卡槽。
  4. 卡片在卡槽上占位。
  5. 删除三个相同的造型。
  6. 判断输的条件。
  7. 处于下层的卡片。
  8. 判断胜利的条件。

二、角色和背景


  卡片角色有多个造型。背景包含带卡槽的草地、开局、胜利。添加角色卡片,分别把不同卡片的样式添加到角色卡片造型里面去。本文用到了9个造型,背景3个造型包括:开场游戏中带卡槽、获胜,素材和背景音乐从原版游戏中截取(如图2)。
Scratch复刻游戏《羊了个羊》
 

  建立变量排序、卡片总数、最后点击。建立列表卡片造型、卡槽id、卡槽X、临时卡槽id、重复1、重复2。

三、背景功能和卡片克隆排序


  1. 点击绿旗开始,把背景换成开场造型,将旋涡特效增加3重复20次,再将旋涡特效增加-3重复20次变回,换成“游戏中带卡槽”的造型。多线程播放音乐《羊了个羊》,等待完毕重复执行(如图3)。
Scratch复刻游戏《羊了个羊》
 

  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。代码参考图4。
Scratch复刻游戏《羊了个羊》
 

四、点击角色移动到卡槽


  1. 设置列表“卡槽X”“卡槽id”。列表“卡槽X”的作用是在背景卡槽位置上固定卡槽X方向值,根据游戏规则,卡槽最多容纳7张卡片,卡片的宽度步长40。所以我们要添加7个方向值到列表卡槽X里面去。Y方向是固定值(如图5)。
Scratch复刻游戏《羊了个羊》
 

  当角色被点击,将造型编号加入到列表卡槽id,移动到最前面,在0.3秒移动到X方向卡槽X的卡槽id项目数值项上。Y方向就在固定值上(如图6)。
Scratch复刻游戏《羊了个羊》
 

五、卡片在卡槽中占位


  1.这一部分是游戏的难点,占位什么意思呢?比如当我们点击3张不同造型的卡片,这3次飞到卡槽是不一样的卡片,第4次飞到卡槽的卡片和卡槽里面的第1张相同,那么第4次的卡片排位到第1张后面,这就叫占位。
  2.利用如果否则的条件判断,如果“列表卡槽id包含了造型编号”,那么在列表卡槽id第(卡槽列表中的第一个造型编号的编号+1)项前插入“造型编号”实现占位功能。
  否则将造型编号加入列表卡槽id。
  代码参考图6。

六、删除三个相同的造型

1. 这也是游戏的一个难点,难在实现这一功能的思路有点绕,用了两个“如果否则”嵌套判断。
  新建三个列表,临时卡槽id,重复1,重复2。对于点击的卡片,如果没有重复的就加入列表“临时卡槽id”,重复1次的加入列表“重复1”,重复两次的加入列表“重复2”,当重复2次后就有了3张一样的卡片,所以“重复2”里面就是重复3次的卡片。
  2. 程序嵌套:如果列表“临时卡槽”包含了造型编号,嵌套“如果列表重复1包含造型编号,将造型编号加入列表重复2,否则加入列表重复1”,如果两个都没有包含就将造型编号加入列表“临时卡槽id”。
  3. 广播消息1到角色候补里面去,删除此克隆体(如图7)。
Scratch复刻游戏《羊了个羊》
 

七、判断输的条件


  1. 复制角色卡片命名为“候补”,为什么是候补呢?其实角色卡片克隆体飞到卡槽时,卡片的这一个克隆体已经删除,我们要用新角色“候补”来显示,这也是编程中常用的一个技巧,你看见的只是本体在同一个位置上另外一个长得一样的克隆体而已。
  绘制角色“结束”(也就是提示游戏输了的提示语),自定义函数积木刷新,新建变量“编号”“临时排序”“最后点击”“总卡片数”(如图8)。
Scratch复刻游戏《羊了个羊》
 

  2. 功能实现:当点击绿旗,隐藏角色候补,将变量“编号”和“临时排序”都设为1。移动到X方向(列表卡槽X的第变量值临时排序项),Y方向固定值,克隆自己,将变量编号,临时排序增加1重复7次(如图9)。
Scratch复刻游戏《羊了个羊》
 

  3. 当接收到角色卡片发出的“消息1”时,如果列表重复2项目数大于0那么执行刷新(其实就是把有三个相同的卡片删除重新排序显示),否则里面嵌套判断如果变量编号小于列表卡槽id加1的项目数,执行显示,否则隐藏,回到第一个判断否则换成列表卡槽id的第变量编号项造型(如图10)。
Scratch复刻游戏《羊了个羊》
 

  4. 自定义函数积木“刷新”:将变量最后点击设为列表重复2的第一项,删除列表重复1,重复2,临时卡槽id中第一个最后点击的编号项。重复3次删除列表卡槽id的第列表卡槽id变量最后点击的值的编号项。将变量总卡片数增加-3(如图11)。
Scratch复刻游戏《羊了个羊》
 

  5. 角色结束:点击绿旗隐藏,接收到背景发出消息失败,移动到最前面显示输了(如图12)。
Scratch复刻游戏《羊了个羊》
 

八、第二層卡片


  1.复制角色卡片命名为“卡片2”。
  2.自定义函数积木“制作卡片二层”。
  3.当绿旗被点击,隐藏自己等待4秒,制作第二层卡片。
  4.自定义函数积木“制作卡片二层”:方法也简单,跟角色卡片原理一样,只不过横排卡片数量为5,竖排没变化,方向XY取值到合理的位置生成二层。到这里我们就知道两层卡片总卡片数为84了,大家跟着角色卡片思路来操作加强记忆和理解(如图13)。
Scratch复刻游戏《羊了个羊》
 

  注意不要忘了列表卡槽X和克隆体被点击的程序(如图14)。
Scratch复刻游戏《羊了个羊》
 

九、判断赢


  1. 判断赢其实很简单,只要总卡片数等于0就是赢了,这部分程序写在背景里面就行了(如图15)。
Scratch复刻游戏《羊了个羊》
 

  《羊了个羊》这个游戏使用Scratch制作还是比较复杂,因篇幅所限没能详细介绍所有代码,而且目前代码还有一个较大的Bug,你在游戏的过程中应该很容易发现。当然这个Bug是可以解决的,我们会提供两种版本的源代码供您比较学习,请关注公众号“壹零社”下载第45期的代码。
 

关 键 词

Scratch

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢