java - 如何制作一系列卡片以及如何轻松匹配它们

标签 java arrays java-collections-api

我正在制作一个疯狂的八字java纸牌游戏,并为一个玩家的手制作了一系列纸牌,但是当我尝试打印出那手牌时,它是一堆随机字符。我也有一个卡片类(class),但这似乎还不错。请帮忙。

错误:

Welcome to Crazy Eights!(Type 0 to start)
0
Your Hand:
[LnnajiO.Card;@73ae74f5

卡片类别:

import java.util.Random;
public class Card {

//All of the card numbers, in strings
final String[] FACESTRINGS = {"" , "Ace" , "Two", "Three", "Four", "Five", "Six", 
        "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
//All of the card numbers as integers
final int[] FACENUMS = {0,1,2,3,4,5,6,7,8,9,10,11,12,13};
final String[] SUITSTRINGS = {"Hearts", "Diamonds", "Spades", "Clubs"};
final int[] SUITNUMS = {1,2,3,4};

int FaceNumIndex;
int SuitIndex;
int cardFaceNumber;
String cardFaceString;
int suitFaceNumber;
String suitFaceString;
Random rand = new Random();

    //Default Random Card that assignes a random suit and number
public Card(){
    int tempSuit = rand.nextInt(3);
    int tempNumber = rand.nextInt(13)+1;
    FaceNumIndex = tempNumber;
    cardFaceNumber = FACENUMS[tempNumber];
    cardFaceString = FACESTRINGS[tempNumber];
    suitFaceNumber = SUITNUMS[tempSuit];
    suitFaceString = SUITSTRINGS[tempSuit];

}

    //Overrides the default 
public Card(int suit, int face){
    //Return 1-13 for the face and 0-3 for the suit
    FaceNumIndex = face;
    SuitIndex = suit;
    cardFaceNumber = FACENUMS[face];
    cardFaceString = FACESTRINGS[face];
    suitFaceNumber = SUITNUMS[suit];
    suitFaceString = SUITSTRINGS[suit];
}

public void setFaceName(int faceName){
    //Takes an int to set the Suit of the card  input 1-13
    FaceNumIndex = faceName;
    cardFaceNumber = FACENUMS[faceName];
    cardFaceString = FACESTRINGS[faceName];
}

public void setSuitName(int suitName){
    //Takes an int 1-4 to set the suit name from the array
    SuitIndex = suitName;
    suitFaceNumber = SUITNUMS[suitName];
    suitFaceString = SUITSTRINGS[suitName];
}
//Returns Face Values
public int getFace(){
    return FACENUMS[FaceNumIndex];
}
public String getFaceName(){
    return FACESTRINGS[FaceNumIndex];
}

//Return Suit Values
public int getSuit(){
    return SUITNUMS[SuitIndex];
}
public String getSuitName(){
    return SUITSTRINGS[SuitIndex];
}

//Compares this card to the returned class
public boolean isHigherThan(Card passCard, boolean AceHigher){
    int tempCardSuit = passCard.getSuit();
    int tempCardFace = passCard.getFace();
    if (tempCardFace>FaceNumIndex){
        return false;
    }else if (tempCardFace<FaceNumIndex){
        return true;
    }else{
        if (tempCardSuit>SuitIndex){
            return false;
        }else if(tempCardSuit<SuitIndex){
            return true;
        }else{
            System.out.println("The Cards are equal");
            return false;
        }
    }

}

//Override for previous isHigherThan
public boolean isHigherThan(Card PassCard){

    return isHigherThan(PassCard, true);

}

public String toString(){
    return cardFaceString + " of " + suitFaceString;
}

public boolean isHigherThan(int i, String string) {
    // TODO Auto-generated method stub
    return false;
}
}

另外,对于这个“if”语句,我将检查玩家2手上任何一张牌的“suitFaceNumber”或“cardFaceNumber”是否与起始牌的“suitFaceNumber”或“cardFaceNumber”相匹配,而不是一一进行。

“if”语句

if(player2Hand[0].cardFaceNumber==startingCard.cardFaceNumber ||
   player2Hand[4].suitFaceNumber==startingCard.suitFaceNumber ){

}

最佳答案

你的方法

public String toString(){...}

在 Card 类中打印一张卡片,但是当你有一张卡片时

Card[] hand

这不会自动应用于数组元素。您必须编写一个迭代数组的方法。

或者,编写一个 Hand 类,该类将有自己的 toString。

关于java - 如何制作一系列卡片以及如何轻松匹配它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28031749/

相关文章:

java - 确定地理点是否在州边界的 X 米范围内(使用边界数据的 shapefile)

java - Quartz 调度作业异常

java - Android Instrumentation 测试 - UI 线程问题

arrays - 如何在 F# 中生成动态类型的数组

javascript - 从 JavaScript 数组中删除索引和对象值

php - 如何使用另一个数组中的值作为键从数组中选择值的子集?

java - Map<String, Integer> 和 Map<Integer ,String> 排序

java - 如何在 Java 中用 lambda 和流替换 for 循环?

java - 列表与 Arrays.asList 构造的列表的区别有惊人的结果。为什么?

java - 检查 HashMap <Object,String> 的值