我在做一个匹配的纸牌游戏,但我不明白如何实际做到这一点。我希望有人能帮我解释一下我能做些什么来解决这个问题。
以下是规格:
在一个对的纸牌游戏中,目标是翻出对匹配的纸牌。
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;
}}
如能提供任何协助,将不胜感激。
试着在你的脑海里走过。
X
被翻转X
相同,则删除两张牌因此,要将其转换为代码,您需要跟踪哪些内容?
0
表示匹配;您只需添加一个if
检查它是否==0
,并在插入字符串
时将其更改为其他字符。*
或其他指示该索引已翻转。这是一个简短的概述,您只需将其转换为代码即可。到目前为止,我还没有添加实际的代码,因为如果您自己尝试,它会对您有所帮助。
万事如意,继续学习!:)
编辑1(注释后):
我猜wasmatch()
在每第二次翻转后调用?我以为不会,并意外地将递增索引放在flip()
中。
因此,由于wasmatch()
是一个单独的方法,因此可以为翻转的卡片维护2个变量(例如CurrentlyFlippedCard1
和CurrentlyFlippedCard2
),并在wasmatch()
期间增加。
至于flipmismatch()
:规范表示它应该“将其恢复到正面位置”。您可以不做任何更改,也可以将CurrentlyFlippedCard1
和CurrentlyFlippedCard2
更改为默认值,如-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值:卡的值