JAVA课程设计魔版游戏功能实现.docx
- 文档编号:7790942
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:44
- 大小:276.18KB
JAVA课程设计魔版游戏功能实现.docx
《JAVA课程设计魔版游戏功能实现.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计魔版游戏功能实现.docx(44页珍藏版)》请在冰豆网上搜索。
JAVA课程设计魔版游戏功能实现
java课程设计实验报告
实验名称
魔板游戏
指导教师
XXX
专业
信息与计算科学
学生成员
XX(20084390116)
XX(20084390124)
XX(20084390128)
完成日期:
2011年6月15日
魔板游戏
1.课程设计的目的
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JCreator开发工具的运用,拓宽常用类库的应用。
通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。
本设计目的是编写一个魔板游戏,要求可以自选图片(还有数字玩法),自选难度级别(初级和高级),系统可根据自选图片及难度级别自动划分图块,在初始化游戏的时候使最右下角一片缺失并打乱剩余魔块原始顺序,要求用鼠标移动魔块使魔块按原始顺序正确排列。
该游戏可以在拼图同时显示原始图片,使用户可参照原始图片进行移动复原。
此外还要求有成绩记录功能,在游戏结束时记录该用户姓名、所用时间,并可以查看相应级别的英雄榜,显示成绩排名。
并且在移动模块的同时会有简短的音乐播放,不至于太枯燥。
2.设计方案论证
2.1.总体设计
该拼图游戏系统共包括10个java源文件。
这是个功能比较齐全的魔板游戏,最关键的不用自己手动切割图片,再进行加载。
而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。
程序最后以test格式的文件来保存游戏记录。
该魔板游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时,还有游戏时间的记录,并以test文档形式进行保存。
在拼图时首先把图片进行切割,显示在拼图按钮上。
拼图结束时可以显示游戏成绩和记录的存档。
难度级别选择
背景图片选择
数字或图像玩法选择
查看英雄榜
移动有音乐播放
成绩名字记录
魔板游戏
(1)功能模块图如图1:
图1系统功能
(2)类间关系如图2:
图2类间关系
(3)java源文件其功能如表1:
表1文件功能
序号
文件名
主要功能
1
PuzzleGame.java
创建魔板游戏的主窗口,含有main方法,程序从该类开始执行
2
Pazzlepad.java
代表“魔板”,是PuzzleGame类最重要的成员变量
3
block.java
用来表示“魔板”中的“方块”,是JtextField的一个子类。
4
point.java
负责创建位置的对象,可以确定“方块”和“魔板”的位置
5
Handleimage.java
负责将一个图像分成若干个小图像
6
HandleMove.java
负责处理鼠标事件
7
VerifySuccess.java
负责验证用户是否按要求成功排列模板中的方块。
8
Record.java
负责保存用户的名字和成绩到相应级别文件中。
9
People.java
封装用户的名字和成绩,以便ShowRecordDialog对象可以按成绩的高低排序用户。
10
ShowRecordDialog.java
当用户单击查看排行榜时。
负责显现用户的成绩。
2.2.详细设计
2.2.1.主类PuzzleGame
成员变量见表2:
表2类PuzzleGame的成员变量
名称
成员变量描述
名称
成员变量描述
puzzlepad
用来刻画魔板
newImage
选择一幅新图像
bar
用来添加菜单
DefaultImage
使用默认图像
gradeMenu
选择级别
digitPlay
数字玩法
choiceImage
选择图像
imagePlay
图像玩法
OneGrade、
初级
startButton
开始
twoGrade
高级
image
Image声明的对象
tool
负责创建image对象
(2)方法见表3;
表3类PuzzleGmae的方法
方法名
功能
PuzzleGame()
负责完成窗口的初始化操作
actionPerformed(Actionevent)
PuzzleGame类实现ActionListener接口中的方法
main()
程序运行的入口方法
(3)源代码见文件PuzzleGame.java
2.2.2.Pazzlepad类
成员变量见表4:
表4类Puzzlepad的成员变量
名称
成员变量描述
名称
成员变量描述
point
Point类型的二维数组,确定模版中方块的位置
HandleMove
负责处理block对象上的鼠标事件
block
Block类型的二维数组,表示魔板中的方块
HandleImage
负责将一幅图像分成若干幅小图像
distance(int型)
Point对象根据distance的值进行初始化,以确定point对象之间的距离
VerifySuccess
验证用户是否按要求成功排列了方块
grade
其值代表魔板的级别,默认值为1
image
Image声明的图像对象
m、n
它们的值分别为二维数组point和block的行数和列数,默认值都为3
Tool
Toolkit对象,创建image声明的图像对象:
image
(2)方法见表5;
表5类Puzzlepad的方法
方法名
功能
Puzzlepad()
负责创建Puzzlepad对象
getHandleMove()
返回其中的HandleMove对象
setImage(Image)
设置Image对象
setGrade(int)
设置模仿的级别
getGrade()
返回grade
needInit()
完成Block和Point对象的创建,以及完成对其他对象的初始化
setIsDigitplay()
将魔板设置为数字玩法
setIsImageplay()
将魔板设置为图像玩法
paintComponent()
将魔板使用的图像绘制在魔板的右侧。
(3)源代码见文件Puzzlepad.java
2.2.3.Block类
成员变量见表6:
表6类Block的成员变量
名称
成员变量描述
point
确定Block对象在Puzzlepad所创建的魔板容器中的位置
object
确定Block对象上所显示数字或图像
(2)方法见表7;
表7类Block的方法
方法名
功能
setAtPoint(Point)
设置自己所在的“点“,即设置point对象的引用
getAtPoint()
返回自己所在的“点“,即返回point对象的引用
setobject(object)
设置自己的成员object
paintComponent(Graphics)
绘制Image对象
(3)源代码见文件Block.java
2.2.4.Point类
成员变量见表8:
表8类Point的成员变量
名称
成员变量描述
x、y
两个int型数据,分别用来表示容器坐标的x轴坐标和y轴坐标值
haveBlock
Boolean型数据,如果有Block对象在该Point对象上时该数据为ture,否则为false
block
用来存放一个Block对象的引用,标明该Block对象在当前Point对象上
(2)方法见表9;
表9类Point的方法
方法名
功能
Point(int,int)
构造方法,用来创建Point对象
isHaveBlock()
返回一个boolean型数据,如果当前Point对象上有Block对象返回ture,否者返回false
setHaveBlock(boolean)
根据参数的值设置当前Point对象上是否有Block对象
getX()、getY()
返回其中的x轴坐标和y轴坐标
epuals(TowerPoint)
判断当前Point对象是否和参数指定的Point对象相同
setBlock(Block)
将参数指定的Block对象放在当前Point对象上
getBlock()
返回当前Point对象上的Block对象
(3)源代码见文件Point.java
2.2.5.HandleImage类
成员变量见表10:
表10类HandleImage的成员变量
名称
成员变量描述
imageWidth、imageHeight
两个int型数据,分别用来存储图像的宽和高
tool
Toolkit对象,用来获取Image对象
(2)方法见表11;
表11类HandleImage的方法
方法名
功能
HandleImage()
构造方法,负责完成HandleImage对象的初始化
getImages(Image,int,int)
将参数指定的Image图像分解成若干个更小的图像,并将这些图像存放到一个Image数组中,然后返回该数组。
(3)源代码见文件HandleImage.java
2.2.6.HandleMove类
成员变量见表12:
表12类HandleMove的成员变量
名称
成员变量描述
point
Point类型的二维数组,用来存放puzzlepad魔板容器中point数组的引用
spendTime
用来记录用户玩魔板游戏的用时
recordTime
计时器
showTime
JTexField创建的文本框,负责显示用时
vrify
VerifySuccess声明的对象,用来存放PuzzlePad魔板中verifySuccess的引用
(2)方法见表13;
表13类HandleMove的方法
方法名
功能
HandleMove()
构造方法,用来创建handleMove对象
setPoint(Point[][])
将puzzlepad魔板容器的point对象的引用传递给该对象中的point,以便handleMove移动Block对象
setVerifySuccess(VerifySuccess)
将puzzlepad魔板容器的verifySuccess对象的引用传递给该对象中的verify,verify对象负责判断魔板中的Block对象是否成功的按要求排列完毕
InitSpendTime()
将spendTime的值设置为0
MousePressed(KeyEvent)
执行鼠标左键事件,根据规则移动Block对象
MouseReleased(MouseEvent)
判断用户是否已经成功地将Block对象按要求排列完毕
actionPerformed(ActionEvent)
显示用户当前的用时
(3)源代码见文件HandleMove.java
2.2.7.VerifySuccess类
成员变量见表14:
表14类VerifySuccess的成员变量
名称
成员变量描述
point
Point类型的二维数组,用来存放puzzlepad魔板容器中point数组的引用
object
Object数组,其单元可以存放任何对象
(2)方法见表15;
表15类VerifySuccess的方法
方法名
功能
HandleMove()
构造方法,用来创建handleMove对象
setPoint(Point[][])
将puzzlepad魔板容器的point对象的引用传递给该对象中的point,
setPoint(Object[][])
将puzzlepad魔板容器的Integer数组或Image数组的引用传递给该对象中的object
isSuccess()
判断用户是否按要求成功排列魔板中的方块,成功isSuccess()方法返回ture,否则返回false
(3)源代码见文件VerifySuccess.java
2.2.8.Record类
成员变量见表16:
表16类Record的成员变量
名称
成员变量描述
time
用户的用时
YourName
用户用来输入名字的文本框
enter和cancel
按钮对象,单击enter可以保存成绩,单击cancel可以放弃保存成绩
gradeFile
级别文件
(2)方法见表17;
表17类Record的方法
方法名
功能
Record()
构造方法,用来创建record对象
setGradeFile(File)
当用户成功后,画面上弹出record对话框,将调用setGradeFile(File)方法将级别文件传递给Record对话框gradeFile。
setTime(int)
将记录的用时传递给Record对话框gradeFile。
actionPerformed(ActionEvent)
当单击enter时,将用户的文本框yourName中输入的名字以及time的值保存到gradeFile文件中,当单击cancle按钮时,其操作是关闭当前对话框。
(3)源代码见文件Record.java
2.2.9.people类
成员变量见表18:
表18类people的成员变量
名称
成员变量描述
time
用户的用时
name
用户的名字
(2)方法见表19;
表19类people的方法
方法名
功能
getTime()
返回time
getName()
返回name
compareTo(Object)
Comparerable接口中的方法,其操作是确定people对象的大小关系
(3)源代码见文件people.java
2.2.10.ShowRecordDialog类
成员变量见表20:
表20类ShowRecordDialog的成员变量
名称
成员变量描述
gradeFile
对话框要读取的文件,该文件存储成绩。
clear
注册了ActionEvent事件的按钮
showArea
文本区显示对话框从gradeFile文件中读取的成绩
treeSet
负责将程序按高低排序
(2)方法见表21;
表21类ShowRecordDialog的方法
方法名
功能
ShowRecordDialog()
构造方法,用来创建showDialog对象
setGradeFile(File)
当用户选择“查看排行榜”菜单中的菜单项时,将调用setGradeFile(File)方法将相应级别文件传递给gradeFile。
showRecord()
根据读取的名字和该名字的对应成绩,创建一个people对象,并将该people对象存放在treeSet树集中。
actionPerformed(ActionEvent)
当单击clear按钮时,所执行的操作是清楚gradeFile文件中的内容。
(3)源代码见文件ShowRecordDialog.java
3.设计结果与分析
程序运行图及相关源程序:
游戏启动后的初始界面图3:
图3初始界面
选择难度级别,按开始后就可进入游戏画面如图4:
图4选择难度级别
选择图像:
新图像或默认图像
图5选择新图像或默认图像
游戏成功后提示你输入名字记录至排行榜如图6:
图6记录成绩到排行榜
输入名字后,按确定就提示成功了如图7:
图7成功了
查看排行榜功能如图8所示:
图8查看排行榜功能
显示排行榜功能如图9所示
图9排行榜显示功能(初级)
图9排行榜显示功能(高级)
该程序需要改进的地方:
1、在变量的访问权限设置不到位,当时为了保证程序的运行通过,好多本来私有的变量都定义为公有,对于类的成员保护做的不够。
2、可以在主界面上加一个游戏规则说明的功能。
3、给程序添加背景音乐。
4、程序界面风格设计还有待改进
4.设计体会
经过这段时间的学习我收获不小,总结起来有如下几点:
1、更进一步理解了JAVA编程的思想,体会到JAVA与其他编程语言的不同。
对于这种面向对象的编程思想,使刚入门的人很快就能写出自己的程序。
2、锻炼了自己的动手和自学能力,在编程中有许多类和方法在课本中没有学到和提及到。
都是通过自己查帮助文档,或通过网络进行学习和了解到的。
和别人在一起交流是一件很快了的事。
3、体会到写程序最重要的是程序思想,而不是单纯的写代码。
如何解决类之间的关联和继承关系,如何组织类是很关键的。
此外对于接口和变量的私有还是公有,以及参数传递等方面也收获不小。
4、在实验的过程中,总有一些错误,必须仔细检查并结合课本知识进行对比、揣摩才能找出错误的语句代码,进而进行改正才能得到需要的结果,最容易忽略的问题就是文件的头文件了,一不小心就会出现一大堆错误,所以一定要做好实验准备,以免越改越乱。
5.参考文献:
耿祥义张跃平java2实用教程清华大学出版社
耿祥义张跃平java课程设计清华大学出版社
6.相关源程序:
PuzzleGame
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
importjavax.swing.filechooser.*;
publicclassPuzzleGameextendsJFrameimplementsActionListener{
PuzzlePadpuzzlePad;
JMenuBarbar;
JMenugradeMenu,choiceImage,resultMenu;///////////
JMenuItemoneGrade,twoGrade,newImage,defaultImage;
JMenuItemoneGradeResult,twoGradeResult;////////
FilefileOneGrade,fileTwoGrade,gradeFile;//////////
JRadioButtondigitPlay,imagePlay;
ButtonGroupgroup=null;
//Recordrecord=null;
ShowRecordDialogshowDiolag=null;///////////
JButtonstartButton;
Imageimage;
Toolkittool;
publicPuzzleGame(){
fileOneGrade=newFile("初级魔板游戏排行榜.txt");//////////
fileTwoGrade=newFile("高级魔板游戏排行榜.txt");//////////
tool=getToolkit();
bar=newJMenuBar();
gradeMenu=newJMenu("选择级别");
oneGrade=newJMenuItem("初级");
twoGrade=newJMenuItem("高级");
gradeMenu.add(oneGrade);
gradeMenu.add(twoGrade);
choiceImage=newJMenu("选择图像");
newImage=newJMenuItem("选择一幅新图像");
defaultImage=newJMenuItem("使用默认图像");
choiceImage.add(newImage);
choiceImage.add(defaultImage);
resultMenu=newJMenu("查看英雄榜");/////////////
oneGradeResult=newJMenuItem("初级英雄榜");/////////////
twoGradeResult=newJMenuItem("高级英雄榜");////////////////
resultMenu.add(oneGradeResult);///////////
resultMenu.add(twoGradeResult);//////////////
bar.add(gradeMenu);
bar.add(choiceImage);
bar.add(resultMenu);/////////
setJMenuBar(bar);
oneGrade.addActionListener(this);///////////
twoGrade.addActionListener(this);//////////
newImage.addActionListener(this);
defaultImage.addActionListener(this);
oneGradeResult.addActionListener(this);/////
twoGradeResult.addActionListener(this);/////
startButton=newJButton("开始");
startButton.addActionListener(this);
group=newButtonGroup();
digitPlay=newJRadioButton("数字玩法",true);
imagePlay=newJRadioButton("图像玩法",false);
group.add(digitPlay);
group.add(imagePlay);
puzzlePad=newPuzzlePad();
puzzlePad.setGrade
(1);
puzzlePad.setIsDigitPlay();
add(puzzlePad,BorderLayout.CENTER);
JPanelpNorth=newJPanel();
pNorth.add(digitPlay);
pNorth.add(imagePlay);
pNorth.add(startButton);
pNorth.add(newJLabel("如果图像不能立刻显示,请再单击一次按扭"));
add(pNorth,BorderLayout.NORTH);
add(puzzlePad.getHandleMove(),BorderLayout.SOUTH);
validate();
setVisib
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 课程设计 游戏 功能 实现