Java课程设计项目博客

一、 项目开发背景介绍
拼图游戏是一款传统的益智游戏,拼图玩具已经有约235年的历史了。早在1760年,法英两国几乎同时

出现这种既流行又有益的娱乐方式。把一张图片粘在硬纸板上,然后把它剪成不规则的小碎片。最初这些图片都是有教育意义的,要么附有适于年轻人阅读的短文,要么向新兴资产阶级传授历史或地理知识。

二、 课设任务及要求
 使游戏中的图片每次初始的状态都不一样。
 创建按钮图标类来加载图片。
 运用鼠标的监听事件方法处理单击的图片。
 实现程序GUI图形界面
 实现游戏开始、返回、退出等功能
 实现鼠标键盘事件响应模块功能
 实现查看原图功能

三、 项目功能框架图
Java课程设计项目博客_第1张图片
四、 需求分析
保证拼图游戏软件的稳定性,要在完成软件设计后进行软件稳定性测试,检测出该软件发生故障的概率。
利用 Java Swing组件对该游戏软件的界面进行设计与实现,实现程序GUI图形界面,做到界面设计简洁大方,时尚新颖,适合各类用户群体使用。
由于本软件目前是基础版本,未做到尽善尽美。如果用户需要提高版本,本软件需要根据游戏者的要求进行进一步的修改。

五、设计思路
 实现程序GUI图形界面
 实现游戏开始、返回、退出等功能
 实现鼠标键盘事件响应模块功能
 实现查看原图功能
游戏非常的简单,当运行程序后,在登录游戏界面后,设计本程序能够载入认片,程序为4*4的16格。在本程序中,对于图片的拼凑、判断图片是否可以移动等都是设计的关键。把分好的图片存储到一个数组中,对于可移动的块是按钮,将按钮数组首先附给一个向量,然后用随机数来确定对应向量的值,然后再附给对应数组按钮,同时去除该值。也就是说在附值的时候图片顺序不变,变的而是数组按钮的顺序,对于图片的是否拼图成功的提示,主要是在每个按钮中加个 String的属性值,而且对于正确的排序的值与正在排的各个值比较,一旦所有的按钮对应的值与正确的排序一致,则为成功程序运行主窗口显示程序界面,点击“开始”按钮后开始游戏。

六、详细设计
5.1. 开始载入图片
Java课程设计项目博客_第2张图片
用ps软件剪2张图,每个图片拆分成等比例16分之一,以“pic_”格式命名
根据裁剪的图片网格布局设置为一个4*4的网格,用一个二维数组摆放图片位置,通过嵌套for循环把裁剪好的小图依次加载到网格中,最后效果:
Java课程设计项目博客_第3张图片

部分代码:
private static final long serialVersionUID = 1L;
boolean hasAddActionListener = false;// 设置方格动作监听器的标识
PaneButton pane[];// 声明方格
Rectangle nullPanel;// 声明空方格,没有添图片
public static int currentPID = 1;// 当前选择的图片编号
public PanelOfImage() {// 构造方法进行初始化
this.setLayout(null);// 设置面板的布局为空
this.setSize(400, 400);// 设置面板的大小
nullPanel = new Rectangle(300, 300, 100, 100);// 设置空方格的位置
pane = new PaneButton[16];// 创建九个方格
Icon icon;// 声明图标
for (int i = 0; i < 4; i++) {// 循环为每个方格加载图片
for (int j = 0; j < 4; j++) {// 循环列
icon = new ImageIcon(“picture/pic_” + currentPID + “_” + (i * 4 + j + 1) + “.jpg”);// 创建图标
pane[i * 4 + j] = new PaneButton(icon);// 创建方格在方格中加载图片
pane[i * 4 + j].setLocation(j * 100, i * 100);// 设置方格的位置
this.add(pane[i * 4 + j]);// 面板添加方格
}
}
this.remove(pane[15]);// 移除多余的方格
}
5.2 随机排列图片
Java课程设计项目博客_第4张图片
点击开始游戏后,程序嵌套的for循环把裁剪好的图片依次加载到二维数组中,

部分代码:
public void breakRank() {// 方格打乱重新排序
while (pane[0].getBounds().x <= 100 && pane[0].getBounds().y <= 100) {// 当第一个方格距左上角近时
int x = nullPanel.getBounds().x;
int y = nullPanel.getBounds().y;
int direction = (int) (Math.random() * 4);// 随机产生一个数字对应空方格的上下左右移动
if (direction == 0) {// 空方格左移动,与左侧方格互换位置,左侧方格右移动
x -= 100;// 空主格左移
if (test(x, y)) {
for (int j = 0; j < 15; j++) {// 循环寻打左侧的按钮
if ((pane[j].getBounds().x == x)
&& (pane[j].getBounds().y == y)) {// 依次寻找左侧的按钮
pane[j].move(“RIGHT”, 100);// 方格向右移动一格
nullPanel.setLocation(x, y);// 重新设置空方格的位置
break;// 跳出循环
}
}
}
5.3 换下一张图片
Java课程设计项目博客_第5张图片
点击选择按钮,下拉框显示可选图片素材,确定素材图片后,面板重新加载图片
部分代码:

int i = JOptionPane.showConfirmDialog(this, choice, “选择素材图”, JOptionPane.OK_CANCEL_OPTION);// 弹出对话框
if (i == JOptionPane.YES_OPTION) {// 选择对话框的确定按钮
PanelOfImage.currentPID = choice.getSelectedIndex() + 1;// 获得列表项的编号
imagePanel.reLoadPictrue();// 图片重载
Icon icon = new ImageIcon(“picture/pic_” + PanelOfImage.currentPID + “.jpg”);// 获得图片图标
JLabel label = new JLabel(icon);// 根据图标设置标签
label.setBounds(0, 0, 400, 400);// 设置标签的方位
panelOfLook.removeAll();
panelOfLook.add(label);
panelOfLook.repaint();
}

5.4判断拼图是否成功

部分代码:
if (this.isFinish()) {// 进行是否完成的判断
JOptionPane.showMessageDialog(this, “恭喜您!”);
for (int i = 0; i < 15; i++) {// 循环撤消鼠标事件
pane[i].removeMouseListener(this);
}
七、设计体会与小结
相信在大学期间,很多同学都参与过或者是编写过拼图游戏软件的程序,那么这次作为课程设计作业,要想更加出色的完成这个课题,并且具有独特之处,就是我编写程序之前首先要考虑到的问题。但是,对于拼图游戏而言,寻找游戏的创新突破口也有一定的难度。对于自己以及团队来说知识有限,所以对于游戏功能方面的创新并没有,希望在以后的课程中可以提高自己。
在做这次的课程设计,很荣幸能够提前接触制作独立的Java项目,一直学习理论缺乏实际的软件开发经验。这次通过做课程设计,我完成了拼图游戏的软件开发任务。在整个开发过程中也遇到了很多问题,如载入图片的处理,随机排列图片,图片移动等。对其设计体会,总结如下:
1.为了熟悉拼图游戏的相关运作和功能设计,我从网上下载了各种拼图游戏了解并研究各自的功能设计,总结出哪些是好的功能设计,哪些是不必要的设计。对尝试过的拼图游戏进行总结,将各自的优点融入我的设计之中。
2.完成了从“小而全”,到“全而精”的转变。设计过程中,经常会遇到困难,我学会通过反复思考和测试,找出自己的错误并加以改正,再进行下ー个步骤。这个程序就是在这样反复的发现错误、改正错误中完成的。
3.这是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义,相信这也是安排Java课程设计的初衷。经过两个星期的努力,课程设计内容基本完成了。回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作软件,丰富了自己的实技能,扩展了相关知识,使我受益匪浅。同时,也感受到了软件开发的不易。由于我对软件开发还只是一个新手,了解的不多,这其中一定还有很多的不足,也许有些模块未能做得尽如人意。但可以肯定的是,通过此次毕业设计,我确实收获了许多意想不到的东西,不光是编程语言,也包括对于软件设计的重新认识以及对于软件开发人员工作的理解。
八、参考文献
[1] 百度文库 https://wenku.baidu.com/view/d6217cca4028915f804dc221.html
[2] Csdn博客 https://blog.csdn.net/qq_44906416/article/details/89786215
九、团队Git地址
https://gitee.com/jigsaw_puzzle/sample_repository
Java课程设计项目博客_第6张图片
Java课程设计项目博客_第7张图片

你可能感兴趣的:(java)