Java Swing 实现数字华容道(滑动拼图)游戏
通过 Java Swing 的 JFrame 和 GridLayout 构建一个简单的 3x3 滑动拼图(类似华容道)界面。本文将详解如何使用按钮模拟图像网格,并通过坐标算法判断相邻移动,最终实现图片拼接还原。
项目结构与运行效果
在开始编写代码前,准备一张用于切割的图片,并将其保存为 img/model.jpg 作为参考图。同时需要准备9张切片图片,命名为 img/00.jpg 至 img/21.jpg,以及代表空白位置的 img/22.jpg。
项目的文件目录结构应清晰划分源代码与资源文件:
核心逻辑:类设计与初始化
第1步:创建主窗口并定义组件
新建一个继承自 JFrame 的类 MedleyGame。我们需要声明三个关键变量:
centerPanel:JPanel对象,用于承载拼图的3x3按钮网格,采用边界布局的中心位置。emptyButton:JButton对象,特指当前显示空白图片的按钮,是移动的锚点。topPanel:JPanel对象,位于顶部,放置参考图和“下一局”按钮。
第2步:设置窗口属性
在构造函数中,通过 setResizable(false) 固定窗口大小,使用 setBounds(100, 100, 354, 435) 设定初始位置和尺寸。关闭操作设置为 JFrame.EXIT_ON_CLOSE 以确保程序退出。
界面布局与图片绑定
界面分为上下两部分。顶部左侧放置 JLabel 显示原始图片作为目标参照;中间放置“下一局”按钮用于重置游戏。底部为核心拼图区,使用 GridLayout(0, 3) 实现自动换行的3列网格布局。
在初始化过程中,调用 reorder() 方法获取乱序后的图片路径数组,遍历生成 JButton。每个按钮通过 button.setIcon(...) 加载对应的切片图片,并设置唯一的名称(如 "00"、"01"),格式为 行号+列号,以便后续计算距离。
算法实现:随机打乱与移动判断
第3步:实现随机打乱 (Shuffle)
reorder() 方法的目的是将正确的顺序 (exactnessOrder) 打乱到 stochasticOrder 中。算法通过双重循环尝试填充每个格子,若该位置已被占用或为空,则从剩余的正确顺序中随机抽取一张图片填入。这一步确保了每局游戏的可玩性。
第4步:点击事件与坐标验证
核心逻辑在于 ImgButtonAction 监听器。当用户点击任意按钮时:
- 获取点击按钮
clickButton和空白按钮emptyButton的名称(即行、列坐标)。 - 利用曼哈顿距离公式判断相邻性:
Math.abs(clickRow - emptyRow) + Math.abs(clickCol - emptyCol) == 1。如果结果为1,说明两个按钮在同一行或同一列且紧邻。 - 若满足条件,交换两者图标,并将空白按钮引用指向被点击的按钮。
这一逻辑保证了游戏规则的严谨性,只有紧邻空白格的图片才能移动。
总结
本案例通过 Java Swing 演示了 GUI 开发的基础流程。关键点包括使用 GridLayout 管理复杂布局、通过命名规范简化坐标计算、以及事件监听器中的逻辑校验。完整代码包含必要的 import 语句及异常处理,可直接复制到 IDE 中运行测试。以上就是用Java实现简单拼图游戏的详细内容,更多关于Java Swing小游戏开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













