作为编程项目的一部分,我正在尝试编写一个简单的Slapjack游戏(简单,因为玩家无法输掉)。我有一个卡片班,一个甲板班和一个主班。在大多数情况下一切正常,甲板洗牌,我可以处理卡等。因为它是Slapjack我需要程序知道杰克什么时候被处理,但我不知道如何实现这一点。该计划如下:
卡类
public class Card2
{
private int rank, suit;
private static String[] suits = { "hearts", "spades", "diamonds", "clubs" };
private static String[] ranks = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace" };
public String toString()
{
return ranks[rank] + " of " + suits[suit];
}
public int getRank()
{
return rank;
}
public int getSuit()
{
return suit;
}
Card2 (int suit, int rank)
{
this.rank=rank;
this.suit=suit;
}
}
甲板上课
import java.util.Random;
public class Deck2
{
private Card2[] cards;
int i;
Deck2()
{
i=51;
cards = new Card2[52];
int x=0;
for (int a=0; a<=3; a++)
{
for (int b=0; b<=12; b++)
{
cards[x] = new Card2(a,b);
x++;
}
}
}
public Card2 Draw()
{
Random generator = new Random();
int index=0;
do {
index = generator.nextInt( 52 );
} while (cards[index] == null);
i--;
Card2 temp = cards[index];
cards[index]= null;
return temp;
}
public int getTotal()
{
return i;
}
}
主程序
public class Main2
{
public static void main(String[] args)
{
Deck2 deck = new Deck2();
System.out.println (deck.Draw());
}
}
答案 0 :(得分:0)
首先,请遵循java命名约定:使用前导小写字母命名方法。
要查看是否已绘制插孔,请保留对提取的卡片的引用:
Card card = deck.Draw();
if (card.getRank() == 9) {
// the card drawn was a jack
}
答案 1 :(得分:0)
这听起来像是家庭作业,所以我不打算给你完整的解决方案。我会给你一个很大的暗示:getRank()
没有做它应该做的事情。正如您目前编码的那样,它会返回排名的索引,而不是实际排名。
编辑:我看到单个构造函数确保正确初始化等级和套装,因此我删除了关于潜在IndexOutOfBoundsException
的陈述。