当前位置: 首页 > 知识库问答 >
问题:

扑克游戏:用java创建牌组

夏长卿
2023-03-14

我正在做一个项目,创造一个扑克游戏。尽管指令很清楚,但我在面向对象编程方面遇到了很多麻烦。

因此,对于这个项目,我们必须创建四个对象,卡、牌组、手和扑克手。我已经完成了卡片对象的创建,现在正在处理卡片组对象。这就是我现在遇到麻烦的地方。我试着用谷歌搜索我的问题。然而,由于我是一个编程新手,我真的不了解他们的方法。例如,我不知道如何使用ArrayList。我只知道非常基本的数组方法。

以下代码是我迄今为止为Deck对象所做的:

import java.util.*;

public class Deck {

    public static final int CARDS_IN_DECK = 52;
    public static final int SHUFFLE_SWAPS = 700;
    int shufflex = 0;

    private Card[] cards;
    private int card_holder;
    private int seed;

    public Deck(int seed) {
        this.cards = new Card[CARDS_IN_DECK];

        seed = 0;

        for (int i = 2; i <= 14; i++) {
            for (int j = 0; j <= 3; j++) {

                if (j == 0) {
                    cards[seed] = new Card(i, 'c'); // c = Clubs

                } else if (j == 1) {
                    cards[seed] = new Card(i, 'd'); // d == Diamond

                } else if (j == 2) {
                    cards[seed] = new Card(i, 's'); // s== Spade

                } else if (j == 3) {
                    cards[seed] = new Card(i, 'h'); // h = Heart
                }
                seed++;
            }
        }

    }

    public void shuffle(){
        Random rand = new Random ();
        int randomNumber = rand.nextInt(51);
        int randomNumber2 = rand.nextInt(51);

        while( shufflex < SHUFFLE_SWAPS ){

            HOW DO I DO THE SWAP HERE? DON'T KNOW THE SYNTAX
            I KNOW I NEED TO CREATE ANOTHER ARRAY TO TEMPORARY STORE THE FIRST CARD
            THEN I REPLACE THE FIRST CARD WITH THE SECOND CARD
            AND THEN REPLACE THE SECOND CARD WITH THE TEMPORARY CARD

            shufflex++;
        }
    }

    public Card nextCard() {

    }

    public String toString() {

    }
}

以下是本部分的说明:

Deck类表示一副由52张扑克牌组成的牌。我们将使用一个Card对象数组来管理牌堆中的实际牌。

下面是类和实例字段,然后是Deck类的方法。按以下顺序完成每一项。

类常数

声明并初始化以下公共静态类常量:CARDS\u IN\u DECK-一个表示牌组中的牌数的整数值。将其设置为52。SHUFFLE_SWAPS-一个整数值,表示牌组洗牌期间牌应切换位置的次数。数字越高,牌组的随机性和彻底洗牌程度就越高。将其设置为至少500。实例字段

声明以下实例字段:一个Card对象数组,用于管理套牌中的CARDS_IN_DECK张牌。数组中的每个元素都是一个Card对象。一个整数,保存从Cards数组中要处理的下一张牌的索引。顺便说明一下,这个变量将从0开始,每次发牌时增加1(参见下面的方法)。一个整数变量,用于维护为测试提供的随机种子。方法

以下是您必须完成的方法列表。

公共甲板(int种子)-这是甲板类的构造函数。您必须首先初始化您的Card对象数组,使用您的类常量“CARDS_IN_DECK”来容纳52张卡。数组初始化后,您必须一次遍历数组中的一个元素,并实际创建一个Card对象。必须创建所有卡(四个套装中的每一个都为值2-14),并且不得有任何重复。种子参数应存储在种子的实例字段中。提示:在此构造函数中使用Card. CLUBS、Card.LOWEST_VALUE等。

public void shuffle()-此方法处理重置牌组以玩新牌。该方法必须通过使用Random类生成随机数来处理对数据集的洗牌。必须在0-51之间随机生成两个整数。然后,你必须在这两个位置交换牌。例如,如果随机数为20和11,梅花中的2个在数组的元素20中,红心中的3个在数组的元素11中,则在交换这两张牌后,元素20将保留红心中的3个,元素11将保留梅花中的2个。您必须重复这个过程,生成两个数字,并在相应位置交换卡,交换次数与类常量“SHUFFLE\u SWAPS”指示的次数相同。如果随机种子不是-1,则创建的随机对象应使用提供的随机种子。这将确保每次使用相同的随机种子运行程序时,数据组将以相同的方式洗牌。例如

Random rand=new Random(种子) 如果随机种子为-1,则创建一个没有种子的随机对象,这将在每次玩游戏时创建不同的游戏。例如

Random rand=new Random() 最后,用于从牌组中选择下一张要处理的牌的索引必须重置为0。

public Card nextCard()-此方法基于实例字段返回牌组中的下一张牌,该实例字段知道要处理的下一张牌在数组中的位置。在归还卡片之前,请确保更新此数字,以便下次调用该方法时,将归还卡片组中的下一张卡片(将其增加1)。

public String toString()-此方法返回Deck的String表示形式,这将在单元测试中派上用场。提示:为Card对象数组中的每个Card调用Card类的toString()方法。

我想我的方法是正确的。你能看一下吗?card对象具有参数(int value,char suit),因此对于deck,我返回(int,char)。在这种方法之后,我真的不确定如何从那里开始。谁能在这方面给我指点一下吗?


共有1个答案

严升
2023-03-14
匿名用户

出于两个原因,您应该为数据组使用数组列表。首先,添加/删除卡会更容易。其次,java中有一种洗牌方法。utils。集合。因此,要创建ArrayList:ArrayList

 类似资料:
  • 本文向大家介绍JAVA collection集合之扑克牌游戏实例,包括了JAVA collection集合之扑克牌游戏实例的使用技巧和注意事项,需要的朋友参考一下 Collection 层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序

  • 本文向大家介绍C++扑克牌的洗牌发牌游戏设计,包括了C++扑克牌的洗牌发牌游戏设计的使用技巧和注意事项,需要的朋友参考一下 笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏。具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌。然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等。 笔者在学习他人设计的基础上,完成了自己的程序设计。这里将源程序分享给大家。 

  • 问题内容: 我正在尝试创建一个对OOP友好的Java BlackJack游戏,以增进我的知识。 我碰壁了,我只是不知道该问题。想知道是否有人可以指出我的问题。 另外,在搜索了与此相关的主题之后,我发现人们一次又一次地说使用枚举会更有益,因为建议初学者这样做?还是我暂时应该坚持使用String数组。 谢谢。 我的代码: 编辑:目前我从println发出的输出是:[Card @ addbf1,Card

  • My Deck类在方法中创建一个52张牌副牌并返回一张5张牌手牌: 我的玩家类让我们提供关于玩家的信息。 问题是每个玩家都使用自己的套牌,因此有时两个或更多不同的玩家可能拥有同一张牌。我的问题是我如何设置我的程序让每个玩家使用同一套牌?多谢了。 姓名:无名氏,现金:500“黑桃之王,钻石之二,红心杰克,黑桃王牌,钻石之七”

  • 本文向大家介绍java用扑克牌计算24点,包括了java用扑克牌计算24点的使用技巧和注意事项,需要的朋友参考一下 一副扑克牌的每张牌表示一个数(J、Q、K 分别表示 11、12、13,两个司令都表示 6)。任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式。每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个

  • 题目链接 NowCoder 题目描述 五张牌,其中大小鬼为癞子,牌面为 0。判断这五张牌是否能组成顺子。 解题思路 // java public boolean isContinuous(int[] nums) { if (nums.length < 5) return false; Arrays.sort(nums); // 统计癞子数量 i