新手自学java,想做一个题目,求大神给提供一个编程的思想,我改怎样用代码去实现这个功能
题目是让用java制作一个发牌器,斗地主的发牌器,要求随机性高,就像平常斗地主一样发牌,3个人,每人17张牌,底牌3张,发完以后将每个人的牌都显示出来,包括底牌,我现在刚...
题目是让用java制作一个发牌器,斗地主的发牌器,要求随机性高,就像平常斗地主一样发牌,3个人,每人17张牌,底牌3张,发完以后将每个人的牌都显示出来,包括底牌,我现在刚刚学到类与对象那里,求告知怎么做,怎样去实现,不用告诉我代码,或者说,我目前学的知识有没有能力做出来,谢谢
展开
3个回答
2017-03-01
展开全部
简单实现
定义54张牌,放到一个数组里边。
定义三个收牌集合,一个底牌集合,已发牌集合。
for循环,循环17次,每一次循环随机从牌数组里边取三张牌出来,分别放到三个收牌集合里边。循环结束后,将数组中剩下的三个元素放入底牌集合,则发牌结束。
注:在循环发牌的时候,需要注意取到的牌是不是已经发了,如果发了,则需重新取牌(此处可以用map存已发牌集合,只需校验key就可。也可以用递归去取)。
怎么实现随机,可以用随机数生成方法。生成0到53的整数,作为下标直接到数组里边获取。
复杂实现1
根据面向对象思想,将牌对象化,每次在取牌的时候根据牌的花色,牌的大小进行随机。这样随机的度比较高。
复杂的实现2
加一个洗牌算法,每次在往发牌集合里边放入前进行随机洗牌,发牌按照顺序发就成。
实现过程上两个都一样,只不过随机的生成规则不一样。第三种实现呢,是在发牌之前就实现洗牌了。洗牌的规则可参照上两种随即方法实现。
我能想到的三种比较简单的实现,你应该都可以做到。有问题可以追问。
追问
我尝试着做了一下,我发现一个问题,就是我把所有牌放进了一个String的数组中,然后让一个随机数来抽取一个该数组的对应下标进行取值,但是取值以后怎样才能删除掉已经被取值的下标,防止重复,谢谢大神不吝赐教!
追答
可以将下标放入Map的key中。因为Map的key不能重复,每次在取到下标的时候去校验下是否有key。有key则重新取,没有则发牌。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-03-01
展开全部
这个功能是可以实现的,对新学者就是比较绕,要充分的考虑好对象的存在!
你只是做发牌功能呢还是要为后面游戏的操作一起考虑进去,如果只是做发牌功能呢,就很简单了,不用给后面操作做铺垫,只要一个ID定位牌的含义就好了。
发牌最主要的就是随机算法,例如54张扑克 给一个集合记录起来,然后就利用随机数的方式从1-54中 随机抽3张(list和map都行,抽取后要从集合中删除哦)。
当然能这样发不能只依赖随机数,还要有简单的记录发放牌的一个记录器,即3个玩家每人都要有一个集合,这个集合是每人手上17张牌的具体牌号,至于发放顺序,如果不需要像QQ斗地主一样一张一张的出现展示,其实可以直接全部随机完后一次性展示出来
你只是做发牌功能呢还是要为后面游戏的操作一起考虑进去,如果只是做发牌功能呢,就很简单了,不用给后面操作做铺垫,只要一个ID定位牌的含义就好了。
发牌最主要的就是随机算法,例如54张扑克 给一个集合记录起来,然后就利用随机数的方式从1-54中 随机抽3张(list和map都行,抽取后要从集合中删除哦)。
当然能这样发不能只依赖随机数,还要有简单的记录发放牌的一个记录器,即3个玩家每人都要有一个集合,这个集合是每人手上17张牌的具体牌号,至于发放顺序,如果不需要像QQ斗地主一样一张一张的出现展示,其实可以直接全部随机完后一次性展示出来
追问
我尝试着做了一下,我发现一个问题,就是我把所有牌放进了一个String的数组中,然后让一个随机数来抽取一个该数组的对应下标进行取值,但是取值以后怎样才能删除掉已经被取值的下标,防止重复,谢谢大神不吝赐教!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询