Java拼图游戏 功能齐全 完整源码下载

今天为大家分享一个java语言编的拼图游戏,目前系统已经完成了主要功能,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步

开发环境

开发语言为Java,开发环境Eclipse或者IDEA都可以,数据为MySQL。运行主程序,或者执行打开JAR文件即可以运行本程序。

系统框架

利用JDK自带的SWING框架开发,下载。纯窗体模式,直接运行Main文件即可以。同时带有详细得设计文档。

主要功能

游戏玩法

拼图游戏内容由若干小图像块组成的,其中有一个空白的小图像块,该图像块是来与别的图像块交换的,以此来实现大图像的拼凑。在Java标准环境下运行,通过鼠标点击图像块上下左右移动,完成大图像的拼凑。通过所创建的窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 ,实现游戏登录、开始游戏、退出游戏、选择图片、图片缩放、图片分割、调整难易度、计数计时、打乱图片、判断拼图成功等功能。游戏可以通过对图片文件的读取和加载,从多张图片中选择来进行拼图游戏,通过设置图像块的个数来实现对游戏难易度的调整,最后将游戏完成后所用时间和步数记录到游戏记录中,方便用户查看游戏记录。

程序启动方法

1 在SRC目录下,找到GAME包,对MedleyGame.java文件运行Run as Application

2 弹出拼图界面,点击开局,开始完游戏

主要模块

1 一轮游戏有5张图片需要完成拼凑

2 面板的左上角有一张图片,是原图,一张图,随机分成12个小图

3 双击两个小图,完成交换位置。直到12个小图合成的图片和左上角的图片一摸一样的时候,该张图片完成拼接。

4 点下一张图片,开始下轮图片的拼接,直到5张图片都完成。5张图片分别如下:

实现效果

关键代码

public class MedleyGame extends JFrame {
    private JLabel modelLabel;
    private JPanel centerPanel;
    private JButton emptyButton;
    int num = 0;
    public static void main(String[] args) {
        try {
            MedleyGame frame = new MedleyGame();
            frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //建立窗口构造方法
    public MedleyGame() {
        super();
        setResizable(false);
        setTitle("拼图游戏");
        setBounds(100, 100, 370, 525);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //创建面板对象,并增加边框、布局
        final JPanel topPanel = new JPanel();
        topPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,
                TitledBorder.DEFAULT_POSITION, null, null));
        topPanel.setLayout(new BorderLayout());
        getContentPane().add(topPanel, BorderLayout.NORTH);//放于上方
        //创建标签放原图
        modelLabel = new JLabel();
        modelLabel.setIcon(new ImageIcon("image/"+ num+ "model.jpg"));
        topPanel.add(modelLabel, BorderLayout.WEST);
        //在右侧加个面板,添加两个按钮
        JPanel eastPanel = new JPanel();
        topPanel.add(eastPanel,BorderLayout.CENTER);
        eastPanel.setLayout(new BorderLayout());
        JButton nextButton = new JButton();
        nextButton.setText("下一张");
        nextButton.addActionListener(new NextButtonAction());
        eastPanel.add(nextButton,BorderLayout.NORTH);
        //创建按钮开局添加监听
        final JButton startButton = new JButton();
        startButton.setText("开局");
        startButton.addActionListener(new StartButtonAction());
        eastPanel.add(startButton, BorderLayout.CENTER);
        //初始化中心面板,设置边框,添加按钮
        centerPanel = new JPanel();
        centerPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,
                TitledBorder.DEFAULT_POSITION, null, null));
        centerPanel.setLayout(new GridLayout(4, 0));
        getContentPane().add(centerPanel, BorderLayout.CENTER);
        //初始化图片
        String[][] exactnessOrder = order();
        //按排列添加按钮,设置图片
        for (int row=0; row<4; row++) {
            for (int col=0; col<4; col++) {
                final JButton button = new JButton();
                button.setName(row+""+col);
                button.setIcon(new ImageIcon(exactnessOrder[row][col]));
                if (exactnessOrder[row][col].equals("image/"+ num+"00.jpg"))
                    emptyButton = button;
                button.addActionListener(new ImgButtonAction());
                centerPanel.add(button);
            }
        }
    }
    //初始化图片
    private String[][] order() {
        String[][] exactnessOrder = new String[4][4];
        for (int row=0; row<4; row++) {
            for (int col=0; col<4; col++) {
                exactnessOrder[row][col] = "image/"+ num+ row+ col+ ".jpg"; 
            }
        }
        return exactnessOrder;
    }
    //随机排列图片
    private String[][] reorder() {
        String[][] exactnessOrder = new String[4][4];
        for (int row=0; row<4; row++) {
            for (int col=0; col<4; col++) {
                exactnessOrder[row][col] = "image/"+ num+ row+ col+ ".jpg"; 
            }
        }
        String[][] stochasticOrder = new String[4][4];
        for (int row=0; row<4; row++) {
            for (int col=0; col<4; col++) {
                while (stochasticOrder[row][col]==null) {
                    int r = (int) (Math.random()*4);
                    int c = (int) (Math.random()*4);
                    if (exactnessOrder[r][c] != null) {
                        stochasticOrder[row][col] = exactnessOrder[r][c];
                        exactnessOrder[r][c] = null;
                    }
                }
            }
        }
        return stochasticOrder;
    }
    //游戏时排列图片
    class ImgButtonAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String emptyName= emptyButton.getName();
            char emptyRow = emptyName.charAt(0);
            char emptyCol = emptyName.charAt(1);
            JButton clickButton = (JButton) e.getSource();
            String clickName = clickButton.getName();
            char clickRow = clickName.charAt(0);
            char clickCol = clickName.charAt(1);
            if (Math.abs(clickRow - emptyRow) + Math.abs(clickCol - emptyCol) == 1) {
                emptyButton.setIcon(clickButton.getIcon());
                clickButton.setIcon(new ImageIcon("image/"+ num+ "00.jpg"));
                emptyButton = clickButton;
            }
        }
    }
    //换下一张图片
    class NextButtonAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (num==5) {
                num=0;
            } else {
                ++num;
            }
            modelLabel.setIcon(new ImageIcon("image/"+num+"model.jpg"));
            String[][] exactnessOrder = order();
            int i= 0;
            for (int row=0; row<4; row++) {
                for (int col=0; col<4; col++) {
                    JButton button = (JButton) centerPanel.getComponent(i++);
                    button.setIcon(new ImageIcon(exactnessOrder[row][col]));
                    if(exactnessOrder[row][col].equals("image/"+ num+ "00.jpg"))
                        emptyButton=button;
                }
            }
        }
    }
    //开局排列图片
    class StartButtonAction implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String[][] stochasticOrder = reorder();
            int i= 0;
            for (int row=0; row<4; row++) {
                for (int col=0; col<4; col++) {
                    JButton button = (JButton) centerPanel.getComponent(i++);
                    button.setIcon(new ImageIcon(stochasticOrder[row][col]));
                    if(stochasticOrder[row][col].equals("image/"+ num+ "00.jpg"))
                        emptyButton=button;
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值