java拼图游戏.docx
- 文档编号:10536691
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:30
- 大小:1.84MB
java拼图游戏.docx
《java拼图游戏.docx》由会员分享,可在线阅读,更多相关《java拼图游戏.docx(30页珍藏版)》请在冰豆网上搜索。
java拼图游戏
1设计题目及具体要求
1.1题目:
拼图游戏的开发
1.2题目需求:
此款拼图游戏所要完成的功能如下:
1)具有拼图游戏的基本功能,能通过点击小方块来移动小图片进行排序。
2)游戏具有登录窗口,玩家进入游戏时可输入用户名进入游戏。
3)游戏分为“初级”、“中级”、“高级”三个级别,玩家可以任选其一。
4)游戏有两种类型,“数字玩法”、“图像玩法”,玩家可以任选自己喜欢的一种进行游戏。
5)如果玩家选择图像玩法,可以使用默认的图像,或选择一张玩家自己喜欢的图像进行游戏。
6)选择图像玩法时,游戏提供了所用图像的缩略图。
玩家可以按照缩略图进行拼图。
7)游戏具有背景音乐,玩家也可以选择自己喜欢的一首歌曲作为背景音乐。
如果不想要背景音乐,玩家也可以选择关闭背景音乐。
8)游戏具有英雄榜,玩家可以查看英雄榜,如果玩家成绩排在前三,系统将会提醒玩家输入用户名,记录玩家的成绩。
9)游戏开始后,将记录玩家游戏的时间,并显示出来。
10)玩家在游戏期间可以暂停游戏的执行。
11)系统具有帮助信息,玩家可以查看帮助信息。
此款游戏的重点是游戏界面的设计,以及游戏算法的设计,难点是怎样分割图片,如何加背景音乐和音乐特效等。
此款游戏是在现有拼图游戏的基础上改进而来的,其中增加了数字玩法类型,同时游戏添加有背景音乐,玩家可以选择自己喜欢的背景音乐,另外,此款拼图游戏功能齐全,游戏界面友好。
1.3实现环境和工具简介
集成开发环境:
Eclipse1.6
运行平台;WindowsXP
Java开发工具包:
JDK1.6
JDK1.6开发工具包,包含了开发过程所需的工具程序,Javac,Java,appletviewer以及开发java程序所必须的类库等。
2总体设计
2.1登录模块设计
登陆界面的类图:
Login类:
Login类是负责创建游戏登录窗口,该类含有main方法,程序从此类开始执行。
Login类的成员变量中有四个重要类型的变量:
ImagePanel、JTextField、JButton和HitSound。
ImagePanel类是继承自Panel类的一个带有图片的类。
HitSound是播放背景音乐的一个类。
2.2游戏模块的设计:
游戏界面类图:
PuzzelGame类:
该类是负责创建游戏主界面的类,该类包含了界面设计的、游戏实现的所有相关的东西。
PuzzelGame类的成员变量中有十个主要的对象:
JMenuBar、JMenu、JRadioButton、PuzzelPad、ImagePanel、JButton、JLabel、JList、Image和HitSound。
PuzzelPad类是生成游戏魔板的主要类,代表了游戏魔板。
JMenuBar是游戏界面的菜单栏,JMenu是菜单栏上的许多菜单,JRadioButton用于选择游戏的类型。
JButton用于开始、查看英雄榜、暂停按钮。
JLabel用于现实游戏用时。
Image游戏用于加载的图像。
HitSound用于游戏播放的背景音乐和音乐特效。
PuzzelGame类还负责处理许多的鼠标点击事件等。
2.3游戏主界面中魔板模块的设计
魔板类图:
1)PuzzelPad类:
该类负责创建游戏的魔板,主要成员对象有五个:
Block、Point、DivideImage、HandleMove、Image.这些对象主要的作用将在之后介绍。
2)Block类:
该类是JTextField的一个子类,创建的对象是PuzzelPad的主要成员之一,它主要表示魔板中的方块,即用来存放小图片和处理点击事件的小方块。
3)Point类:
该类主要负责创建确定方块位置的对象,使用Point对象可以确定Block对象在PuzzelPad中的位置,即确定方块在魔板中的位置。
4)DivideImage类:
该类负责将得到的一张图片按照规则切割成许多小图片。
5)HandlMove类:
该类主要负责处理点击魔板中的小方块时的鼠标事件处理以及点击方块时的音乐特效。
6)VerifySuccess类:
该类主要负责验证用户是否按照要求成功的排列好魔板中的方块。
2.4帮助模块的设计
Help类:
该类负责创建用于显示游戏帮助信息的对话框。
2.5关于模块的设计
About类:
该类负责创建用于显示游戏制作信息的对话框。
2.6英雄榜模块的设计
Heros类:
该类负责创建用于显示游戏英雄榜信息的对话框。
2.7图像缩略图像模块的设计
ImagePuzzel类:
该类继承自JPanel负责显示所玩游戏的缩略图。
2.8背景音乐模块的设计
HitSound类:
该类负责接收一首歌曲并播放、用于游戏添加背景音乐和点击方块时的音乐特效。
3详细设计与实现
3.1详细设计
1、Login类:
继承自JFrame实现ActionListener接口
1)成员变量:
①:
ImagePanel给登录界面添加一张图片;
②:
JTextField玩家输入用户名;
③:
JButton登录按钮;
④:
HitSound添加背景音乐。
2)成员方法:
①:
Login()构造方法,用于构造登录窗口,完成登录窗口的初始化;
②:
actionPerformed(ActionEvente)该方法是实现ActionListener接口中的方法,用于处理点击登录按钮的事件处理;
③:
main(String[]args)主方法是程序的入口。
2、PuzzelGame类:
继承自JFrame类、实现了ActionListener、ItemListener,ListSelectionListener接口
1)成员变量:
①:
JMenuBar它是一个菜单条,用来放入JMenu菜单
②:
JMenu菜单包含有file菜单、level菜单、choiceimage菜单、choicemusic菜单、set菜单、help菜单。
其中file菜单里包含两个菜单项:
about菜单项和exit菜单项;Level菜单里包含三个菜单项:
初级、中级和高级菜单项;choiceimage菜单包含两个菜单项:
选择新图像菜单项和使用默认图像菜单项;choicemusic菜单包含一个菜单项:
选择背景音乐菜单项。
Set菜单包含两个菜单项:
关闭或打开背景音乐菜单项和关闭或打开音乐特效菜单项;help菜单包含一个帮助菜单项;
③:
JRadioButton单选框,选择游戏的类型:
数字玩法和图像玩法
④:
PuzzelPad游戏魔板对象。
⑤:
ImagePuzzel显示图像的完整缩略图的对象。
⑥:
JButton开始按钮,查看英雄榜按钮和暂停按钮对象。
⑦:
Image游戏中所用到的图片对象。
⑧:
JList显示可以选择的背景音乐的对象。
2)成员方法:
①:
PuzzelGame():
是构造方法,用于构造游戏主窗口,完成游戏界面的初始化;
②:
setMusic(HitSoundmusic)此方法用于设置所要添加的背景音乐。
③:
actionPerformed(ActionEvente)用于实现开始按钮、英雄榜按钮、暂停按钮等的事件处理。
④:
valueChanged(ListSelectionEvente)用于处理玩家重新选择背景音乐时的事件处理。
⑤:
itemStateChanged(ItemEvente)用于打开或关闭背景音乐和音乐特效的事件处理。
3、PuzzelPad类:
继承自ImagePanel
1)成员变量:
①:
Block[][]魔板中的方块。
②:
Point[][]魔板中方块的位置。
③:
DivideImage分割一张大图成许多小图。
④:
HandleMove处理点击方块的事件处理的对象。
⑤:
VerifySuccess判断小图片是否按顺序排好的对象。
2)成员方法:
①:
PuzzelPad()是构造方法,用于构造游戏魔板,完成游戏魔板的初始化;
②:
getHandleMove()用于得到一个处理点击方块事件处理的对象。
③:
setImage(Imageimage)用于设置所玩游戏的图像。
④:
setGrade(intgrade)用于设置游戏级别。
⑤:
Init()用于设置方块的个数、位置等信息。
⑥:
setDigitPlay()当选择数字玩法时,设置方块上面显示数字。
⑦:
setImagePlay()当选择图像玩法是,设置方块上面显示图像。
4、Block类:
继承自JTextField
1)成员变量:
①:
Point标识方块的位置。
②:
Object方块上显示的是数字还是图像。
2)成员方法:
①:
Block()用于方块的初始化。
②:
setAtPoint(Pointp)用于设置方块的位置。
③:
getAtPoint()用于得到方块的位置。
④:
setObject(Objectobject)用于设置方块对象。
⑤:
getObject()用于得到方块对象。
⑥:
paintComponent(Graphicsg)用于在方块上绘制图像。
5、Point类:
1)成员变量:
①:
x,y此点的x、y坐标。
②:
haveBlock用于标识这点有没有方块。
③:
Block此点对应的方块。
2)成员方法:
①:
Point(intx,inty)构造方法,初始化此点。
②:
isHaveBlock()用于确定这点有没有方块。
③:
setHaveBlock(booleanbool)设置此点对应的方块。
getblock()用于得到此点的方块。
④:
isequal(Pointp)确定两点是否是同一个点。
⑤:
getX()、getY()得到此点的x、y坐标。
6、DivideImage类:
继承自JComponent
1)成员变量:
①:
imageWidth,imageHeight游戏所用图片的宽和高。
2)成员方法:
①:
crop(Imageimg,inti,intj,intw,inth)按照所给参数截取小图片。
②:
getImages(Imageimg,introws,intcolums)将一张大图分割成一定数目的小图片。
7、HandlMove类:
继承自ImagePanel,实现MouseListener,ActionListener接口。
1)成员变量:
①:
Point[][]标识所有方块的位置。
②:
Timer计时器,记录玩游戏的时间。
2)成员方法:
①:
HandleMove()构造方法,完成初始化工作。
②:
setPoint(Point[][]p)设置所有方块的位置。
③:
mousePressed(MouseEvente)处理鼠标按下事件。
④:
mouseReleased(MouseEvente)处理鼠标释放事件。
8、VerifySuccess类:
1)成员变量:
①:
Point[][]魔板中方块的位置。
②:
Object[]魔板对象。
2)成员方法:
①:
setPoint(Point[][]point)设置方块的位置
②:
setObject(Object[]object)设置方块对象。
③:
isSuccess()判断下图片是否排好顺序。
9、ImagePanel类:
继承自JPanel
1)成员变量:
①:
Image面板中所添加的图片。
2)成员方法:
①:
ImagePanel(ImageIconimageicon)构造方法,初始化面板和图像。
②:
paintComponent(Graphicsg)在面板上绘制图像。
10、HitSound类:
实现Runnable接口。
1)成员变量:
①:
String音乐文件的名字。
2)成员方法:
①:
HitSound(Stringfilename)构造方法,初始化音乐。
②:
playSound()播放音乐。
③:
start()线程开始。
④:
run()实现Runnable接口中的抽象方法。
⑤:
stop()停止线程。
11、Help类:
继承自JDialog
1)成员变量:
①:
JTextArea帮助信息。
2)成员方法:
①:
Help(JFramef)构造方法,初始化帮助对话框。
12、About类:
1)成员变量:
①:
JTextArea关于信息。
2)成员方法:
①:
About(JFramef)构造方法,初始化关于对话框。
13、Heros类:
1)成员变量:
①:
JTextArea英雄榜信息。
2)成员方法:
①:
Heros(JFramef)构造方法,初始化英雄榜对话框。
14、ImagePuzzel类:
1)成员变量:
继承自JPanel
①:
Image面板中所添加的图片。
2)成员方法:
①:
ImagePuzzel(Imageimage)构造方法,初始化面板和图像。
②:
paintComponent(Graphicsg)在面板上绘制图像。
3.2主要类的实现
1)Login类:
publicclassLoginextendsJFrameimplementsActionListener{
privateImagePanelimagepanel;//加载图片面板
privateJButtonbtn;//登录按钮
privateJTextFieldtf;//用户名文本框
HitSoundsound=newHitSound("sound//海尔兄弟.wav");//背景音乐
//构造方法,用于构造登录窗口,完成登录窗口的初始化;
publicLogin(){
super("拼图游戏");
sound.setCount(5);//设置背景音乐循环播放次数
btn=newJButton("登录",newImageIcon("Image//卡通.jpg"));
btn.addActionListener(this);
btn.setForeground(Color.BLUE);
tf=newJTextField(6);
tf.setBackground(Color.WHITE);
btn.setBackground(Color.white);
//添加图片面板
imagepanel=newImagePanel(newImageIcon("Image//login.gif"));
Containercon=getContentPane();
con.add(imagepanel,BorderLayout.CENTER);
imagepanel.setLayout(newGridBagLayout());
//布局管理方式
GridBagConstraintsconstraints=newGridBagConstraints();
imagepanel.add(tf,constraints);
imagepanel.add(btn,constraints);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkittoolkit=getToolkit();
DimensionwndSize=toolkit.getScreenSize();
pack();
//设置窗口的位置、可见性
this.setLocation((wndSize.width-imagepanel.getWidth())/2,
(wndSize.height-imagepanel.getHeight())/2);
this.setResizable(false);
this.setVisible(true);
}
//登录按钮的事件处理
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==btn){
dispose();
PuzzelGamepuzzelgame=newPuzzelGame();
puzzelgame.setMusic(sound);
repaint();
}
}
//主方法,程序的执行入口
publicstaticvoidmain(String[]args){
newLogin();
}
}
2)PuzzelGame类
//其中的许多代码都省略了
PublicclassPuzzelGameextendsJFrameimplementsActionListener,ItemListener,ListSelectionListener{
privateJMenuBarbar;//菜单条
privateJMenulevel,imagetype,help,set,file,choicemusic;
privateButtonGrouplevelgroup,typegroup;
//添加的背景音乐
String[]str={"s.h.e-锁住时间.wav","hero.wav","s.h.e-shero.wav",
"s.h.e-半糖主义-she.wav","s.h.e-紫藤花.wav","飞轮海-心疼你的心疼.wav",
"海尔兄弟.wav","海鸣威-老人与海.wav","林志颖-稻草人.wav"};
JMenuchoicemusicitem;
PuzzelPadpuzzel;
ImagePuzzelimagepuzzel;
ImagePaneleastpanel;
JPanelsouthpanel;
JButtonherobtn,startbtn;
JLabeltimerlabel;
JListlist;
Imageimage,defaultimage;
intdistance=56;
LevelHanderlevelhander;
Toolkittoolkit;
HitSoundsound;
PuzzelGame(){
super("游戏界面");
toolkit=getToolkit();
//获得游戏所用图片
try{
image=toolkit.createImage(newFile("Image//game2.JPG").toURI().toURL());
}catch(IOExceptione){
e.printStackTrace();
}
MediaTrackermediatracker=newMediaTracker(this);
mediatracker.addImage(image,0);
try{
mediatracker.waitForID(0);
}catch(InterruptedExceptione){
e.printStackTrace();
}
defaultimage=image;
puzzel=newPuzzelPad();
puzzel.setDigitPlay();
Containercon=getContentPane();
con.setLayout(null);
puzzel.setBounds(0,distance,7*56,7*56);
con.add(puzzel);
//显示游戏时间
con.add(puzzel.getHandleMove());
eastpanel=newImagePanel(newImageIcon("Image//btn.gif"));
startbtn=newJButton("开始");
herobtn=newJButton("英雄榜");
//文件
file=newJMenu("文件");
aboutitem=newJMenuItem("关于");
exititem=newJMenuItem("退出");
//选择级别
levelhander=newLevelHander();
level=newJMenu("级别");
//选择玩的类型
digitPlay=newJRadioButton("数字玩法",true);
imagePlay=newJRadioButton("图像玩法",false);
//选择图像
imagetype=newJMenu("选择图像");
choiceitem=newJMenuItem("选择一张新图片",newImageIcon("Image//level1.jpg"));
defaultitem=newJMenuItem("使用默认图片",newImageIcon("Image//level2.jpg"));
//选择背景音乐
choicemusic=newJMenu("选择歌曲");
choicemusicitem=newJMenu("选择背景音乐");
list=newJList(str);
//设置
set=newJMenu("设置");
JMenumusic=newJMenu("背景音乐");
JMenueffect=newJMenu("音乐特效");
radiomusicon=newJRadioButtonMenuItem("开",true);
radiomusicoff=newJRadioButtonMenuItem("关");
radioeffecton=newJRadioButtonMenuItem("开",true);
radioeffecton.setFont(newFont("Serif",Font.PLAIN,15));
radioeffectoff=newJRadioButtonMenuItem("关");
//帮助
help=newJMenu("帮助");
helpitem=newJMenuItem("帮助");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(11*distance,10*distance);
this.setResizable(false);
this.setLocation(350,150);
this.setVisible(true);
}
publicvoidsetMusic(HitSoundmusic){
this.sound=music;
}
publicvoida
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 拼图游戏
