所以我必须在java中编写一个HiLo卡片游戏程序,以下是如何工作的说明:
有卡和甲板两类
Card类包含2个私有变量int suit和int faceValue一个构造函数,它将2个变量作为参数,如下所示:
-
卡(int suit,int faceValue)
-
Getters - > getSuit:int和getFaceValue:int
-
compareTo(卡片卡):int方法
-
ToString():String方法
Deck类包含一个随机类型的随机变量private random:Random A no parameter constructor Deck()一个不带参数和卡类型的交易方法
Card类有一个西装,是一个从0到3的数字,代表一张牌的西装: - 0代表黑桃(这是排名最高的西装) - 1代表红心(第二高的西装) - 2代表钻石(第三高的套装) - 3代表俱乐部(最弱的套装)
faceValue是1到13之间的值; 1代表Ace,11代表杰克,12代表女王,13代表国王 .
compareTo方法将当前实例(即this)与参数卡进行比较 . 如果两个对象具有相同的套装和faceValue,则该方法返回0.如果当前实例更高(更高的值,或者如果它们是相同的值,更高的套装),则该方法返回正值(它可以是1或任何其他正值,因为幅度不重要,只有符号) . 如果当前实例较低,则返回负值 .
toString方法返回卡片的String表示(例如,“Ace of Spades”,“2 of Hearts”)
Deck类有一个Random类型的实例,它在实例化和处理新卡时使用 .
现在编写一个名为HiLoApp的应用程序类,它将: - 实例化一个Deck对象 - 处理并显示第一张牌 - 要求用户选择-1,如果他们认为下一张牌会更低,1如果下一张牌会更高,或者0退出游戏o交易并显示下一张牌o显示用户是否正确选择o计算尝试次数和正确猜测
主要方法是连续执行这些步骤,直到用户输入0退出游戏 . 此时,显示用户的总尝试次数和正确的猜测 .
Card class:
public class Card
{
private int suit;
private int faceValue;
//Constructor
public Card(int suit, int faceValue)
{
this.suit = suits;
this.faceValue = faceValue;
card = deal(); //???
}
public int getSuit()
{
return suit;
}
public int getFaceValue()
{
return faceValue;
}
public int compareTo(Card card)
{
}
public String toString
{
String cardName = null;
switch (faceValue)
{
case 2:
cardName = "Two";
break;
case 3:
cardName = "Three";
break;
case 4:
cardName = "Four";
break;
case 5:
cardName = "Five";
break;
case 6:
cardName = "Six";
break;
case 7:
cardName = "Seven";
break;
case 8:
cardName = "Eight";
break;
case 9:
cardName = "Nine";
break;
case 10:
cardName = "Ten";
break;
case 1:
cardName = "Ace";
break;
case 11:
cardName = "Jack";
break;
case 12:
cardName = "Queen";
break;
case 13:
cardName = "King";
break;
}
switch (suit)
{
case 0:
cardName += "Of Spades";
break;
case 1:
cardName += "Of Hearts";
break;
case 2:
cardName += "Of Diamonds";
break;
case 3:
cardName += "Of Clubs";
break;
}
return cardName;
}
}
Deck Class:
import java.util.Random;
public class Deck
{
private Random random;
public Deck()
{
random = 0;
}
public Card deal()
{
while (num != 0)
{
random = new Random();
suit = random.nextInt(3);
faceValue = random.nextInt(13) + 1;
}
return //how to return suit and faceValue at the same time?
}
}
Application Class:
import java.util.Random;
import java.util.Scanner;
public class HiLo
{
public static void main(String [] args)
{
//to quit the game
int num;
//getting input from user
Scanner keyboard = new Scanner(System.in);
Deck deck1 = new Deck();
= deck1.deal()
}
}
我的问题是:我不明白compareTo方法中的card参数来自何处 . 我之所以无法完全编写程序,也是因为我不明白它是如何工作的 . 第一张卡的初始交易在哪里发生?卡类是否可以访问Deck类以使用交易方法?我看到deal方法返回一个Card类类型但是如何同时返回suit和faceValue呢?
2 回答
它来自您将要写的函数调用 . 例子:
第一笔交易主要是你说
deck1.deal()
.Card类不需要使用交易方法,但HiLo确实使用了
deck1.deal()
.同时返回套装和faceValue的方法是退回卡片:
这就是上课的重点(无论如何,这是一个重点):将各种事物捆绑在一起 . 卡片是一套西装和一个faceValue . 现在它存在,在任何需要的地方使用它,好吧,卡片 .
我认为你的责任可能是错误的 . 卡片创建卡片,卡片根本不需要知道卡片 . 以这种方式思考 - 卡片可以在没有卡片的情况下存在 .
所以在你的套牌构造函数中,你应该制作所有52张牌,并将它们保存在列表中 . 然后当你在牌组上调用
deal
时,它会从列表中删除顶牌,并将其作为返回值给出 .至于
compareTo
方法 - 通常你实现Comparable接口 . 然后,如果你有一个卡片列表,并想要对它进行排序,列表将一次两张卡片,并进行比较 .