我正在做一个创建扑克游戏的项目。尽管说明很清楚,但我在面向对象编程方面遇到了很多麻烦。
所以对于这个项目,我们必须创建四个对象,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)。在这种方法之后,我不确定如何从那里开始。有人可以给我一些指示吗?