3

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

所以对于这个项目,我们必须创建四个对象,Card、Deck、Hand 和 Poker Hand。我已经完成了卡片对象的创建,现在正在处理卡片组对象。这就是我现在遇到麻烦的领域。我试过用谷歌搜索我的问题。但是,由于我是编程新手,所以我并没有真正了解他们的方法。例如,我不知道如何使用 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_IN_DECK - 一个整数值,表示牌组中的牌张数。将此值设置为 52。 SHUFFLE_SWAPS - 一个整数值,表示在洗牌过程中卡片应切换位置的次数。数字越高,牌组的随机性和彻底洗牌就越多。将此值设置为至少 500。 实例字段

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

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

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

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

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

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

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

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


我想我的public Deck (int seed)方法是对的。你能看一下吗?卡片对象的参数为(int value,char suit),所以对于deck,我返回(int,char)。在这种方法之后,我不确定如何从那里开始。有人可以给我一些指示吗?

4

1 回答 1

2

你应该使用ArrayList甲板有两个原因。首先,添加/删除卡片会更容易。其次,在java.utils.Collections. 所以要创建一个 ArrayList: ArrayList<Card> deck = new ArrayList<Card>(),添加一张卡片:deck.add(someCard | int_index),删除一张卡片:deck.remove(someCard | int_index),洗牌:(deck = Collections.shuffle(deck)记得 import java.utils.Collections)。

于 2012-04-27T01:25:43.343 回答