首先定义牌和玩家对象。
牌还要考虑王牌,属性有花色和点数,能够区分。
玩家有一个list存放手牌。
for循环生成52个对象,然后生成2个王牌,加入一个list.
定义三个玩家。
循环17次,每次按顺序发牌三张。
发牌的时候操作Random生成随机数,每发出一张,从list中remove掉此牌
最后得到4个list,三个玩家加底牌
for循环直接打印。
简单实现
定义54张牌,放到一个数组里边。
定义三个收牌集合,一个底牌集合,已发牌集合。
for循环,循环17次,每一次循环随机从牌数组里边取三张牌出来,分别放到三个收牌集合里边。循环结束后,将数组中剩下的三个元素放入底牌集合,则发牌结束。
注:在循环发牌的时候,需要注意取到的牌是不是已经发了,如果发了,则需重新取牌(此处可以用map存已发牌集合,只需校验key就可。也可以用递归去取)。
怎么实现随机,可以用随机数生成方法。生成0到53的整数,作为下标直接到数组里边获取。
复杂实现1
根据面向对象思想,将牌对象化,每次在取牌的时候根据牌的花色,牌的大小进行随机。这样随机的度比较高。
复杂的实现2
加一个洗牌算法,每次在往发牌集合里边放入前进行随机洗牌,发牌按照顺序发就成。
实现过程上两个都一样,只不过随机的生成规则不一样。第三种实现呢,是在发牌之前就实现洗牌了。洗牌的规则可参照上两种随即方法实现。
我能想到的三种比较简单的实现,你应该都可以做到。有问题可以追问。
这个功能是可以实现的,对新学者就是比较绕,要充分的考虑好对象的存在!
你只是做发牌功能呢还是要为后面游戏的操作一起考虑进去,如果只是做发牌功能呢,就很简单了,不用给后面操作做铺垫,只要一个ID定位牌的含义就好了。
发牌最主要的就是随机算法,例如54张扑克 给一个集合记录起来,然后就利用随机数的方式从1-54中 随机抽3张(list和map都行,抽取后要从集合中删除哦)。
当然能这样发不能只依赖随机数,还要有简单的记录发放牌的一个记录器,即3个玩家每人都要有一个集合,这个集合是每人手上17张牌的具体牌号,至于发放顺序,如果不需要像QQ斗地主一样一张一张的出现展示,其实可以直接全部随机完后一次性展示出来