当前位置: 首页 > 知识库问答 >
问题:

Java中的匹配纸牌游戏

晏德佑
2023-03-14

我在做一个匹配的纸牌游戏,但我不明白如何实际做到这一点。我希望有人能帮我解释一下我能做些什么来解决这个问题。

以下是规格:

在一个对的纸牌游戏中,目标是翻出对匹配的纸牌。

https://en.wikipedia.org/wiki/contension_(游戏)以下是我们考虑的配对变化的规则。

在游戏开始时,有n张牌面朝下,其中n是4的倍数。每种卡片有4张,卡片上标有字母a、b、....例如,如果n==24,则有6种类型的卡:a、b、c、d、e和F。假设1*4<=n和n<=4*26。

在每个回合,玩家翻转2张牌,一次一张,正面朝下。如果2个翻转是同一类型的,匹配的牌是正面朝上的。如果2个翻转不匹配,不匹配的牌返回到面朝下的位置。游戏结束时,所有的牌都匹配,得分是总的翻转次数。(翻转一对牌算2次翻转,所以最好的可能得分是n次。)

田野

公共终值;

是构造函数设置的游戏的大小。

方法

公共布尔翻转;

玩I号牌。如果i牌不能打,因为它是正面的,或者如果我是一个无效的牌号,那么返回false。如果i是一个可以玩的牌号,则玩牌i并返回true。

方法

公共空隙FlipMismMatch();

将不匹配的对恢复到面朝下的位置。只有在flip的2次调用导致不匹配后才应调用此方法。

到目前为止,我有以下几点:

public class MatchCardGame {
//Private classes
private boolean facingup;
private char[] board;
private int flips = 0;
private int matches = 0;
private int currentflip;

//Public classes
public final int n;

public MatchCardGame(int n) {
    for (int i = 0; i < n; i++) {
        if (i % 4 == 0) {
            this.board[i] = 'a';
        }
        else if (i % 4 == 1) {
            this.board[i] = 'b';
        }
        else if (i % 4 == 2) {
            this.board[i] = 'c';
        }
        else {
            this.board[i] = 'd';
        }
    }
}

public String boardToString() {
    String stringboard = "";
    for (int i; i < n; i++) {
        if (facingup){
            stringboard += stringboard + "[" + this.board[i] + "] ";
        }
        else {
            stringboard += "[-] ";
        }
    }
    return stringboard;
}

public boolean flip(int i) {
    flips++;
    if (i < 0 || i >= n || currentflip == ((int) this.board[i]) % 32) {
        return false;
    }
    else {
        if (flips % 2 != 0) {
            currentflip = ((int) board[i]) % 32;
            facingup = true;
            return true;
        }
        else if (board[i] == this.board[i]) {
            currentflip = -1;
            this.facingup = true;
            board [i] = '0';
            this.board[i] = '0';
            matches += 2;
            return true;
        }
    }
}

public boolean wasMatch() {
    if (currentflip == -1) {
        return true;
    }
    else {
        return false;
    }
}

public char previousFlipIdentity() {
    return board [i];
}

public void flipMismatch() {
    facingup = false;
    this.facingup = false;

}

public boolean gameOver() {
    if (matches == n) {
        return true;
    }
    else {
        return false;
    }
}

public int getFlips() {
    return flips;
}}

如能提供任何协助,将不胜感激。

共有1个答案

张瀚漠
2023-03-14

试着在你的脑海里走过。

  • 您获得了一组卡片
  • 一张卡,X被翻转
  • 下翻其他牌;如果与前面的X相同,则删除两张牌
  • 如果与前面的翻转不相同,则忽略两个翻转。
  • 继续这些步骤,直到所有的牌都匹配并且没有剩余的牌

因此,要将其转换为代码,您需要跟踪哪些内容?

    null
    null
    null
  • 这里,0表示匹配;您只需添加一个if检查它是否==0,并在插入字符串时将其更改为其他字符。
  • 当前翻转的卡片也一样;您只需检查该索引何时出现,并添加*或其他指示该索引已翻转。

这是一个简短的概述,您只需将其转换为代码即可。到目前为止,我还没有添加实际的代码,因为如果您自己尝试,它会对您有所帮助。
万事如意,继续学习!:)

编辑1(注释后):
我猜wasmatch()在每第二次翻转后调用?我以为不会,并意外地将递增索引放在flip()中。
因此,由于wasmatch()是一个单独的方法,因此可以为翻转的卡片维护2个变量(例如CurrentlyFlippedCard1CurrentlyFlippedCard2),并在wasmatch()期间增加。
至于flipmismatch():规范表示它应该“将其恢复到正面位置”。您可以不做任何更改,也可以将CurrentlyFlippedCard1CurrentlyFlippedCard2更改为默认值,如-2

编辑2(在注释之后):
previousflipidentity():

  • 检查int flips查看前一个翻转是第一个还是第二个翻转(通过检查int flips是奇数还是偶数)
  • 如果第一次翻转,返回板[currentlyFlippedCard1]
  • 如果第二次翻转,返回板[currentlyFlippedCard2]

我的建议是:首先实现你知道的核心方法。一旦您运行了一些方法,您将有一个更好的想法,您可以添加更多的功能。

 类似资料:
  • 我试图用Java实现纸牌游戏“Skat” 规则: 有32张卡片。每张牌在游戏中只存在一次。 颜色有:梅花、黑桃、红心、钻石 价值观是:王牌,国王,王后,杰克,十,九,八,七 那些牌被洗牌了。有三名球员 第一轮:每位玩家有3张牌。然后将两张卡片放入Skat。 第二轮:每位玩家再获赠4张牌。 第三轮:每位玩家再获得3张牌。 期望输出:每个玩家的牌都被展示(每张牌都应该存在一次) 我的产量:钻石七(32

  • 我尝试在Java实施纸牌游戏“滑冰” 规则: 有32张牌。每张牌在游戏中只存在一次。 颜色是:梅花、黑桃、红心、钻石 这些值是:王牌、国王、王后、杰克、十、九、八、七 那些牌被洗牌了。有三个队员 第一回合:每位玩家获赠3张牌。然后将2张牌放入滑板中。 第二回合:每名玩家再获4张牌。 第三回合:每名玩家再获3张牌。 想要的输出:露出的每个玩家的牌(每张牌都要存在一次) 我的输出:钻石七(32次) 我

  • 本文向大家介绍Java编写的24点纸牌游戏,包括了Java编写的24点纸牌游戏的使用技巧和注意事项,需要的朋友参考一下 任意4个1-13数字,加减乘除计算24点。 实现原理: 1)排列组合4个数字 2)计算每次排列组合的可能性 Cal24.java Combination.java 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍java实现24点纸牌游戏,包括了java实现24点纸牌游戏的使用技巧和注意事项,需要的朋友参考一下 本文题目为大家分享了java实现24点纸牌游戏的具体代码,供大家参考,具体内容如下 题目 24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏

  • 我正在尝试创建一个MVC模式的回合制卡牌游戏。我对正确的设计有些怀疑。 我创建了一个由这些类组成的模型: 卡(使用套装) 套牌(40张牌,抽取牌法,剩余牌数) 表 套装(enum) 玩家(手牌,人名,手牌数,收藏牌我想) 游戏模型(引用了Deck、Table,并在构造函数中包含两个玩家) 我将在用户按下“新游戏”按钮时创建两个Player对象和GameModel(计算机和Player)。这样做对吗

  • 这是我关于堆栈溢出的第一个问题,所以如果我的问题中有一个新手错误,请原谅,请随时更正,因为我计划在未来几个月内更多地使用此网站。 不管怎样,我是高中12年级的学生,我被一个家庭作业问题卡住了。所以基本上我们被分配了一个创建战争游戏(纸牌游戏)的项目,我们被要求每天做一小部分。到目前为止,直到今天一切都很顺利,因此我向你们提出了这个问题。 以下是该项目的内容: 卡片 它有什么: 私有int值:卡的值