Java 纸牌游戏规则:从一副纸牌中抽出手牌(不要开玩笑)。打牌时,只有当他们是

Java 纸牌游戏规则:从一副纸牌中抽出手牌(不要开玩笑)。打牌时,只有当他们是,java,matrix,Java,Matrix,帮助我如何接受输入。我不明白在主方法中添加什么 纸牌游戏规则:从一副纸牌中抽出手牌(不要开玩笑)。只有当一种牌是3张(…AAA…)或4张(…AAAA…)时才玩牌。三张或三张以上的牌(同一套中的JQK或A23456)。了解玩家是否能够玩整手牌 //input a 4X13 matrix with 4 suits and 13 ranks of cards. set cards[suit][rank] to 1 if this card in hand. public static boolean

帮助我如何接受输入。我不明白在主方法中添加什么

纸牌游戏规则:从一副纸牌中抽出手牌(不要开玩笑)。只有当一种牌是3张(…AAA…)或4张(…AAAA…)时才玩牌。三张或三张以上的牌(同一套中的JQK或A23456)。了解玩家是否能够玩整手牌

//input a 4X13 matrix with 4 suits and 13 ranks of cards. set cards[suit][rank] to 1 if this card in hand.
public static boolean handClear(int[][] cards, int hand) {
    if(hand == 0) return true;
    for(int rank = 12; rank >= 0; rank--) {
        for(int suit = 0; suit < 4; suit++) {
            if(cards[suit][rank] == 1) { //if cards[suit][rank] in hand
                cards[suit][rank] = 0; hand--;
                int smallerRank = rank == 0 ? 12: rank - 1; // look for straight flush that end with this card
                // watch for Ace as a special case that ***QKA and A23*** both valid
                if(cards[suit][smallerRank] == 1) {
                    cards[suit][smallerRank] = 0; hand--;
                    int r = smallerRank - 1;
                    for(; r >= 0 && cards[suit][r] == 1; r--) {   //try playing the straight flush found
                        cards[suit][r] = 0; hand--;
                        if(handClear(cards, hand)) return true;
                    }
                    r++;
                    for(; r <= smallerRank; r++) {  //backtrack if play did not work
                        cards[suit][r] = 1; hand++;
                    }
                }
                //look for 3/4 of a kind for cards[suit][rand]
                int n = cards[0][rank] + cards[1][rank] + cards[2][rank] + cards[3][rank];
                if(n == 3 || n == 2) {
                    int tmp1 = cards[(suit + 1) % 4][rank],
                        tmp2 = cards[(suit + 2) % 4][rank],
                        tmp3 = cards[(suit + 3) % 4][rank];
                    cards[(suit + 1) % 4][rank] = 0; //try playing the 3/4 of a kind
                    cards[(suit + 2) % 4][rank] = 0;
                    cards[(suit + 3) % 4][rank] = 0;
                    hand -= n;
                    if(handClear(cards, hand)) return true;
                    cards[(suit + 1) % 4][rank] = tmp1;   //backtrack if play did not work
                    cards[(suit + 2) % 4][rank] = tmp2;
                    cards[(suit + 3) % 4][rank] = tmp3;
                    hand += n;
                }
                cards[suit][rank] = 1; hand++;
            }
        }
    }
    return false;
}
//输入一个4X13矩阵,其中包含4套西装和13排卡片。如果此卡在手,则将卡牌[suit][rank]设置为1。
公共静态布尔handClear(int[][]卡,int-hand){
如果(hand==0)返回true;
对于(整数秩=12;秩>=0;秩--){
对于(int suit=0;suit<4;suit++){
如果(牌[suit][rank]==1){//if牌[suit][rank]在手
卡片[套装][等级]=0;手牌--;
int smallernak=rank==0?12:rank-1;//寻找与这张卡的末端齐平的直线
//注意Ace作为特例,***QKA和A23***都有效
如果(卡片[套装][小错误]==1){
卡片[套装][小错误]=0;手--;
int r=smallerrak-1;
对于(;r>=0&&cards[suit][r]==1;r--){//尝试玩找到的同花顺
牌[suit][r]=0;手--;
if(handClear(cards,hand))返回true;
}
r++;

对于(;r,我相信您只是想解释一下如何最初调用您在问题中发布的方法

方法参数
cards
表示一组中的所有卡片。
有四套西装,即梅花、钻石、红桃和黑桃。
很明显,每件西装都有一个关联的索引。据我所知,您发布的代码中,可以任意将索引与西装关联起来。因此,让我们假设以下情况:

0=俱乐部
1=钻石
2=心脏
3=黑桃

因此,阵列
卡的尺寸应为4和13,因为每个套装中有13张卡

int[][]卡=新的int[4][13];
现在你需要将一张套装中的卡片与一个索引关联起来。让我们假设王牌的索引为0(零),国王的索引为12(十二)

这意味着
cards[0][0]
代表俱乐部的王牌,
cards[2][10]
代表红心杰克

我的扑克牌知识有点生疏,所以我可能错了,但是一张扑克牌是由五张牌组成的

因此,您需要初始化
,并将每个元素设置为0(零),即

for(int i=0;i<4;i++){
对于(int j=0;j<13;j++){
卡片[i][j]=0;
}
}
现在你需要“发牌”。你需要将
牌中的值设置为1(一)作为牌的索引。你如何随机发牌,我不知道,但假设你给自己发了7个黑桃,这意味着你需要执行以下操作

卡[3][6]=1;
请注意,您发布的方法,即
handClear
,是一个递归方法。这意味着该方法调用自身。所有递归方法必须具有终止递归的条件。在方法
handClear
中,该条件是当[method]参数
hand
等于0(零)时。这意味着
hand
的值必须是手牌中“已发”的牌数。正如我前面所说的,对于扑克,我认为是五张。但这并不重要,因为
handClear
方法将处理它收到的参数
hand
的任何值

因此,为了最初调用方法
handClear
,您需要确定一手牌有多少张牌,例如扑克牌有5张。然后您必须创建二维数组并按照上面的解释初始化它,最后您必须选择
hand
卡中的不同元素并设置元素值tO1(一)。然后您可以调用方法
handClear

上面的一个非常简单的例子:

int[][]卡=新的int[4][13];
对于(int i=0;i<4;i++){
对于(int j=0;j<13;j++){
卡片[i][j]=0;
}
}
int-hand=5;
卡片[0][0]=1;//俱乐部王牌
卡片[1][0]=1;//钻石王牌
卡片[2][0]=1;//红桃王牌
牌[3][0]=1;//黑桃王牌
卡片[0][1]=1;//两张梅花
if(手清除(卡片,手)){
System.out.println(“你赢了一手!”);
}

我只是不明白如何获取这个程序的输入。你是说如何测试你的方法?是的。你能帮我吗?你创建了一个类吗?一个
main()
method?不。我没有创建main方法。我是java新手。我现在应该在其中写什么?