【问题标题】:Hi Lo Card Game In JavaJava中的Hi Lo纸牌游戏
【发布时间】:2016-02-03 18:45:50
【问题描述】:

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

有两个类 Card 和 Deck

卡片类包含 2 个私有变量 int suit 和 int faceValue 一个将 2 个变量作为参数的构造函数,如下所示:

  • 卡片(int suit,int faceValue)
  • Getters --> getSuit:int 和 getFaceValue:int
  • compareTo(Card card):int 方法
  • toString():String 方法

Deck 类包含一个 Random 类型的私有随机变量 私人随机:随机 一个无参数构造函数 Deck() 一个不带参数的卡片类型的deal方法

Card 类有一个花色,它是一个从 0 到 3 的数字,代表一张牌的花色: - 0 代表黑桃(这是排名最高的花色) - 1 代表红心(第二高的花色) - 2 代表钻石(第三高的花色) - 3 代表梅花(最弱的花色)

faceValue 是一个介于 1 和 13 之间的值; 1代表Ace,11代表Jack,12代表Queen,13代表King。

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

toString 方法返回卡片的字符串表示形式(例如,“黑桃 A”、“红桃 2”)

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 参数来自哪里。另外,我无法完全编写程序的原因是因为我不明白它是如何工作的。第一张牌的初始发牌发生在哪里? card 类是否可以访问 Deck 类以使用 deal 方法?我看到 deal 方法返回一个 Card 类类型,但我怎样才能同时返回花色和 faceValue?

【问题讨论】:

  • 你应该问你的老师这些问题。
  • 我做了,但你看它在线,我不能只是等她回复。我真的很想弄清楚,但每次我想我明白了,我最终都会有更多的问题

标签: java class object random


【解决方案1】:

我认为您可能以错误的方式承担责任。牌组创建牌组,牌组根本不需要知道牌组。这么想吧——一张牌没有套牌也可以存在。

因此,在您的套牌构造器中,您可能应该制作所有 52 张牌,并将它们保存在一个列表中。然后当你在牌组上调用deal 时,它会从列表中移除最上面的牌,并将其作为返回值。

至于compareTo 方法——通常你实现Comparable 接口。然后,如果您有一张卡片列表,并且想要对其进行排序,该列表将获取卡片,一次两张,然后比较它们。

【讨论】:

  • 虽然,我不能只创造所有卡牌的可能性,因为在这种情况下,它不仅仅是 1 副牌,还有无限数量的牌组。
  • 好吧,这很合理。无论哪种方式,当你调用deal 时,牌组负责分发一张新牌。在您的main 方法中,您创建了一个套牌;现在你必须打电话给deal 来获得一张卡片,System.out.println 来显示你得到的卡片。
  • 我得到的作业也给了我 2 个类 Card 和 Deck 的 UML 图。 Deck 包含一个 Random 类型的实例,如下所示:private Random random。它有一个无参数构造函数 Deck () 和一个返回类型 Card 的 deal 方法
  • 但我不需要同时发牌两次,这样每次我都可以比较两者吗?
  • 谷歌 while 循环。您需要为前一张卡设置一个变量,为下一张卡设置一个变量。然后,当用户没有输入“0”时,通过发另一张牌来更新下一张和上一张。
【解决方案2】:

不明白 compareTo 方法中的 card 参数从何而来。

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

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

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

第一笔交易主要出现在您说deck1.deal()的地方。

Card 类不需要使用 deal 方法,但 HiLo 会使用,当它显示 deck1.deal() 时。

同时退花色和面值的方法是退卡:

public Card deal()
{
  ...

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

这确实是拥有一个类的要点(无论如何,这很重要):将所有东西捆绑在一起。卡片是一套花色和一个面值。既然它存在了,就在你需要的地方使用它,嗯,一张卡片。

【讨论】:

  • 每笔交易都使用我在 HiLo 应用中创建的 deck1.deal() 吗?
  • 是的,你应该这样写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多