📜  Java pic puzzle游戏示例(1)

📅  最后修改于: 2023-12-03 15:01:31.876000             🧑  作者: Mango

Java Pic Puzzle游戏示例介绍

Java Pic Puzzle是一款Java游戏示例,用于演示如何使用Java Swing来开发图形化界面的拼图游戏。本示例代码基于Java SE 8开发,使用了Java AWT和Swing库。

游戏规则

Java Pic Puzzle游戏是一款智力拼图游戏。游戏开始时,将一张图片随机分为若干个小块,每块的位置随机打散。然后玩家需要点击相邻的空白块与该块进行交换,最终将图片拼合成完整的一张图片即可获胜。

代码结构

本示例代码包括以下几个类:

  • PicPuzzle类: 游戏主程序的入口,启动游戏;
  • PicPuzzlePanel类: 游戏的主界面,实现了图形界面的绘制和游戏逻辑处理;
  • PicPuzzlePiece类: 小块的类,表示拼图的一个小块;
  • PicPuzzleImage类: 图片的类,表示拼图的图片。
代码片段
主程序入口
public class PicPuzzle {
    public static void main(String[] args) {
        // 创建游戏窗口
        JFrame frame = new JFrame("Pic Puzzle");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 创建游戏界面
        PicPuzzlePanel panel = new PicPuzzlePanel();
        frame.getContentPane().add(panel);
        
        // 显示窗口
        frame.pack();
        frame.setVisible(true);
    }
}
游戏界面类
public class PicPuzzlePanel extends JPanel implements MouseListener {
    // 游戏状态常量
    private static final int READY = 0;
    private static final int PLAYING = 1;
    private static final int FINISHED = 2;
    
    // 游戏状态变量
    private int gameState;
    
    // 图片对象
    private PicPuzzleImage image;
    
    // 小块对象数组
    private PicPuzzlePiece[][] pieces;
    
    // 空白块的位置
    private int emptyRow, emptyCol;
    
    // 鼠标点击位置的坐标
    private int clickRow, clickCol;
    
    // 构造函数
    public PicPuzzlePanel() {
        // 初始化游戏状态
        gameState = READY;
        
        // 加载图片
        image = new PicPuzzleImage("pic.jpg");
        
        // 初始化小块对象数组
        initPieces(); // 略去具体实现
        
        // 添加鼠标监听器
        addMouseListener(this);
    }
    
    // 重绘游戏界面
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        // 绘制小块
        for (int row = 0; row < pieces.length; row++) {
            for (int col = 0; col < pieces[row].length; col++) {
                pieces[row][col].draw(g);
            }
        }
    }
    
    // 鼠标点击事件处理
    @Override
    public void mouseClicked(MouseEvent e) {
        int x = e.getX();
        int y = e.getY();
        
        // 获取点击位置的坐标
        clickRow = y / PicPuzzlePiece.SIZE;
        clickCol = x / PicPuzzlePiece.SIZE;
        
        // 处理鼠标点击事件
        if (gameState == PLAYING && isValidMove(clickRow, clickCol)) {
            movePiece(clickRow, clickCol);
            
            // 判断游戏是否结束
            if (isFinished()) {
                gameState = FINISHED;
                JOptionPane.showMessageDialog(this, "Congratulations! You win!");
            }
        }
        
        // 重绘界面
        repaint();
    }
    
    // 略去实现鼠标监听器的其他方法
}
小块类
public class PicPuzzlePiece {
    // 小块的大小
    public static final int SIZE = 80;
    
    // 小块的位置
    private int row, col;
    
    // 小块的图片
    private Image image;
    
    // 构造函数
    public PicPuzzlePiece(int row, int col, Image image) {
        this.row = row;
        this.col = col;
        this.image = image;
    }
    
    // 绘制小块
    public void draw(Graphics g) {
        int x = col * SIZE;
        int y = row * SIZE;
        g.drawImage(image, x, y, SIZE, SIZE, null);
    }
    
    // 获取小块的位置
    public int getRow() {
        return row;
    }
    
    public int getCol() {
        return col;
    }
    
    // 设置小块的位置
    public void setRow(int row) {
        this.row = row;
    }
    
    public void setCol(int col) {
        this.col = col;
    }
}
图片类
public class PicPuzzleImage {
    // 图片对象
    private Image image;
    
    // 构造函数
    public PicPuzzleImage(String name) {
        try {
            // 加载图片
            image = ImageIO.read(new File(name));
        } catch (IOException e) {
            System.out.println("Error loading image: " + e.getMessage());
        }
    }
    
    // 获取小块图片
    public Image getPieceImage(int row, int col, int pieceSize) {
        int x = col * pieceSize;
        int y = row * pieceSize;
        return image.getSubimage(x, y, pieceSize, pieceSize);
    }
    
    // 获取图片对象
    public Image getImage() {
        return image;
    }
}
总结

Java Pic Puzzle游戏示例为开发人员提供了一个使用Java Swing开发图形化界面的参考示例,重点演示了如何使用Java AWT和Swing库实现图形化界面的绘制和事件处理。开发人员可以根据本示例代码学习和借鉴Swing库的使用方法,进一步开发和完善自己的Java图形化界面应用程序。