拼图游戏java课设含可运行程序Word格式文档下载.docx
《拼图游戏java课设含可运行程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《拼图游戏java课设含可运行程序Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
该类是JPanel类的子类,实现了初始化游戏界面,创建并添加组件,盛放游戏信息的面板内容,声明6个静态方法,serialVersionUID、hasAddActionListener、Cell、cellNull、pictureID、stepNum。
2.2.3Cell.java
该类是JButton类的子类,加载打乱的图块进行初始化游戏,负责图快的移动。
在本程序中各个类的关系如图1所示。
MyMainFrame
CellMyCanvas
图1功能模块图
2.3程序流程图
开始
初始化游戏界面
选择图片
加载图片
移动图片
N拼图正确,
Y
结束
图2程序流程图
课程设计说明书NO.3
2.4类、方法、属性说明
2.4.1MyMainFrame类
(1)成员变量
表1MyMainFrame成员变量表
序号名称变量类型功能1JLabelchoicePicL确定选择的图片2StringpicName确定选择的图片3JComboBoxjcbo1确定选择的图片4JTextFieldname图片名称5JTextFieldstepInfor玩家已走步数6JTextFieldtimeInfor时间7JTextFieldsituation图片载入8JRadioButtonstart开始按钮9JRadioButtonaddPicNum数字提示10JRadioButtonclearPicNum清除提示
(2)方法
表2MyMainFrame方法表
序号名称功能备注
MyMainFrame()1完成窗口的初始化构造方法
actionPerformed(ActionEvente)2游戏完成图接口方法
itemStateChanged(ItemEventarg0)3下拉列表项接口方法
paintComponent(Graphicsg)4重绘容器组件里的所有组件接口方法
mouseClicked(MouseEventarg0)5单击鼠标发生事件接口方法
mouseEntered(MouseEventarg0)6鼠标进入指定区域发生事件接口方法
ouseExited(MouseEventarg0)7鼠标离开指定区域发生事件接口方法
mousePressed(MouseEventarg0)8按下鼠标时发生事件接口方法
mouseReleased(MouseEventarg0)9松开鼠标时发生事件接口方法10Main()程序运行的人口方法入口方法
课程设计说明书NO.4
2.4.2MyCanvas.java类
(1)成员变量
表3MyCanvas成员变量表
序号名称变量类型备注1pictureIDint当前选择图片代号2stepNumInt游戏已走步数
(3)方法
表4MyCanvas方法表
序号名称功能备注1reLoadPictrue1()重新加载图片除去数字提示2reLoadPictrue2()重新加载图片除去数字提示3isFinish()检查拼图判断是否拼成4Start()重新排列对方格且将顺序打乱5mouseClicked(MouseEventarg0)单击鼠标发生事件接口方法6mouseEntered(MouseEventarg0)鼠标进入指定区域发生事件接口方法7mouseExited(MouseEventarg0)鼠标离开指定区域发生事件接口方法8mousePressed(MouseEventarg0)按下鼠标时发生事件接口方法9mouseReleased(MouseEventarg0松开鼠标时发生事件接口方法
2.4.3Cell.java类
表5Cell方法表
序号名称变量类型备注1serialVersionUIDfinal值是1L
课程设计说明书NO.5
(2)方法
表6Cell方法表
序号名称功能
1Cell(Iconicon)规定拼图小块大小
2Cell(Stringn,Iconicon)实际为ICON
3move(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游戏初始界面
课程设计说明书NO.6
单击start按钮开始游戏,界面自动加载并切割图片,玩家此时就可以通过鼠标来完成游戏了,单击空白区域旁边的图快就会移动,移动方向是向着空缺块移动,也就是说孔雀块四周都是可移动的块,而不是紧邻空缺块的图快则不能移动,结果如图4所示。
图4开始后的界面
课程设计说明书NO.7
当玩家想有提示信息时可单击数字提示,单击后会在图块上出现带有顺序的数字,玩家可以通过数字更加容易的完成拼图游戏,如图5所示。
如果不想显示数字提示则可单击清除提示,结果则如同上图4所示。
图5数字提示界面图
在游戏中,玩家每移动一块图快,状态栏中的步数就会自动加1,并在游戏状态中显示出来,游戏完成时会弹出一个对话框,提示玩家完成拼图游戏并显示所用步数,完成游戏结果图如图6所示。
图6完成游戏对话框
课程设计说明书NO.8
玩家若想换一个图片进行游戏,则可通过image下拉框实现,玩家可以根据自己的兴趣爱好进行选择,如图7所示
图7image下拉框
例如可以选择下拉框中的唯美,运行界面则如图8所示
图8唯美拼图界面
课程设计说明书NO.9
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
课程设计说明书NO.10
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"
privateJTextFieldsituation=newJTextField("
状态:
图片已载入"
//数字提示单选按钮
课程设计说明书NO.11
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);
课程设计说明书NO.12
//盛放原尺寸预览图面板
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.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(){
myCanvas.reLoadPictrue2();
clearPicNum.addActionListener(newActionListener(){
myCanvas.reLoadPictrue1();
jcbo1.addItemListener(newItemListener(){
publicvoiditemStateChanged(ItemEventarg0){
MyCanvas.pictureID=jcbo1.getSelectedIndex()+1;
panel4.repaint();
图片已载入。
课程设计说明书NO.13
name.setText("
+jcbo1.getSelectedItem());
publicstaticvoidmain(String[]args){
//TODO自动生成方法存根
MyMainFramepintu=newMyMainFrame();
pintu.setVisible(true);
classpreviewPanel1extendsJPanel{
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{
publicpreviewPanel2(){
/imaage/"
g.drawImage(viewer,20,20,450,600,this);
publicvoidmouseClicked(MouseEventarg0){
//TODOAuto-ge