写一个大一点的Java对对碰游戏
时间: 2023-12-06 13:45:26 浏览: 49
好的,这里是一个简单的Java对对碰游戏的代码示例:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PairMatchingGame extends JFrame implements ActionListener {
private JButton[][] buttons;
private int[][] cardValues;
private int[] selectedCard = {-1, -1};
private int numRows = 4;
private int numCols = 5;
public PairMatchingGame() {
setTitle("Pair Matching Game");
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(numRows, numCols));
buttons = new JButton[numRows][numCols];
cardValues = new int[numRows][numCols];
// Initialize the card values randomly
int[] values = new int[numRows * numCols / 2];
for (int i = 0; i < values.length; i++) {
values[i] = i;
}
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
int index = (int) (Math.random() * values.length);
cardValues[i][j] = values[index];
values[index] = values[values.length - 1];
values = Arrays.copyOf(values, values.length - 1);
}
}
// Create the buttons and add them to the panel
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
buttons[i][j] = new JButton();
buttons[i][j].addActionListener(this);
panel.add(buttons[i][j]);
}
}
add(panel);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
int row = -1;
int col = -1;
// Find the button that was clicked
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numCols; j++) {
if (buttons[i][j] == button) {
row = i;
col = j;
break;
}
}
}
// If the card is already flipped over, do nothing
if (cardValues[row][col] == -1) {
return;
}
// If this is the first card being selected
if (selectedCard[0] == -1) {
selectedCard[0] = row;
selectedCard[1] = col;
button.setText(String.valueOf(cardValues[row][col]));
}
// If this is the second card being selected
else {
button.setText(String.valueOf(cardValues[row][col]));
// If the cards match
if (cardValues[row][col] == cardValues[selectedCard[0]][selectedCard[1]]) {
buttons[selectedCard[0]][selectedCard[1]].setEnabled(false);
buttons[row][col].setEnabled(false);
cardValues[selectedCard[0]][selectedCard[1]] = -1;
cardValues[row][col] = -1;
}
// If the cards don't match
else {
// Flip the cards back over after a short delay
new java.util.Timer().schedule(
new java.util.TimerTask() {
public void run() {
buttons[selectedCard[0]][selectedCard[1]].setText("");
buttons[row][col].setText("");
}
},
500
);
}
// Clear the selected card array
selectedCard[0] = -1;
selectedCard[1] = -1;
}
}
public static void main(String[] args) {
new PairMatchingGame();
}
}
```
这个游戏使用了一个二维数组来存储卡片的值,其中每个值都是一个非负整数,表示该卡片的类型。游戏开始时,程序会随机生成一个值序列,并将其填充到二维数组中,然后将每个卡片的值隐藏起来。玩家需要翻开每个卡片,找出其中匹配的一对。如果两张卡片匹配,它们将被保留在屏幕上,否则它们将被翻回去,玩家需要尝试记住它们的位置。
这个游戏使用了Java的Swing库来创建GUI界面,并使用了JButton组件来表示每个卡片。当玩家点击一个卡片时,程序会根据卡片的位置来确定其值,并根据当前选定的卡片来决定如何处理该卡片。如果玩家已经选定了一个卡片,程序将比较当前选定的卡片和新选定的卡片是否匹配。如果匹配,卡片将被保留在屏幕上,否则它们将被翻回去。在实现这一功能时,程序使用了一个计时器来模拟卡片翻转的效果。