基于Java的拼图游戏设计含源文件.docx
- 文档编号:18569019
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:41
- 大小:456.54KB
基于Java的拼图游戏设计含源文件.docx
《基于Java的拼图游戏设计含源文件.docx》由会员分享,可在线阅读,更多相关《基于Java的拼图游戏设计含源文件.docx(41页珍藏版)》请在冰点文库上搜索。
基于Java的拼图游戏设计含源文件
目录
1开发环境及相关技术的介绍1
1.1开发环境1
1.2Java语言特点1
2游戏实现功能解析及界面1
2.1游戏规则介绍1
2.2游戏实现功能2
2.2.1主窗口界面2
2.2.2主窗口菜单3
2.2.3游戏过程中的出现的相关窗体6
3游戏程序实现8
3.1程序类主要功能介绍8
3.2程序源代码9
4小结27
基于Java的拼图游戏设计
1开发环境及相关技术的介绍
1.1开发环境
操作系统:
MicrosoftWindowsXP
程序语言:
Java
开发环境:
JDK-6u6-windows-i586-P
1.2Java语言特点
1).平台无关性
Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。
Java的数据类型与机器无关。
2).安全性
Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。
它提供了安全管理器,防止程序的非法访问。
3).面向对象
Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。
4).分布式
Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。
5).健壮性
Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。
Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。
2游戏实现功能解析及界面
2.1游戏规则介绍
1)本游戏是一个Java语言的拼图游戏,有一个格子是空的,其他格子内随机放置由要拿来拼图的图片切割成的若干个小图片,图片的切割按照一定的公式计算,因为,该通过单击任意一个与空格子相邻的方块可以把该方游戏中设有拼图游戏的等级,根据不同的等级,按照公式会切割成不同的小图片块数。
2)在开始游戏之前,可以选择游戏等级后再点击“开始”菜单里的“新游戏”,进行拼图游戏,通过将空格旁边的小图片移入空格子内(不断的移动方块),来实现拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。
3)游戏拼完后,会弹出一个“信息”框,显示你玩游戏所用的步数与时间,点击“确定”后,会弹出一个“输入”框,可以在里面输入游戏者的姓名,单击“确定”后会弹出游戏的记录框。
4)游戏的简单规则在游戏界面的“关于”菜单内的“帮助”信息框内已经简单介绍了。
游戏前可以先预览看看。
2.2游戏实现功能
2.2.1主窗口界面
1)游戏初始状态
当游戏刚运行时,会出现如下界面,本游戏中已经存在了三张图片,如过游戏者想拼自己感兴趣的图片的话,可以将自己的图片放入到“background”(背景图片)文件夹中,再进行“选择”->“背景图片”中选择你自己的图片,然后选择“等级”->“困难”或“普通”或“简单”,进行等级选择,最后选择“开始”->“新游戏”就可以拼自己想拼的图了。
初始窗口如图1所示:
图1游戏初始窗口
2)游戏进行状态
当游戏者选择好图片与等级后,就可以进行拼图游戏了及进入游戏的进行状态。
其游戏进行状态如图2所示:
图2游戏进行状态
3)游戏暂停状态
当游戏者,在游戏过程中半途暂停游戏的话,将出现如图3所示的游戏暂停状态的界面。
当游戏者又想继续游戏时,直接单击界面上的“继续”字样,就可以继续游戏了。
图3游戏暂停状态
2.2.2主窗口菜单
在游戏的主窗口菜单中包括如下几个菜单:
(1)“开始”菜单。
包括了,“新游戏”、“成绩记录”、“图片预览”、“退出游戏”。
如图4所示。
“新游戏”:
单击可以开始游戏,如图2所示游戏进行状态。
“成绩记录”:
单击可以查看游戏者的游戏成绩记录。
如图5所示。
初始的成绩记录。
“图片预览”:
在游戏过程中可以单击预览图片,对照着拼,如图6所示。
“退出游戏”:
游戏者要结束游戏可直接单击退出游戏。
图4开始菜单图5初始成绩记录
图6图片预览
(2)“选择”菜单。
包括了,“等级”、“背景图片”。
如图7所示。
当运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,界面如图8所示,这是可以按照“初始状态”界面上的提示进行操作。
若正常的有“background”在主程序路径下的话,运行游戏选择背景图片的话,就可以选择图片了,界面如图9所示。
“等级”:
在游戏者开始游戏之前,要进行游戏等级选择,共有困难、普通、简单三种选择。
其图片的切割块数,会根据选择的等级不同,而有所不同。
简单的是一共8个小图片。
“背景图片”:
这里保存了所要拼的所有图片。
在游戏前要进行选择。
图7图8
图9
(3)“关于”菜单。
包括了“帮助”、“关于”两个下拉菜单。
如图10所示。
图10“关于”菜单
“帮助”:
在游戏时,可以单击查看游戏的简单规则,界面如图11所示。
“关于”:
可查看该游戏的版本、作者、与作者的Email的相关信息,界面如图12所示。
图11“帮助”信息框
图12下拉单“关于”的消息框
2.2.3游戏过程中的出现的相关窗体
(1)提示信息窗口
当游戏者运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,若此时直接“开始”->“新游戏”,将会弹出如下提示信息框。
如图13所示。
图13提示信息框
(2)拼图成功界面
若选择abc.jpg图片拼图时,若拼图成功,界面如图14所示。
图14拼图成功
(3)成绩记录输入框
当游戏者完成拼图游戏后,将出现一个成绩记录框(“输入”框),输入游戏者的姓名。
如图15所示。
输入后单击确定按钮,将弹出总的成绩记录框。
如图16所示。
图15(a)输入前
图15(b)输入后
图16成绩记录框
3游戏程序实现
3.1程序类主要功能介绍
该游戏程序中包括11个类。
包括:
ButtonClick.class、CardFrame.class、GameOver.class、Data.class、Grades.class、Matrix.class、MenuFrame.class、point.class、Puzzle.class、ShowImage.class、Split.class。
其中主要的类实现的功能如下:
1)ButtonClick.class
该类主要是实现鼠标事件,让玩家在用鼠标点击能够移动拼图的小图片,移动到周围空格的地方
2)CardFrame.class
该类主要实现,初始界面的相关提示信息。
3)GameOver.class
该类主要实现游戏过程中的计时、暂停、结束等功能,游戏结束时的信息。
4)Data.class
该类主要实现保存游戏者的游戏成绩记录的相关数据。
5)Grades.class
该类主要实现成绩记录的初始化,在拼图成功后可记录游戏者姓名的功能,并直接提取等级、步数与时间等信息的功能。
保存成绩记录信息,以便游戏者查看。
6)MenuFrame.class
该类主要实现有主菜单与子菜单的功能。
并设置相关的快捷键功能。
7)Puzzle.class
该类是该游戏程序的主程序,从游戏界面大小到游戏过程中出现的所有信息框等相关功能都都到了实现,调用相关类实现其功能。
8)ShowImage.class
该类主要实现图片的提取与切割的功能。
3.2程序源代码
1)Arg.java
publicinterfaceArg
{
publicstaticfinalStringpath="background";
publicstaticfinalStringrc="Game.rc";
}
2)ButtonClick.java
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JOptionPane;
publicclassButtonClickimplementsActionListener
{
privateJButton[][]button;
privatepointpint;
privateintrow;
privateintcal;
privateint[][]matrix;
privateGameOvergOver;
privatebooleanend;
publicButtonClick(JButton[][]b,pointp,int[][]m,intr,intc,GameOverg)
{
button=b;
pint=p;
matrix=m;
row=r;
cal=c;
gOver=g;
end=false;
}
publicvoidactionPerformed(ActionEvente)
{
if(end||!
pint.neighbor(row,cal))
return;
intr=pint.getRow();
intc=pint.getCal();
button[r][c].setIcon(button[row][cal].getIcon());
button[row][cal].setIcon(null);
pint.set(row,cal);
intt=matrix[r][c];
matrix[r][c]=matrix[row][cal];
matrix[row][cal]=t;
end=gOver.judge();
}
}
3)CardFrame.java
importjava.awt.BorderLayout;
importjava.awt.CardLayout;
importjava.awt.Container;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowEvent;
importjava.awt.event.WindowAdapter;
importjavax.swing.JButton;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
publicabstractclassCardFrameextendsMenuFrame
{
privateCardLayoutcard;
privateContainercon;
protectedJPanel[]panel={
newJPanel(),newJPanel()
};
publicCardFrame()
{
con=this.getContentPane();
card=newCardLayout();
con.setLayout(card);
panel[0].setLayout(null);
JLabellabel;
label=newJLabel("请输入你的图片到");
label.setBounds(10,15,190,30);
panel[0].add(label);
label=newJLabel("\"背景图片\"文件夹。
\n");
label.setBounds(10,30,190,45);
panel[0].add(label);
label=newJLabel("单击\"选择->背景图片\"");
label.setBounds(10,50,190,65);
panel[0].add(label);
label=newJLabel("选择图片。
\n");
label.setBounds(10,65,190,80);
panel[0].add(label);
label=newJLabel("接着,单击\"开始->新游戏\"可以");
label.setBounds(10,85,190,100);
panel[0].add(label);
label=newJLabel("开始游戏。
");
label.setBounds(10,100,190,115);
panel[0].add(label);
panel[1].setLayout(newBorderLayout());
JButtonbutton=newJButton("继续");
button.addActionListener(newActionListener()
{
publicvoidactionPerformed(ActionEvente)
{
FrameGetFocus();
}
}
);
panel[1].add(button,BorderLayout.CENTER);
con.add(panel[0],"游戏");
con.add(panel[1],"暂停");
card.show(con,"游戏");
this.addWindowListener(newWindowAdapter()
{
publicvoidwindowDeactivated(WindowEvente)
{
FrameLostFocus();
}
}
);
}
protectedvoidnextCard()
{
card.next(con);
}
protectedabstractvoidFrameLostFocus();
protectedabstractvoidFrameGetFocus();
}
4)GameOver.java
importjava.util.Date;
publicclassGameOver
{
privatebooleangameOver;
privatebooleanstop;
privateint[][]matrix;
privatePuzzleMain;
privateintstep;
privatelongnow;
privatelongcountTime;
publicGameOver(Puzzlefrm)
{
Main=frm;
}
publicvoidstart(int[][]m)
{
gameOver=false;
matrix=m;
step=0;
Dated=newDate();
now=d.getTime();
stop=false;
countTime=0;
}
publicbooleanjudge()
{
if(gameOver)
returntrue;
step++;
intc=1;
for(i
nti=0;i for(intj=0;j if(matrix[i][j]! =(c++)) returnfalse; Dated=newDate(); countTime+=d.getTime()-now; Main.endGame(); return(gameOver=true); } publicvoidpause() { Dated=newDate(); if(stop) now=d.getTime(); else countTime+=d.getTime()-now; stop=! stop; } publicintgetStep() { returnstep; } publiclonggetTime() { returncountTime/1000; } } 5)Grades.java importjava.io.File; importjava.io.PrintStream; importjava.util.Scanner; importjavax.swing.JOptionPane; classData { publicStringname; publicinttime; publicintstep; } publicclassGrades { privatePuzzleapp; privateData[]data={ newData(), newData(), newData() }; publicGrades(Puzzlem) { app=m; } privatevoidcreatData() { try { Filefile=newFile(Arg.rc); if(file.exists()) return; file.createNewFile(); PrintStreamfout=newPrintStream(Arg.rc); fout.printf("%s%d%d\n","风铃",888888,666666); fout.printf("%s%d%d\n","天使",777777,444444); fout.printf("%s%d%d\n","撒旦",555555,566666); fout.close(); } catch(Exceptione) { JOptionPane.showMessageDialog(null,Arg.rc+"hasbroken! "); return; } } privatevoidreadData() { try { Filefile=newFile(Arg.rc); Scannercin=newScanner(file); data[0].name=cin.next(); data[0].time=cin.nextInt(); data[0].step=cin.nextInt(); dat a[1].name=cin.next(); data[1].time=cin.nextInt(); data[1].step=cin.nextInt(); data[2].name=cin.next(); data[2].time=cin.nextInt(); data[2].step=cin.nextInt(); } catch(Exceptione) { JOptionPane.showMessageDialog(null,Arg.rc+"can'tread! "); } } publicvoidset(intt,ints) { inttype=app.getType(); creatData(); readData(); if(t>data[type].time||(t==data[type].time&&s>=data[type].step)) return; data[type].name=JOptionPane.showInputDialog(null,"你打破了记录! \n请输入你的名字。 "); data[type].time=t; data[type].step=s; try { PrintStreamf=newPrintStream(Arg.rc); f.printf("%s%d%d\n",data[0].name,data[0].time,data[0].step); f.printf("%s%d%d\n",data[1].name,data[1].time,data[1].step); f.printf("%s%d%d\n",data[2].name,data[2].time,data[2].step); f.close(); } catch(Exceptione) { JOptionPane.showMessageDialog(null,Arg.rc+"hasbroken! "); } show(); } publicvoidshow() { try { creatData(); readData(); Stringtitle="".format("%8s%15s%8s%8s\n","等级","姓名","时间","步数"); Stringh="".format("%8s%15s%8d%8d\n","困难",data[0].name,data[0].time,data[0].step); Stringn="".format("%8s%15s%8d%8d\n","普通",data[1].name,data[1].time,data[1].step); Stringe="".format("%8s%15s%8d%8d\n","简单",data[2].name,data[2].time,data[2].step); JOptionPane.showMessageDialog
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Java 拼图游戏 设计 源文件
![提示](https://static.bingdoc.com/images/bang_tan.gif)