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

2025年03月23日 14:30
有3个网友回答
网友(1):

首先定义牌和玩家对象。

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

玩家有一个list存放手牌。

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

定义三个玩家。

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

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

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

for循环直接打印。

网友(2):

  1. 简单实现

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

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

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

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

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

  2. 复杂实现1

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

  3. 复杂的实现2

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

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

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

网友(3):

这个功能是可以实现的,对新学者就是比较绕,要充分的考虑好对象的存在!
你只是做发牌功能呢还是要为后面游戏的操作一起考虑进去,如果只是做发牌功能呢,就很简单了,不用给后面操作做铺垫,只要一个ID定位牌的含义就好了。
发牌最主要的就是随机算法,例如54张扑克 给一个集合记录起来,然后就利用随机数的方式从1-54中 随机抽3张(list和map都行,抽取后要从集合中删除哦)。
当然能这样发不能只依赖随机数,还要有简单的记录发放牌的一个记录器,即3个玩家每人都要有一个集合,这个集合是每人手上17张牌的具体牌号,至于发放顺序,如果不需要像QQ斗地主一样一张一张的出现展示,其实可以直接全部随机完后一次性展示出来