java课程设计报告拼图游戏文档格式.docx
《java课程设计报告拼图游戏文档格式.docx》由会员分享,可在线阅读,更多相关《java课程设计报告拼图游戏文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
第三个拼图全图预览..............................................................................21
一、题目介绍
1、题目:
拼图游戏设计
2、任务:
利用java的图形用户界面设计,设计一个拼图游戏界面,能够实现基本的游戏功能。
3、要求:
(1)游戏者可以选择不同的图片。
(2)按完成的时间计算成绩。
(3)记录拼图完成的总步数。
二、需求分析
拼图游戏是一个简单的小程序,游戏规则如下:
将一张大图打散成9张小图,然后在游戏里任意挑8张图,贴在3行3列的矩阵中的任意位置。
通过鼠标或键盘的方向键移动打乱的8张图片,让其复原成原来的顺序,玩家就胜利了,游戏就结束了。
在游戏结束之后,算出玩家的得分。
三、概要设计
1、功能分析
由于要计算游戏的时间,需要引入线程,通过实现Runnable接口和创建Thread类来实现线程的功能。
使用多线程机制来计算时间的流逝。
引入AWT绘图包,实现图片的绘制。
引入事件处理机制,要求对鼠标事件,键盘事件进行相应,实现移动图片,预览全图等功能。
按键“Y”实现临时的原图整体预览。
按键“1或者2或者3”实现大图选择、
2、界面初始化
调用publicvoidinit()通过接收html数据,加载三张源图片,安装媒体监视器和鼠标键盘监听器,实现界面初始化;
调用publicvoidinitData()将加载的一张大图分割成九个随机分布的小图部分;
调用publicvoidpaint(Graphicsg)划分提示信息区域和拼图区域;
3、事件处理
(1)鼠标事件
调用publicvoidmouseClicked(MouseEvente)方法实现鼠标事件处理。
调用PublicintdirectionCanMove(intnCol,intnRow)方法检测那个方向没有拼图而可以向之移动。
调用publicvoidmove(intnCol,intnRow,intnDirection)方法实现鼠标激活拼图移动。
(2)键盘事件
调用publicvoidkeyPressed(KeyEvente)方法实现键盘事件处理。
调用publicvoidinitImageAgain(intnImgNo)方法实现重新加载另一张大图。
调用publicbooleanmove(intnDirection)方法实现判断指定拼图是否可以往方向nDirection移动。
4、状态判断
动过调用publicvoidcheckStatus()方法来
检测拼图状态,判断是否拼图成功,确定游戏是否结束。
5、附加功能
调用publicvoidrun()方法,给游戏过程添加计时进程。
6、程序流程图
四、详细设计
1、编写.html代码
<
html>
head>
metahttp-equiv="
Content-Type"
content="
text/html;
charset=gb2312"
>
title>
拼图游戏
/title>
/HEAD>
body>
hr>
这是一个拼图游戏。
玩家应该将打散的小图拼成一张大图。
br>
玩家可以通过鼠标和键盘来移动小图,移动的次数和拼成<
一张大图所化费的时间作为游戏得分的依据。
成绩=1000-时间(秒)-移动步数*10<
按F1键重新开始该游戏,按Y健可以预览整个的图片
appletcode="
pintu.class"
width="
480"
height="
360"
!
--param标签NumOfImgparam的标签表示有多少张图片
剩下的param标签为每张图的名字
-->
paramname=NumOfImgvalue="
3"
paramname=Image1value="
pintu"
paramname=Image2value="
pintu2"
paramname=Image3value="
pintu3"
/applet>
/body>
/html>
2、
1、界面设计和附加功能
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
import.*;
publicclasspintuextendsAppletimplementsMouseListener,KeyListener,Runnable
{
Image[]m_Image=newImage[9];
//9个用来装入每个拼图的图片对象
Imagem_ImgAll;
//总的大图片
intm_nImageNo[][]=newint[3][3];
////标志现在各个拼图的排列情况
finalintNO_IMAGE=-1;
//此位置没有拼图,表示空白拼图
finalintIMAGE_WIDTH=120;
//每张拼图的宽
finalintIMAGE_HEIGHT=120;
////每张拼图的高
finalintDIRECTION_UP=1;
finalintDIRECTION_DOWN=2;
finalintDIRECTION_LEFT=3;
finalintDIRECTION_RIGHT=4;
finalintDIRECTION_NONE=-1;
finalintDELTAX=120;
//标志提示信息区的宽度
booleanbWantStartNewGame=false;
//游戏是否结束,是否需要开始新游戏
intnStep=0;
//已经走的步数
intnTime=0;
//已经玩过的时间,以秒为单位
ThreadthTimer;
//计时器线程
intnScore=0;
//玩家所得的分数
intm_nNumOfImg=0;
//拼图底图所使用的图片的个数
Stringm_sImgName[]=newString[9];
//记录拼图底图的名字
booleanbOnShowAll=false;
//预览的开关
AudioClipm_audioClip1,m_audioClip2;
//装载要播放的声音对象
publicvoidinit()/
{
Stringparam=getParameter("
NumOfImg"
);
try
m_nNumOfImg=Integer.parseInt(param);
}
catch(Exceptione)
m_nNumOfImg=1;
System.out.println("
Can'
tconverttheparam'
snametoint."
for(inti=0;
i<
m_nNumOfImg;
i++)
m_sImgName[i]=getParameter("
Image"
+(i+1))+"
.jpg"
;
//用字符串数组m_sImgName分别保存三个大图及其规范命名:
p
System.out.println(m_sImgName[i]);
System.out.println(param);
MediaTrackermediaTracker=newMediaTracker(this);
//为这个拼图界面设置一个监视器
m_ImgAll=getImage(getDocumentBase(),"
img/"
+m_sImgName[0]);
//从装载总的大图片
mediaTracker