gpt4 book ai didi

java - 从 JToggleButton 检索信息时遇到问题?(匹配游戏)

转载 作者:行者123 更新时间:2023-12-01 18:47:51 26 4
gpt4 key购买 nike

我目前正在尝试编写一个内存/配对游戏。我在尝试弄清楚如何检查是否已单击同一张卡并且用户找到匹配项时遇到问题。我知道我需要存储第一次点击的值并将其与第二次点击进行比较,但仍然不确定如何实际执行。

考虑这段代码,我重新创建了一个更简单的游戏版本,您可以在下面实际运行它:

class start {

JToggleButton DisplayCards[][] = new JToggleButton[4][4];
Shuffle shuffle = new Shuffle();
void main() {
JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
int y = 20;
int x = 60;

for (int i = 0; i < DisplayCards.length; ++i) {
for (int j = 0; j < DisplayCards[i].length; ++j) {
DisplayCards[i][j] = new JToggleButton("Click Me!");


DisplayCards[i][j].setBounds(x, y, 90, 126);
y = y + 135;
if (y >= 540) {
y = 20;
x = x + 120;
}
frame.add(DisplayCards[i][j]);
DisplayCards[i][j].addActionListener(new Clicked(i, j, shuffle));
}
}

frame.setLayout(null);
frame.setVisible(true);
}
}

打乱字母的类:

class Shuffle {

String[][] cards = {
{"A", "B", "C", "D"},
{"E", "F", "G", "H"},
{"A", "B", "C", "D"},
{"E", "F", "G", "H"}

};

public void random() {
for (int i = 0; i < cards.length; i++) {
for (int j = 0; j < cards[i].length; j++) {
int i1 = (int) (Math.random() * cards.length);
int j1 = (int) (Math.random() * cards[i].length);

String temp = cards[i][j];
cards[i][j] = cards[i1][j1];
cards[i1][j1] = temp;
}

}
}
}

ActionListener 类:

class Clicked implements ActionListener {

Shuffle shuffle;
JToggleButton tBtn;
private int i;
private int j;

public Clicked(int i, int j, Shuffle shuffle) {
this.i = i;
this.j = j;
this.shuffle = shuffle;
}

public void actionPerformed(ActionEvent e) {
tBtn = (JToggleButton) e.getSource();
if (tBtn.isSelected()) {
tBtn.setText(shuffle.cards[i][j]);

} else {
tBtn.setText("Click Me!");
}

}
}

最佳答案

您需要存储选择的值并比较它们。这是一个粗略的示例。

我将你的主类命名为PuzzleGame

在主类中我放入了两个静态值。

static String first;
static boolean state = false;

然后我按如下方式修改了您的 Action 监听器。

    public void actionPerformed(ActionEvent e) {
tBtn = (JToggleButton) e.getSource();
if (tBtn.isSelected()) {
tBtn.setText(shuffle.cards[i][j]);
if (!PuzzleGame.state) {
PuzzleGame.first = shuffle.cards[i][j];
System.out.println(PuzzleGame.first);
PuzzleGame.state = true;

} else {
if (PuzzleGame.first.equals(shuffle.cards[i][j])) {
System.out.println("Correct!");
}
}
} else {
tBtn.setText("Click Me!");
}

}

第一次通过时,statefalse,因此设置了 first。第二次通过时,statetrue,因此也会与 first 设置的内容进行比较。

在这样的游戏中,您不应该使用静态值。我这样做是因为很容易演示该技术。

您还应该重置错误答案的值和状态,并禁用正确答案的按钮。

最后一个提示。

frame.setLocationRelativeTo(null); // centers the frame on screen.

关于java - 从 JToggleButton 检索信息时遇到问题?(匹配游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59794288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com