素材:54张纸牌牌面,做为纸牌角色的54个造型
任务一:在舞台上随机显示18张扑克牌,排列整齐即可,牌面可以重复
这个任务要解决两个问题即可:
1、18张扑克,学会使用克隆,通过重复执行18次,克隆自己,每个克隆体随机一个造型即可;
2、设置一个变量x,表示x坐标,让克隆体的x坐标=x,只要每次克隆后改变一下变量x值,就可以让克隆体从左到右整齐排列了。
任务二:模拟真实发牌,要求从54张牌里随机取出18张,不能重复(同一张只能出现一次),要求纸牌整齐排列。
这个级别的任务就要用到一定的算法了,真实发牌,18张要随机,一般有两种思路:
方法1、先洗牌,也就是把54张牌的顺序打乱,然后再从上面拿出18张。这种思路的重点就是打乱排序。
纸牌角色的54个造型不是随便排列的,我们是同一花色按照A、2、3、4……10、J、Q、K这样的有序排列的,造型的ID从1-54代表54张牌。把这54个数存入列表,通过打乱这个列表,实现对牌面的打乱。打乱列表顺序的方法比较多,举个例子可以随机生成两个数(1-54之间)让这两项值互换,重复多次执行即可打乱顺序。
打乱后,再按顺序从列表中取出18张即可
方法2:不洗牌,从54张牌里随机抽取18张。
有序的生成一个列表(1-54)重复执行18次,每次随机从列表中抽取一项,生成克隆体,然后从列表里删除该项。
18次抽取完毕之后,发牌完毕,此时列表里就只有36项。
任务三:实现对发出的牌重新整理,按照A、2、3……10、j、Q、K、小王 、大王,的顺序排列
这个难度确实又大了不少,这里我只是分享一下思路,感兴趣的伙伴们可以通过网站下载源码一起交流。
难在哪?我们还是按照常规思路一步步来,要将发出的18张牌排序,那么我们首先可以通过列表存储这18张牌的造型编号,也就是从1-54中取出的18个数字,但是我们不能直接对这18个数进行排序。因为54张牌里有四种花色,每一种13张,比如13我们代表的是红桃K,那么14就是另一个花色(黑桃A,如图),也就是说列表中1、14、27、40都是A,他们是一样大的,只是花色不同。
看到这个规律我们就需要设计另一个算法,要将存储的18个数值转换为牌面值,其实算法很简单,就是用列表中的数去除以13,取余数即可,如果余数为0就是K,我们用数字13代替。这样所有18个数就是1-13范围的数据了,代表A——k,再次排序就是扑克的牌面顺序了。
现在我们只是解决了排序问题,在实际中还要将扑克位置进行调整,也就是重新排列,因此我们还需要一个列表,分别记录这18张扑克的x坐标(相当于18个座位号),再将排序后的列表,根据自己对应的项找到对应的坐标,进行移动。这个过程实现起来还是有些难度,比如移动后牌面的层级发生了变化,如图,这就需要想一些办法了,我们重点是掌握这个原理。
最后欢迎大家一起来交流分享,共同学习一起进步。
源码下载:http://www.kidscode.cn/shows3/10596
本站内容未经许可,禁止任何网站及个人进行转载。