新手自学java,想做一个题目,求大神给提供一个编程的思想,我改怎样用代码去实现这个功能

题目是让用java制作一个发牌器,斗地主的发牌器,要求随机性高,就像平常斗地主一样发牌,3个人,每人17张牌,底牌3张,发完以后将每个人的牌都显示出来,包括底牌,我现在刚... 题目是让用java制作一个发牌器,斗地主的发牌器,要求随机性高,就像平常斗地主一样发牌,3个人,每人17张牌,底牌3张,发完以后将每个人的牌都显示出来,包括底牌,我现在刚刚学到类与对象那里,求告知怎么做,怎样去实现,不用告诉我代码,或者说,我目前学的知识有没有能力做出来,谢谢 展开
 我来答
lost_小山
2017-03-01 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:54.4万
展开全部

首先定义牌和玩家对象。

牌还要考虑王牌,属性有花色和点数,能够区分。

玩家有一个list存放手牌。

for循环生成52个对象,然后生成2个王牌,加入一个list.

定义三个玩家。

循环17次,每次按顺序发牌三张。

发牌的时候操作Random生成随机数,每发出一张,从list中remove掉此牌

最后得到4个list,三个玩家加底牌

for循环直接打印。

追问
我尝试着做了一下,我发现一个问题,就是我把所有牌放进了一个String的数组中,然后让一个随机数来抽取一个该数组的对应下标进行取值,但是取值以后怎样才能删除掉已经被取值的下标,防止重复,谢谢大神不吝赐教!
匿名用户
2017-03-01
展开全部
  1. 简单实现

    定义54张牌,放到一个数组里边。

    定义三个收牌集合,一个底牌集合,已发牌集合。

    for循环,循环17次,每一次循环随机从牌数组里边取三张牌出来,分别放到三个收牌集合里边。循环结束后,将数组中剩下的三个元素放入底牌集合,则发牌结束。

    注:在循环发牌的时候,需要注意取到的牌是不是已经发了,如果发了,则需重新取牌(此处可以用map存已发牌集合,只需校验key就可。也可以用递归去取)。

    怎么实现随机,可以用随机数生成方法。生成0到53的整数,作为下标直接到数组里边获取。

  2. 复杂实现1

    根据面向对象思想,将牌对象化,每次在取牌的时候根据牌的花色,牌的大小进行随机。这样随机的度比较高。

  3. 复杂的实现2

    加一个洗牌算法,每次在往发牌集合里边放入前进行随机洗牌,发牌按照顺序发就成。

实现过程上两个都一样,只不过随机的生成规则不一样。第三种实现呢,是在发牌之前就实现洗牌了。洗牌的规则可参照上两种随即方法实现。

我能想到的三种比较简单的实现,你应该都可以做到。有问题可以追问。

追问
我尝试着做了一下,我发现一个问题,就是我把所有牌放进了一个String的数组中,然后让一个随机数来抽取一个该数组的对应下标进行取值,但是取值以后怎样才能删除掉已经被取值的下标,防止重复,谢谢大神不吝赐教!
追答
可以将下标放入Map的key中。因为Map的key不能重复,每次在取到下标的时候去校验下是否有key。有key则重新取,没有则发牌。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-03-01
展开全部
这个功能是可以实现的,对新学者就是比较绕,要充分的考虑好对象的存在!
你只是做发牌功能呢还是要为后面游戏的操作一起考虑进去,如果只是做发牌功能呢,就很简单了,不用给后面操作做铺垫,只要一个ID定位牌的含义就好了。
发牌最主要的就是随机算法,例如54张扑克 给一个集合记录起来,然后就利用随机数的方式从1-54中 随机抽3张(list和map都行,抽取后要从集合中删除哦)。
当然能这样发不能只依赖随机数,还要有简单的记录发放牌的一个记录器,即3个玩家每人都要有一个集合,这个集合是每人手上17张牌的具体牌号,至于发放顺序,如果不需要像QQ斗地主一样一张一张的出现展示,其实可以直接全部随机完后一次性展示出来
追问
我尝试着做了一下,我发现一个问题,就是我把所有牌放进了一个String的数组中,然后让一个随机数来抽取一个该数组的对应下标进行取值,但是取值以后怎样才能删除掉已经被取值的下标,防止重复,谢谢大神不吝赐教!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式