【发布时间】:2020-01-17 20:14:37
【问题描述】:
我目前正在尝试编写记忆/匹配游戏。我在尝试弄清楚如何检查是否单击了同一张卡片并且用户找到了匹配项时遇到了问题。我了解我需要存储第一次点击的值并将其与第二次点击进行比较,但仍不确定如何实际执行。
考虑一下这段代码,我重新创建了一个更简单的游戏版本,您可以在下面实际运行它:
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!");
}
}
}
【问题讨论】:
标签: java arrays swing actionlistener