拼图游戏java课设含可运行程序.docx
- 文档编号:24514159
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:24
- 大小:1.68MB
拼图游戏java课设含可运行程序.docx
《拼图游戏java课设含可运行程序.docx》由会员分享,可在线阅读,更多相关《拼图游戏java课设含可运行程序.docx(24页珍藏版)》请在冰豆网上搜索。
拼图游戏java课设含可运行程序
拼图游戏
1.课程设计的目的
本次课程设计的主要目的是设计一个拼图游戏。
在这个拼图游戏中有自由选择图片的功能,可以根据自己的兴趣选择喜欢的图片进行游戏,为了减小难度,在游戏中加入了数字提示功能,在游戏界面中,左半部分是游戏区域,右半部分则是原图预览部分,游戏开始时,系统会随机分配一块缺失,并将图片顺序打乱,用户可以根据原始图片进行移动复原过程。
在游戏中会进行步数和时间的统计,以供玩家进行对比,本游戏完全通过鼠标来操作,简单上手。
2.设计方案论证
2.1设计思路
2.1.1功能描述
本次课程设计主要是用Java语言编写程序实现一个拼图游戏。
该拼图游戏系统共包括3个java源文件和一个图片文件夹。
这是个功能比较齐全的拼图游戏,实现的是将图片分解,取出最右下角的图片,然后将剩余图片随即打乱,最关键的不用自己手动切割图片,再进行加载。
而是应用类方法自动进行图片的加载,方便了用户的使用。
该拼图游戏结合了许多元素,可以图片切割,同时还有游戏时间和步数的记录。
在拼图时首先把图片添加到文件夹“09.12.27java编程”的目录下,程序会自动获取该目录下的所有图片文件,并加载到游戏中,进行切割后,显示在拼图按钮上。
拼图结束时可以显示游戏成绩和记录的存档。
2.1.2开发环境
本次设计的开发运行环境是:
JCreater
2.2设计方法
在设计拼图游戏时,需要编写3个Java源文件:
MyMainFrame.java、MyCanvas.java、Cell.java。
2.2.1MyMainFrame.java主类
该类创建拼图游戏的主窗口,该类含有main方法,是程序的入口,该类是JFrame类的子类,定义了各个组件的动作并为窗口设置图标,MyMainFrame类的成员变量中有8种重要的变量及方法,choicePicL、picName、jcbo1、name、stepInfor、timeInfor、situation、panel1。
2.2.2MyCanvas.java
该类是JPanel类的子类,实现了初始化游戏界面,创建并添加组件,盛放游戏信息的面板内容,声明6个静态方法,serialVersionUID、hasAddActionListener、Cell、cellNull、pictureID、stepNum。
2.2.3Cell.java
该类是JButton类的子类,加载打乱的图块进行初始化游戏,负责图快的移动。
在本程序中各个类的关系如图1所示。
图1功能模块图
2.3程序流程图
图2程序流程图
2.4类、方法、属性说明
2.4.1MyMainFrame类
(1)成员变量
表1MyMainFrame成员变量表
序号
名称
变量类型
功能
1
choicePicL
JLabel
确定选择的图片
2
picName
String
确定选择的图片
3
jcbo1
JComboBox
确定选择的图片
4
name
JTextField
图片名称
5
stepInfor
JTextField
玩家已走步数
6
timeInfor
JTextField
时间
7
situation
JTextField
图片载入
8
start
JRadioButton
开始按钮
9
addPicNum
JRadioButton
数字提示
10
clearPicNum
JRadioButton
清除提示
(2)方法
表2MyMainFrame方法表
序号
名称
功能
备注
1
MyMainFrame()
完成窗口的初始化
构造方法
2
actionPerformed(ActionEvente)
游戏完成图
接口方法
3
itemStateChanged(ItemEventarg0)
下拉列表项
接口方法
4
paintComponent(Graphicsg)
重绘容器组件里的所有组件
接口方法
5
mouseClicked(MouseEventarg0)
单击鼠标发生事件
接口方法
6
mouseEntered(MouseEventarg0)
鼠标进入指定区域发生事件
接口方法
7
ouseExited(MouseEventarg0)
鼠标离开指定区域发生事件
接口方法
8
mousePressed(MouseEventarg0)
按下鼠标时发生事件
接口方法
9
mouseReleased(MouseEventarg0)
松开鼠标时发生事件
接口方法
10
Main()
程序运行的人口方法
入口方法
2.4.2MyCanvas.java类
(1)成员变量
表3MyCanvas成员变量表
序号
名称
变量类型
备注
1
pictureID
int
当前选择图片代号
2
stepNum
Int
游戏已走步数
(3)方法
表4MyCanvas方法表
序号
名称
功能
备注
1
reLoadPictrue1()
重新加载图片
除去数字提示
2
reLoadPictrue2()
重新加载图片
除去数字提示
3
isFinish()
检查拼图
判断是否拼成
4
Start()
重新排列对方格
且将顺序打乱
5
mouseClicked(MouseEventarg0)
单击鼠标发生事件
接口方法
6
mouseEntered(MouseEventarg0)
鼠标进入指定区域发生事件
接口方法
7
mouseExited(MouseEventarg0)
鼠标离开指定区域发生事件
接口方法
8
mousePressed(MouseEventarg0)
按下鼠标时发生事件
接口方法
9
mouseReleased(MouseEventarg0
松开鼠标时发生事件
接口方法
2.4.3Cell.java类
(1)成员变量
表5Cell方法表
序号
名称
变量类型
备注
1
serialVersionUID
final
值是1L
(2)方法
表6Cell方法表
序号
名称
功能
1
Cell(Iconicon)
规定拼图小块大小
2
Cell(Stringn,Iconicon)
实际为ICON
3
move(Stringdirection,intsleep)
实现拼图小块的移动
3设计结果与分析
将3个Java源文件:
MyMainFrame.java、MyCanvas.java、Cell.java,以及所需要的名为imaage的文件夹的图像文件保存到E盘下的同一目录“09.12.27java编程”文件夹中。
分别编译这3个Java源文件,或运行“javac*.java”命令,编译全部的源文件,然后运行主类,即运行MyMainFrame.java类。
通过运行结果图可以看到在界面上方有一个按钮区,其中有数字提示,对于初玩者可以单击一下图块上就会出现数字提示,想去掉提示单击清除提示即可,image是个下拉框,根据自己的兴趣爱好选择自己喜欢的拼图进行游戏,单击start开始游戏。
在界面下方有一行游戏状态栏,显示了图片名称,步数,时间,以及状态,运行结果图3所示。
图3游戏初始界面
单击start按钮开始游戏,界面自动加载并切割图片,玩家此时就可以通过鼠标来完成游戏了,单击空白区域旁边的图快就会移动,移动方向是向着空缺块移动,也就是说孔雀块四周都是可移动的块,而不是紧邻空缺块的图快则不能移动,结果如图4所示。
图4开始后的界面
当玩家想有提示信息时可单击数字提示,单击后会在图块上出现带有顺序的数字,玩家可以通过数字更加容易的完成拼图游戏,如图5所示。
如果不想显示数字提示则可单击清除提示,结果则如同上图4所示。
图5数字提示界面图
在游戏中,玩家每移动一块图快,状态栏中的步数就会自动加1,并在游戏状态中显示出来,游戏完成时会弹出一个对话框,提示玩家完成拼图游戏并显示所用步数,完成游戏结果图如图6所示。
图6完成游戏对话框
玩家若想换一个图片进行游戏,则可通过image下拉框实现,玩家可以根据自己的兴趣爱好进行选择,如图7所示
图7image下拉框
例如可以选择下拉框中的唯美,运行界面则如图8所示
图8唯美拼图界面
4.设计体会
通过一周的JAVA课程设计,是我对JAVA语言有个更深的一层理解,这一学期的学习只是为我们引导了一个学习的方向,更深入的知识还需要我们自己去学习,而本次课程设计才让我体会到学习JAVA语言的困难和解决困难后的乐趣,开始对课程设计毫无头绪,题目不知道定什么,本人对游戏比较感兴趣,最后在坦克大战、俄罗斯方块、象棋和拼图游戏中选择了拼图游戏,个人觉得拼图游戏比较新颖,而且可以上传好看的图片,在枯燥的编程过程中增加了趣味性,使编程不再那么乏味,在本次拼图游戏中,我设计了数字提示功能,提高了游戏的友好性。
在程序运行时我遇到了相当大的困难,由于是三个源文件,还有一个image的文件夹,最初忘记应该把文件夹放在E盘下而费了好大周折,改正后,又忘记image文件夹应该放到源文件上级目录中,又折腾很久,最后在询问同学后终于解决了这个问题,成功运行出来了,当时心中的喜悦没人能够理解,总之课程设计在设计完成以后才会体验到快乐,并且锻炼了自己的动手和自学能力。
5.参考文献
[1]陈国君,陈磊,刘洋.Java2程序设计基础[M].北京:
清华大学出版社,2007.11:
221-286
[2]朱站立,沈伟.Java程序设计实用教程[M].北京:
电子工业出版社,2006.10:
134-187
[3]朱福喜,尹为民,余振坤等.Java语言与面向对象程序设计[M].武汉:
武汉大学出版社,2006.1:
97-128
[4]张思民,梁维娜.Java程序设计实践教程[M].北京:
清华大学出版社,2006.8:
24-68
6.附录
(1)//MyMainFrame类
importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.GridLayout;
importjava.awt.Image;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.ItemEvent;
importjava.awt.event.ItemListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjavax.swing.ButtonGroup;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JComboBox;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JRadioButton;
importjavax.swing.JTextField;
importjavax.swing.border.TitledBorder;
publicclassMyMainFrameextendsJFrameimplementsMouseListener{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicstaticMyCanvasmyCanvas;
//选择图片复选框
privateJLabelchoicePicL=newJLabel("Image:
");
privateString[]picName={"鲜橙","小企鹅","小猫","天使","SARAEVANS","唯一","唯美","小女孩儿","海报","雪人儿","倾听","范冰冰"};;
privateJComboBoxjcbo1=newJComboBox(picName);
JButtonstart;
//盛放游戏信息的面板内容,(Framesouth)
privateJTextFieldname=newJTextField("图片名称:
picture1");
publicstaticJTextFieldstepInfor=newJTextField("步数:
0");
privateJTextFieldtimeInfor=newJTextField("时间:
00:
00:
00");
privateJTextFieldsituation=newJTextField("状态:
图片已载入");
//数字提示单选按钮
publicJRadioButtonaddPicNum;
publicJRadioButtonclearPicNum;
publicMyMainFrame(){
myCanvas=newMyCanvas();
this.setTitle("09.12.31大拼图1");
this.setLocation(300,200);
this.setSize(1000,770);
this.setResizable(false);
this.setDefaultCloseOperation(3);
//放置按钮面板(Framenorth)
JPanelpanel1=newJPanel();
FlowLayoutflowLayout=newFlowLayout();
flowLayout.setAlignment(FlowLayout.LEFT);
panel1.setLayout(flowLayout);
start=newJButton("start");
addPicNum=newJRadioButton("数字提示",false);
clearPicNum=newJRadioButton("清除提示",true);
ButtonGroupaddNumGroup=newButtonGroup();
addNumGroup.add(addPicNum);
addNumGroup.add(clearPicNum);
panel1.setBackground(Color.pink);
start.setBackground(Color.pink);
addPicNum.setBackground(Color.pink);
clearPicNum.setBackground(Color.pink);
panel1.add(addPicNum);
panel1.add(clearPicNum);
panel1.add(choicePicL);
panel1.add(jcbo1);
panel1.add(start);
panel1.setBorder(newTitledBorder("按钮区"));
this.setLayout(newBorderLayout());
this.add(panel1,BorderLayout.NORTH);
//盛放游戏信息的面板(Framesouth)
JPanelpanel2=newJPanel();
name.setEditable(false);
stepInfor.setEditable(false);
timeInfor.setEditable(false);
situation.setEditable(false);
panel2.setLayout(newGridLayout(1,4));
panel2.add(name);
panel2.add(stepInfor);
panel2.add(timeInfor);
panel2.add(situation);
//盛放原尺寸预览图面板
finalpreviewPanel2panel4=newpreviewPanel2();
panel2.setBorder(newTitledBorder("游戏状态"));
myCanvas.setBorder(newTitledBorder("拼图区"));
panel4.setBorder(newTitledBorder("原图预览"));
//盛放拼图和panel6的面板
JPanelpanel7=newJPanel();
panel7.setLayout(newGridLayout(1,2));
panel7.add(myCanvas,BorderLayout.WEST);
panel7.add(panel4,BorderLayout.EAST);
this.setLayout(newBorderLayout());
this.add(panel1,BorderLayout.NORTH);
this.add(panel7,BorderLayout.CENTER);
this.add(panel2,BorderLayout.SOUTH);
this.setVisible(true);
start.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
myCanvas.Start();
MyCanvas.stepNum=0;
situation.setText("状态:
游戏进行中。
");
stepInfor.setText("步数:
"+MyCanvas.stepNum);
}
});
addPicNum.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
myCanvas.reLoadPictrue2();
}
});
clearPicNum.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
myCanvas.reLoadPictrue1();
}
});
jcbo1.addItemListener(newItemListener(){
publicvoiditemStateChanged(ItemEventarg0){
//TODOAuto-generatedmethodstub
MyCanvas.pictureID=jcbo1.getSelectedIndex()+1;
myCanvas.reLoadPictrue1();
MyCanvas.stepNum=0;
stepInfor.setText("步数:
"+MyCanvas.stepNum);
panel4.repaint();
situation.setText("状态:
图片已载入。
");
name.setText("图片名称:
"+jcbo1.getSelectedItem());
}
});
}
publicstaticvoidmain(String[]args){
//TODO自动生成方法存根
MyMainFramepintu=newMyMainFrame();
pintu.setVisible(true);
}
classpreviewPanel1extendsJPanel{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicpreviewPanel1(){
}
protectedvoidpaintComponent(Graphicsg){
super.paintComponents(g);
ImageIconpreview=newImageIcon("E:
/09.12.27java编程/image/"+MyCanvas.pictureID+".jpg");
Imageviewer=preview.getImage();
g.drawImage(viewer,0,0,200,100,this);
}
}
classpreviewPanel2extendsJPanel{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
publicpreviewPanel2(){
}
protectedvoidpaintComponent(Graphicsg){
super.paintComponents(g);
ImageIconpreview=newImageIcon("E:
/09.12.27java编程/imaage/"+MyCanvas.pictureID+".jpg");
Imageviewer=preview.getImage();
g.drawImage(viewer,20,20,450,600,this);
}
}
publicvoidmouseClicked(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
publicvoidmouseEntered(MouseEventarg0){
//TODOAuto-generatedmethodstub
}
publicvoidmouseExited(MouseEventarg0){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 拼图游戏 java 课设含可 运行 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)