我对编程还是很陌生,因此,我创建了一个Cards and Deck类,它工作得很好,但是Hand类是我遇到麻烦的地方。在驱动程序中,我必须问用户,将要有多少名玩家以及手中有多少张牌。这是到目前为止,我将尝试仅发布必要的代码以使其简短。
这是我的甲板课:
public class Deck
{
private Cards [] deck;
private int nextCard;
public Deck()
{
deck = new Cards[52];
int iCardCount=0; // Holds how many cards have been created.
for ( int suit = 0; suit <= 3; suit++ )
{
for ( int face = 1; face <= 13; face++ )
{
deck[iCardCount] = new Cards(iCardCount);
iCardCount++;
}
}
nextCard = 0;
}
public void shuffle ()
{
for ( int i = 0; i < deck.length; i++)
{
Random ran = new Random();
int iRand = ran.nextInt(52);
Cards temp = deck[i];
deck[i] = deck[iRand];
deck[iRand] = temp;
}
nextCard = 0;
}
public Cards dealACard ()
{
if (nextCard < 52)
{
System.out.println( deck[nextCard++]);
}
else
{
System.out.print("\nError, out of cards." );
}
return (null);
}
public Hand dealAHand (int n)
{
Hand deal = new Hand();
String sHand = "";
for (int i = 0; i < n; i++)
{
sHand += "" + dealACard();
}
return deal;
}
}
对于dealAHand方法,我的讲师之前让我们使用过返回String的方法,但是现在我们已经创建了Hand类,她使我们将String更改为Hand,这使我陷入了循环。
这是我的手形课:
public class Hand
{
private int handSize; //how many cards in the hand
private int cardsInHand; //counter
private Cards [] hand;
public Hand ()
{
hand = new Cards[];
handSize = 5;
cardsInHand = 0;
}
public Hand (int handSize)
{
hand = new Cards [handSize];
this.handSize = handSize;
}
public void addCard (Cards card)
{
if (cardsInHand >= handSize)
{
Cards[] temp = new Cards[hand.length*2];
for (int i=0; i < cardsInHand; i++)
{
temp[i] = hand[i];
hand = temp;
}
}
}
我的问题是,当问用户要玩多少个玩家时,我是否要创建一个新的手牌对象?喜欢
Hand player1 = new Hand ();
吗?如果他们输入5个玩家怎么办?另外,当我要问一手有多少张牌时,如果要有3位玩家,他们每手输入15张牌?我知道我将需要使用
Do While
循环,但是会在Hand
类或驱动程序中完成吗?我知道这很长,但是朝着正确的方向微移将不胜感激。
最佳答案
使用面向对象的对象可以为您提供帮助。
卡是物体吗?是的,因此您有一个Card对象。
手是物体吗?是的(您必须在具体和抽象之间进行思考。)因此,您有一个Hand对象。
如果您有多只手怎么办?
考虑一下您可以在哪里放置多个int值或多个Integer值。玩家会成为对象吗?
您是否希望驾驶员直接在手中迭代卡片?
如果没有,那将如何工作?您需要Hand做些什么来允许驱动程序遍历卡?
请记住面向对象的原则:封装等。
关于java - 实现我的副手和上课有困难,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29219049/