魔板游戏java课设含可运行程序.docx
- 文档编号:6597589
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:20
- 大小:170.97KB
魔板游戏java课设含可运行程序.docx
《魔板游戏java课设含可运行程序.docx》由会员分享,可在线阅读,更多相关《魔板游戏java课设含可运行程序.docx(20页珍藏版)》请在冰豆网上搜索。
魔板游戏java课设含可运行程序
魔板游戏
1.课程设计的目的
本次课程设计是通过Java语言编制一个魔板游戏,它是一款经典的智力游戏。
而Java语言是当今较为流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
这次课程设计,还有利于加深对Java课程的进一步了解,也可以巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。
使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。
2.设计方案论证
2.1开发环境
魔板游戏是一款益智游戏,是人们休闲娱乐时可供选择的消遣工具。
魔板游戏有两种形式,一种是由若干个有序不等数字组成,而另一种是由图像组成。
人们在将其恢复至最原始的序列而形成完整的排列时,会充分考验玩家的智商。
进而达到在娱乐中提高智商的功效。
魔板游戏分为两个级别,用户可以根据自己的水平来选择“初级”或者“高级”,更具灵活性,并且更贴近用户的需求。
对于“初级”级别,魔板由3*3个格子组成;对于“高级”级别,魔板由4*4个格子组成。
2.2需求分析
2.2.1设计要求
(1)魔板由3*3或4*4个格子组成。
对于3*3魔板,在前八个格子里随机放置8个编号1~8的方块,最后一个格子是未放置方块的空格子;对于4*4的魔板,在前15个格子里随机放置15个编号为1~15的方块,最后一个格子是未放置方块的空格子。
(2)用鼠标单击任何与空格子水平或垂直相邻的方块可以把该方块移入空格子,而当前方块移动之前所在的格子成为空格子。
通过不断地移动方块可以将方块一行一行地按数字顺序排好。
(3)魔板游戏也可以使用图像来代替数字。
例如,对于3*3的魔板,将一幅图像分成3*3幅小图像,除去最后一幅小图像(图像的右下角),将其余各幅小图像打乱顺序放在魔板的方块上,最终目标是通过移动方块恢复原始图像(不包括图像的右下角)。
(4)当用户按要求排列好方块后,程序弹出对话框,提示用户成功的消息。
(5)魔板游戏分为两个级别,用户可以通过界面上提供的菜单来选择“初级”或者“高级”两个级别。
对于“初级”级别,魔板由3*3个格子组成;对于“高级”级别,魔板由4*4个格子组成。
(6)“魔板游戏”提供一幅默认图像,用户可以使用该图像来玩魔板游戏。
用户也可以使界面提供的菜单选择一幅新图像,然后使用这个新的图像来玩魔板游戏。
2.2.2功能分析
所设计的魔板游戏需要实现以下几个功能:
(1)用户以“数字”或“图像”的形式来玩魔板游戏。
(2)用户可以根据个人需要来选择魔板游戏的级别:
“初级”或者“高级”。
2.2.3系统功能结构
在设计魔板游戏时,要编写7个Java源文件:
、、、、、和。
魔板游戏除了需要编写的上述7个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JMenuItem、JButton和JRadioButton等类。
魔板游戏所用到的一些重要的类以及之间的组合关系如图1所示。
图1类之间的组合关系
设计过程
2.3.1系统流程图
系统的流程图如图2所示。
图2魔板游戏系统流程图
2.3.2总体设计
(1)(主类)
PuzzleGame类负责创建魔板游戏的主窗口,该类含有main方法,程序从该类开始执行。
PuzzleGame雷的成员变量中有4种重要类型的对象:
PuzzlePad、JMenu、JRadioButton和JButton。
PuzzleGame类的主要成员的作用将在后面的详细设计中阐述,PuzzleGame类创建的窗口以及其中的主要成员对象如图3所示。
图3PuzzleGame窗口及主要的成员对象
(2)
PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。
该类的成员变量中有5种重要类型的对象:
Point、Block、HandleMovee、HandleImage和Image。
PuzzlePad类的主要成员的作用将在后面的详细设计中阐述。
(3)
Block类是JTextField的一个子类创建的对象是PuzzlePad类的重要成员之一,用来表示“魔板”中的“方块”。
(4)
Point类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。
(5)
HandleImage类所创建的对象负责将一幅图像分成若干个小图像。
(6)
HandleMove类所创建的对象负责处理鼠标事件。
(7)
VerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。
2.3.3详细设计
(1)PuzzleGame类
效果图:
PuzzleGame创建的窗口效果如图4(数字玩法)、图5(图像玩法)所示。
图4PuzzleGame创建的窗口(数字玩法)图5PuzzleGame创建的窗口(图像玩法)
图6PuzzleGame类的UML图
UML图:
MazeWindow类是包中JFrame的一个子类,并实现了ActionListener接口,该类的主要成员变量和方法的UML图如图6所示。
以下是UML图中有关数据和方法的详细说明。
1成员变量
PuzzlePad是PuzzlePad类声明的对象,用来刻画魔板,是PuzzleGame类中最重要的成员之一。
Bar是JMenuBar创建的菜单条,用来添加菜单。
Bar被放置在窗口的顶部。
gradeMenu和choiceImage是JMenu创建的菜单,其名字分别为“选择级别”和“选择图像”。
gradeMenu和choiceImage被添加到菜单条中。
oneGrade、twoGrade、newImage和defaultImage是JMenuItem创建的菜单项,名字依次为“初级”、“高级”、“选择一幅新图像”和“使用默认图像”,oneGrade和twoGrade菜单项被添加到菜单GradeMenu中。
oneGrade、twoGrade、newImage和defaultImage都将当前窗口注册为自己的ActionEvent事件监视器。
digitPlay和imagePlay是JRadioButton创建的属于同一选择组中的单选框,名字依次为“数字玩法”,“图像玩法”。
同一时刻,digitPlay和imagePlay中只能有一个处于选中状态。
startButton是JButton创建的按钮对象,名字为“开始”。
startButton将当前窗口注册为自己的ActionEvent事件监视器。
image是Image声明的对象。
Tool是Toolkit对象,负责创建image对象。
②方法
PuzzleGame()构造方法,负责完成窗口的初始化操作。
actionPerformed(ActionEvent)方法是PuzzleGame类实现ActionListener接口中的方法。
PuzzleGame类创建的窗口是菜单中的菜单项、单选框以及按钮上的ActionEvent事件监视器。
如果用户选中oneGrade或twoGrade菜单项时actionPerformed
(ActionEvent)方法所执行的操作分别让puzzlePad对象将自己的级别设置为以及或二级。
如果用户选中newImage或defaultImage菜单项时,actionPerformed(ActionEvent)方法所执行的操作就是分别改变image对象。
当用户单击start按钮后,如果单选框disPlay处于被选中状态,那么actionPerformed(ActionEvent)方法所执行的操作就是让puzzlePad对象使用数字魔板,如果单选框imagePlay被选中时,那么actionPerformed(ActionEvent)方法所执行的操作就是让puzzlePad对象使用图像魔板。
(2)PuzzlePad类
效果图:
PuzzlePad创建的魔板对象效果如图7所示。
(a)数字魔板(b)图像魔板
图7PuzzlePad创建的魔板对象
UML图:
PuzzlePad类是包中JPanel容器的子类,所创建的对象:
puzzlePad是PuzzleGame类中最重要的成员之一,作为一个容器添加到PuzzleGame窗口的中心。
标明PuzzlePad类的主要成员变量、方法以及和PuzzleGame类之间组合关系的UML图如图8所示。
图8PuzzllePad类的UML图
以下是UML图中有关数据和方法的详细说明。
1成员变量
Point是Point类型的二维数组,其单元为Point类创建的对象,用来确定魔板中方块的位置,即确定Block对象在PuzzlePad容器中的位置。
block是Block类型的二维数组,其单元为Block类创建的对象,用来表示方块。
Distance,grade,m和n是int型数据。
Point对象根据distance的值来进行初始化,以便确定Point对象之间的距离。
m和n是二维数组block和point的行数和列数,m和n的值都是3。
Grade的值代表魔板的级别,默认值是1。
handleMove是HandleMove类创建的对象,负责处理Block对象上的鼠标事件。
handleImage是HandImage类创建的对象,负责将一幅图像分成若干幅小图像。
2方法
PuzzlePad()是构造方法,负责创建PuzzlePad对象。
PuzzlePad对象调用getHandleMove()方法返回其中的HandleMove对象
PuzzlePad对象调用setImage(Image)方法设置image对象。
PuzzlePad对象调用getGrade()方法返回grade.
PuzzlePad对象调用setIsDigitPlay()方法将魔板设置为数字玩法。
PuzzlePad对象调用setIsImagePlay()方法将魔板设置为图像玩法。
图9Block创建的2个对象
图10Block类的UML图
(3)Block类
效果图:
Block创建的对象效果图如图9所示。
UML图:
Block类是包中JTextField类中的一个子类,创建的对象是二维数组block的单元中的对象。
Block型数组block是PuzzlePad类的重要成员之一。
标明Block类的主要成员变量和方法以及和PuzzlePad类之间组合关系的UML图如图10所示。
(4)Point类
效果图:
Point创建的对象负责确定Block对象在PuzzlePad魔板容器中的所在位置。
Point创建的对象没有可以显示的效果图。
UML图:
Point创建的对象含有两个重要int型数据,分别用来表示PuzzlePad魔板容器坐标系中的X轴坐标和Y轴坐标值,坐标系的原点是PuzzlePad魔板容器的左上角,向右是X轴的正向,向下是Y轴的正向。
Point类创建的对象是二维数组point的单元中的对象。
Point型二维数组point是PuzzlePad魔板容器的重要成员之一,其单元中的Point对象用来确定Block对象在PuzzlePad魔板容器中的位置。
标明Point类的主要成员变量和方法以及和PuzzlePad类之间组合关系的UML图如图11所示。
图11Point类的UML图
(5)HandleImage类
效果图:
HandleImage创建的对象负责将一幅图像分解为若干个小的图像,没有可显示的效果图。
UML图:
HandleImage类是包中JComponent类的一个子类,创建的对象HandleImage负责将一幅图像分解为若干个小的图像,是PuzzlePad类的重要成员之一。
HandleImage类的主要成员变量和方法以及和PuzlePad类之间的组合关系的UML图如图12所示。
图12HandleImage类的UML图
(6)HandleMove类
效果图:
HandleMove创建的对象效果图如图13所示。
图13HandleMove创建的对象
图14HandleMove类的UML图
UML图:
HandleMove是包中JPanel容器的一个子类,并实现了MouseListener和ActionListener接口,创建的对象handleMove是PuzzlePad类的成员之一,负责监视PuzzlePad类中的Block对象上的鼠标事件。
当用户鼠标点击Block对象后,handleMove对象负责给出移动Block对象的有关算法,并显示用户的用时。
标明HandleMove类的主要成员变量。
方法以及和PuzzlePad类之间组合关系的UML图如图14所示。
(7)VerifuSuccess
效果图:
VerifuSuccess创建的对象负责验证用户是否按要求成功排列魔板中的方
块,没有可显示的效果图。
UML图:
VerifuSuccess创建的对象负责验证用户是否按要求成功排列魔板中的方
块,创建的对象VerifuSuccess是PuzzlePad类的重要成员之一。
标明VerifuSuccess类的主要成员变量和方法以及和PuzzlePad类之间组合关系的UML图如图15所示。
图15VerifySuccess类的UML图
3.设计结果与分析
图16运行程序界面
程序运行结果
(1)在JCreater平台下编译并运行源程序,界面显示如上图16所示。
(2)单击JMenu中的“选择级别”,可供用户根据个人需要选择“初级”或“高级”,如图17所示。
图17魔板游戏级别选择
(3)单击JMenu中的“选择图像”,用户可以对图像进行选择,“选择一幅新图像”或“使用默认图像”进行魔板游戏。
如图18所示。
图18魔板游戏图像选择
(4)单击“选择一幅新图像”后,在弹出的对话框中选择路径找到想要用来玩魔板游戏的图像,如图19所示。
图19选择一幅新图像
(5)选择图像后单击“打开”,图像随即改变。
如图20所示。
图20重新选择新图像
(6)在JRadioButton上可以选择游戏方式,即“数字玩法”或“图像玩法”,如图21所示。
图21选择游戏玩法(数字或图像)
(7)当点击开始并用鼠标触发魔板后,系统自动启动计时器,如图22所示。
图22魔板游戏计时器
程序分析
本魔板游戏程序分别具备两种级别以及两种形式的玩法,即游戏级别“初级”或者“高级”,游戏玩法“数字”或“图像”。
同时系统提供计算器功能,方便用户掌握自己的游戏时间。
此游戏的图像玩法还可根据用户的喜好选择喜欢的图片进行魔板游戏,更能满足用户的需求,从而使用户更充分的在娱乐中强化智商。
4.总结
Java语言是一个支持网络计算的面向对象程序设计语言。
Java语言具有简单易学、面向对象、平台无关性,分布式、可靠性、安全性、支持多线程、支持网络编程和编译与解释共存等特点。
这次课程设计的内荣是运用Java理论知识设计魔板游戏给我最大的感受就是如果对什么事物产生了兴趣,就立刻动手去实践,困难在勇气和毅力下是甘拜下风的。
从做这个Java魔板游戏开始每当遇到什么困难,我都未曾想过要放弃。
出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。
在老师及同学的帮助下,我最终完成了这次Java课程设计,不过这只是我学习路上的一个驿站而已,各种计算机语言原本就是相通的,学习Java语言的目的主要是为了深入的了解其编程设计思想。
通过这次课程设计,不仅锻炼了我自主学习的能力,与此同时,通过我的动手实践操作,也使我把书本上的所学知识进一步融会贯通在了一起。
这使我的操作能力得到了进一步的锻炼和提高。
并且对我以后的程序设计以及软件开发等打下了夯实的基础也提供了丰富的实践经验。
总而言之,这次课程设计使我学到了很多东西,巩固和深化了解了之前学过的理论知识,对Java理论有了更进一步的了解,从各个方面看,都是受益匪浅。
5.参考文献
[1]刘洋,陈裼祯,李马宏.Java语言与面向对象程序设计[M].北京:
机械工业出版社,:
67-128
[2],,.Java程序设计自学手册[M].北京:
:
288-
331
[3]朱福喜,尹为民,余振坤.Java语言与面向对象程序设计[M].武汉:
武汉大学出版社,:
67-128
[4]陈国君,陈磊.Java2从入门到精通[M].北京:
清华大学出版社,:
13-98
[5].Java项目开发全程实录(软件项目开发全程实录)[M].北京:
:
20-95
[6]朱站立,沈伟.Java程序设计实用教程[M].北京:
北京大学出版社,:
53-60
6.附录:
import.*;
import.*;
import.*;
publicclassPuzzleGameextendsJFrameimplementsActionListener{
PuzzlePadpuzzlePad;
JMenuBarbar;
JMenugradeMenu,choiceImage;
JMenuItemoneGrade,twoGrade,newImage,defaultImage;
JRadioButtondigitPlay,imagePlay;
ButtonGroupgroup=null;
JButtonstartButton;
Imageimage;
Toolkittool;
publicPuzzleGame(){
tool=getToolkit();
bar=newJMenuBar();
gradeMenu=newJMenu("选择级别");
choiceImage=newJMenu("选择图像");
oneGrade=newJMenuItem("初级");
twoGrade=newJMenuItem("高级");
newImage=newJMenuItem("选择一幅新图像");
defaultImage=newJMenuItem("使用默认图像");
(oneGrade);
(twoGrade);
(newImage);
(defaultImage);
(gradeMenu);
(choiceImage);
setJMenuBar(bar);
(this);
(this);
(this);
(this);
startButton=newJButton("开始");
(this);
group=newButtonGroup();
digitPlay=newJRadioButton("数字玩法",true);
imagePlay=newJRadioButton("图像玩法",false);
(digitPlay);
(imagePlay);
puzzlePad=newPuzzlePad();
(1);
();
add(puzzlePad,;
JPanelpNorth=newJPanel();
(digitPlay);
(imagePlay);
(startButton);
(newJLabel("如果图像不能立刻显示,请再单击一次按扭"));
add(pNorth,;
add(),;
validate();
setVisible(true);
setBounds(100,50,550,380);
setDefaultCloseOperation;
try{image=(newFile("").toURI().toURL());
(image);}
catch(Exceptionexp){}
}
publicvoidactionPerformed(ActionEvente){
if()==startButton){
if()){
();
}
elseif()){
(image);
();
}
}
elseif()==oneGrade){
(1);
}
elseif()==twoGrade){
(2);
}
elseif()==newImage){
FileNameExtensionFilterfilter=newFileNameExtensionFilter(
"JPG&GIFImages","jpg","gif");
JFileChooserchooser=newJFileChooser();
(filter);
intstate=(null);
Filefile=();
if(file!
=null&&state=={
try{
image=().toURL());
(image);}
catch(Exceptionexp){}
}
}
elseif()==defaultImage){
try{
image=(newFile("").toURI().toURL());
(image);
}
catch(Exceptionexp){}
}
}
publicstaticvoidmain(Stringargs[]){
newPuzzleGame();
}
}
import.*;
import.*;
publicclassBlockextendsJTextField{
Pointpoint;
Objectobject;
Block(){
setEditable(false);
setHorizontalAlignment;
setFont(newFont("Arial",,16));
setForeground;
}
publicvoidsetAtPoint(Pointp){
point=p;
}
publicPointgetAtPoint(){
returnpoint;
}
publicvoidsetObject(Objectobject){
=object;
if(objectinstanceofInteger){
Integernumber=(Integer)object;
setText(""+());
}
elseif(objectinstanceofImage){
repaint();
}
}
publicObjectgetObject(){
returnobject;
}
publicvoidpaintComponent(Graphicsg){
(g);
intw=getBounds().width;
inth=getBounds().height;
try{
((Image)object,0,0,w,h,this);
}
catch(Exceptionexp){}
}
}
import.*;
import.*;
publicclassHandleImageextendsJComponent{
intimageWidth,imageHeight;
Toolkittool;
HandleImage(){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 java 课设含可 运行 程序