嗨Lo Card Game in Java

时间:2016-02-03 18:45:51

标签: java class object random

所以我必须用java编写一个HiLo纸牌游戏程序,这里有关于它是如何工作的说明:

有两类Card和Deck

Card Class包含2个私有变量int suit和int faceValue 一个构造函数,它将2个变量作为参数,如下所示:

  • 卡(int suit,int faceValue)
  • 吸气剂 - > getSuit:int和getFaceValue:int
  • compareTo(卡片卡):int方法
  • toString():字符串方法

Deck类包含随机类型的私有随机变量 私人随机:随机 没有参数构造函数Deck() 不带参数和卡类型的交易方法

卡类有一套西装,从0到3的数字表示卡的套装: - 0代表黑桃(这是排名最高的西装) - 1代表红心(第二高的西装) - 2代表钻石(第三高的套装) - 3代表俱乐部(最弱的西装)

faceValue是1到13之间的值; 1代表Ace,11代表Jack,12代表Queen,13代表King。

compareTo方法将当前实例(即this)与参数卡进行比较。如果两个对象具有相同的套装和faceValue,则该方法返回0.如果当前实例更高(更高的值,或者它们是相同的值,更高的套装),则该方法返回一个正值(它可以是+ 1或任何其他正值,因为幅度不重要,只有符号)。如果当前实例较低,则返回负值。

toString方法返回卡片的String表示形式(例如“Ace of Spades”,“2 of Hearts”)

Deck类有一个Random类型的实例,它在什么时候使用 实例化和处理新卡。

现在编写一个名为HiLoApp的应用程序类,它将: - 实例化Deck对象 - 处理并显示第一张卡片 - 要求用户选择-1,如果他们认为下一张牌会更低,+1,如果下一张牌会更高,或者0则退出游戏 o处理并显示下一张卡片 o显示用户是否正确选择 o计算尝试次数和正确猜测

主要方法是连续执行这些步骤,直到用户输入0退出游戏。此时,显示用户的总尝试次数和正确的猜测。

卡片类:

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;
    }
}

甲板上课:

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?

    }
}

申请类:

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 个答案:

答案 0 :(得分:1)

我认为你的责任可能是错误的。卡片创建卡片,卡片根本不需要知道卡片。以这种方式思考 - 卡片可以在没有卡片的情况下存在。

所以在你的套牌构造函数中,你应该制作所有52张牌,并将它们保存在列表中。然后当你在牌组上调用deal时,它会从列表中删除顶牌,并将其作为返回值给出。

对于compareTo方法 - 通常会实现Comparable接口。然后,如果你有一张卡片列表,并想要对它进行排序,那么列表将一次两张卡片,然后进行比较。

答案 1 :(得分:0)

  

我不明白compareTo方法中的card参数来自哪里。

它来自您将要写的函数调用。例子:

Card card1 = deck.deal();
Card card2 = deck.deal();

if (compare (card1, card2)) ...

第一笔交易主要是你说deck1.deal()

Card类不需要使用交易方法,但HiLo会在deck1.deal()时使用。

同时返回套装和faceValue的方法是返回一张卡片:

public Card deal()
{
  ...

  Card result (suit, faceValue);
  return result;
}

这确实是有一个类(无论如何都是一个重点):把所有东西捆绑在一起。卡片是一套西装和一个faceValue。现在它存在,在任何需要的地方使用它,好吧,卡片。