用Java写一个拼图小游戏,要完整代码
时间: 2023-08-31 08:23:23 浏览: 102
### 回答1:
这是一个 Java 写的拼图小游戏的完整代码示例:
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
public class PuzzleGame extends JFrame implements ActionListener {
private JButton startButton; // 开始按钮
private JPanel gamePanel; // 游戏面板
private JButton[] buttons; // 拼图按钮
private ImageIcon[] icons; // 拼图图片
private int blankLocation; // 空白块位置
public PuzzleGame() {
// 初始化窗口
setTitle("拼图小游戏");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
// 初始化开始按钮
startButton = new JButton("开始游戏");
startButton.addActionListener(this);
add(startButton, BorderLayout.NORTH);
// 初始化游戏面板
gamePanel = new JPanel();
gamePanel.setLayout(new GridLayout(3, 3));
add(gamePanel, BorderLayout.CENTER);
// 初始化拼图按钮和图片
buttons = new JButton[9];
icons = new ImageIcon[9];
for (int i = 0; i < 9; i++) {
icons[i] = new ImageIcon("image" + i + ".jpg");
buttons[i] = new JButton();
buttons[i].addActionListener(this);
}
setVisible(true);
}
public void startGame() {
// 随机打乱拼图顺序
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 9; i++) {
list.add(i);
}
Collections.shuffle(list);
// 将拼图加入游戏面板
for (int i = 0; i < 9; i++) {
gamePanel.add(buttons[list.get(i)]);
buttons[list.get(i)].setIcon(icons[list.get(i)]);
if (list.get(i) == 0) {
blankLocation = i;
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
// 点击开始按钮
if (e
### 回答2:
拼图小游戏是一个经典的益智游戏,可以用Java编写。以下是一个简单的拼图游戏的完整代码示例:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PuzzleGame extends JFrame {
private JPanel panel;
private JButton[][] buttons;
public PuzzleGame() {
// 设置窗口属性
setTitle("拼图游戏");
setSize(400, 400);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// 初始化面板和布局
panel = new JPanel();
panel.setLayout(new GridLayout(4, 4));
add(panel);
// 创建按钮数组
buttons = new JButton[4][4];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
buttons[i][j] = new JButton(String.valueOf(i * 4 + j + 1));
panel.add(buttons[i][j]);
buttons[i][j].addActionListener(new ButtonClickListener());
}
}
// 设置最后一个按钮为空白
buttons[3][3].setText("");
// 打乱按钮顺序
shuffleButtons();
// 显示窗口
setVisible(true);
}
// 按钮点击监听器
private class ButtonClickListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
// 移动邻近的空白按钮
if (isEmptyNeighbour(button)) {
moveButton(button);
checkWin();
}
}
}
// 检查是否成功拼图
private void checkWin() {
String text = "";
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
text += buttons[i][j].getText();
}
}
// 判断是否完成拼图
if (text.equals("123456789101112131415")) {
JOptionPane.showMessageDialog(this, "恭喜,你完成了拼图!");
System.exit(0);
}
}
// 判断按钮是否是空白按钮的邻近位置
private boolean isEmptyNeighbour(JButton button) {
int row = 0;
int col = 0;
// 找到按钮的行列位置
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (buttons[i][j] == button) {
row = i;
col = j;
break;
}
}
}
// 判断是否是空白按钮的邻近位置
if (row > 0 && buttons[row - 1][col].getText().equals("")) {
return true;
}
if (col > 0 && buttons[row][col - 1].getText().equals("")) {
return true;
}
if (row < 3 && buttons[row + 1][col].getText().equals("")) {
return true;
}
if (col < 3 && buttons[row][col + 1].getText().equals("")) {
return true;
}
return false;
}
// 移动按钮到空白按钮位置
private void moveButton(JButton button) {
int row = 0;
int col = 0;
// 找到按钮的行列位置
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (buttons[i][j] == button) {
row = i;
col = j;
break;
}
}
}
// 找到空白按钮的位置
int emptyRow = 0;
int emptyCol = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (buttons[i][j].getText().equals("")) {
emptyRow = i;
emptyCol = j;
break;
}
}
}
// 交换按钮和空白按钮的文本内容
String tempText = buttons[row][col].getText();
buttons[row][col].setText("");
buttons[emptyRow][emptyCol].setText(tempText);
}
// 打乱按钮顺序
private void shuffleButtons() {
for (int i = 0; i < 100; i++) {
int randomRow = (int) (Math.random() * 4);
int randomCol = (int) (Math.random() * 4);
if (isEmptyNeighbour(buttons[randomRow][randomCol])) {
moveButton(buttons[randomRow][randomCol]);
}
}
}
public static void main(String[] args) {
new PuzzleGame();
}
}
```
这个代码示例实现了一个简单的拼图游戏,使用Java的图形界面库Swing创建了一个窗口,并在窗口中添加了一个4x4的按钮网格,每个按钮都被标记了1~15的数字,通过点击按钮可以将按钮移动到空白按钮的位置来完成拼图。其中,使用了`ActionListener`监听器来监听按钮的点击事件,并实现了一些方法来判断按钮的行为和完成拼图的判断。最后,在程序的主方法中创建了一个`PuzzleGame`对象来启动游戏。