Java 纸牌游戏规则:从一副纸牌中抽出手牌(不要开玩笑)。打牌时,只有当他们是
帮助我如何接受输入。我不明白在主方法中添加什么 纸牌游戏规则:从一副纸牌中抽出手牌(不要开玩笑)。只有当一种牌是3张(…AAA…)或4张(…AAAA…)时才玩牌。三张或三张以上的牌(同一套中的JQK或A23456)。了解玩家是否能够玩整手牌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
//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新手。我现在应该在其中写什么?