当前位置:文档之家› java_课程设计报告_拼图游戏

java_课程设计报告_拼图游戏

目录一、题目介绍、、、、 (3)1、题目、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、32、任务、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、33、要求、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、3二、需求分析、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、3三、概要设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、41、功能分析、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、42、界面初始化、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、43、事件处理(1)鼠标事件、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、44、事件处理(2)键盘事件、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、55、状态判断、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、56、程序流程图、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、5四、详细设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、61、、html代码设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、62、、java代码设计、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、6五、调试结果、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、19第一个大图得拼图界面、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、19第一个拼图全图预览、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、19第二个大图得拼图界面、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、20第二个拼图全图预览、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、20第三个大图得拼图界面、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、21第三个拼图全图预览、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、21六、心得总结、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、22七、参考资料ﻩ、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、22一、题目介绍1、题目:拼图游戏设计2、任务:利用java得图形用户界面设计,设计一个拼图游戏界面,能够实现基本得游戏功能.3、要求:(1)游戏者可以选择不同得图片.(2)按完成得时间计算成绩。

(3)记录拼图完成得总步数.二、需求分析拼图游戏就是一个简单得小程序,游戏规则如下:将一张大图打散成9张小图,然后在游戏里任意挑8张图,贴在3行3列得矩阵中得任意位置。

通过鼠标或键盘得方向键移动打乱得8张图片,让其复原成原来得顺序,玩家就胜利了,游戏就结束了。

在游戏结束之后,算出玩家得得分.三、概要设计1、功能分析由于要计算游戏得时间,需要引入线程,通过实现Runnable 接口与创建Thread类来实现线程得功能。

使用多线程机制来计算时间得流逝。

引入AWT绘图包,实现图片得绘制。

引入事件处理机制,要求对鼠标事件,键盘事件进行相应,实现移动图片,预览全图等功能.按键“Y”实现临时得原图整体预览。

按键“1或者2或者3"实现大图选择、2、界面初始化调用public voidinit()通过接收html数据,加载三张源图片,安装媒体监视器与鼠标键盘监听器,实现界面初始化;调用publicvoid initData()将加载得一张大图分割成九个随机分布得小图部分;调用public void paint(Graphics g)划分提示信息区域与拼图区域;3、事件处理(1)鼠标事件ﻩ调用public voidmouseClicked(MouseEvent e)方法实现鼠标事件处理。

调用Public int directionCanMove(int nCol,int nRow)方法检测那个方向没有拼图而可以向之移动。

ﻩ调用publicvoid move(intnCol,intnRow,intnDirection)方法实现鼠标激活拼图移动。

(2)键盘事件调用public void keyPressed(KeyEvente)方法实现键盘事件处理。

ﻩ调用public void initImageAgain(intnImgNo)方法实现重新加载另一张大图.调用public booleanmove(int nDirection)方法实现判断指定拼图就是否可以往方向nDirection移动。

4、状态判断动过调用public void checkStatus()方法来检测拼图状态,判断就是否拼图成功,确定游戏就是否结束。

5、附加功能调用public voidrun()方法,给游戏过程添加计时进程。

6、程序流程图四、详细设计1、编写、html代码〈html><head〉〈meta —equiv=”Content-Type" content=”text/html;charset=gb 2312">〈title>拼图游戏</title></HEAD>〈body〉拼图游戏<hr>这就是一个拼图游戏。

玩家应该将打散得小图拼成一张大图。

<br〉玩家可以通过鼠标与键盘来移动小图,移动得次数与拼成〈br>一张大图所化费得时间作为游戏得分得依据。

<br>成绩=1000-时间(秒)-移动步数*10<br〉按F1键重新开始该游戏,按Y健可以预览整个得图片<hr〉〈appletcode="pintu、class"width=”480"height=”360”〉<!——param标签NumOfImgparam得标签表示有多少张图片ﻩ剩下得param标签为每张图得名字--><param name=NumOfImg value=”3"><paramname=Image1 value="pintu"〉<param name=Image2 value="pintu2"〉〈param name=Image3value=”pintu3”〉〈/applet〉</body〉</html>2、编写、java代码1、界面设计与附加功能import java、applet、*;importjava、awt、*;importjava、awt、event、*;import java、net、*;//Download bypublicclass pintu extends Applet implementsMouseListener,K eyListener,Runnable{Image[]m_Image=newImage[9];//9个用来装入每个拼图得图片对象Image m_ImgAll;//总得大图片intm_nImageNo[][]=new int[3][3];////标志现在各个拼图得排列情况ﻩfinal intNO_IMAGE=—1;//此位置没有拼图,表示空白拼图final int IMAGE_WIDTH=120;//每张拼图得宽final intIMAGE_HEIGHT=120;////每张拼图得高ﻩfinal intDIRECTION_UP=1;ﻩfinal int DIRECTION_DOWN=2;final int DIRECTION_LEFT=3;ﻩfinal int DIRECTION_RIGHT=4;finalint DIRECTION_NONE=—1;final int DELTAX=120;//标志提示信息区得宽度boolean bWantStartNewGame=false;//游戏就是否结束,就是否需要开始新游戏int nStep=0;//已经走得步数int nTime=0;//已经玩过得时间,以秒为单位Thread thTimer;//计时器线程int nScore=0;//玩家所得得分数intm_nNumOfImg=0;//拼图底图所使用得图片得个数String m_sImgName[]=new String[9];//记录拼图底图得名字boolean bOnShowAll=false;//预览得开关AudioClip m_audioClip1,m_audioClip2;//装载要播放得声音对象public void init()/{ﻩString param=getParameter("NumOfImg”);try{m_nNumOfImg=Integer、parseInt(param);}catch(Exception e){m_nNumOfImg=1;System、out、println("Can’t convert the par am’s nameto int、");}for(inti=0;i<m_nNumOfImg;i++){m_sImgName[i]=getParameter(”Image"+(i+1))+"、jpg";//用字符串数组m_sImgName分别保存三个大图及其规范命名:p//pintu、jpg pintu1、jpg pintu2、jpgSystem、out、println(m_sImgName[i]);}System、out、println(param);MediaTrackermediaTracker=new MediaTracker(this);//为这个拼图界面设置一个监视器ﻩﻩﻩﻩm_ImgAll=getImage(getDocumentBase(),"img/”+m_sImgName [0]);//从装载总得大图片ﻩmediaTracker、addImage(m_ImgAll,1);//为向此媒体跟踪器正在跟踪得图像列表中添加一个图像,//并分配一个表示号1 给这个图像ﻩtryﻩ{ﻩﻩmediaTracker、waitForID(1);//加载所跟踪得图像列表中得某一个标识号所对应得得一个图像ﻩﻩ}ﻩﻩcatch(Exceptione)ﻩ{ﻩﻩﻩSystem、out、println("图片装载出错");ﻩ}if(mediaTracker、isErrorAny())System、out、println("图片装载出错");for(int i=0;i〈9;i++){m_Image[i]=createImage(IMAGE_WIDTH,IMAGE_HEIGHT);Graphicsg=m_Image[i]、getGraphics();int nRow=i%3;int nCol=i/3;g、drawImage(m_ImgAll,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,nRow*IMAGE_WIDTH,nCol*IMAGE_HEIGHT,(nRow+1)*IMAGE_WIDTH,(nCol+1)*IMAGE_HEIGHT,this);System、out、println("init”+i);}//将一个大图切割成九个小图System、out、println(”init over”);ﻩﻩthTimer=new Thread(this);//为线程分配内存空间thTimer、start();//开始线程initData();m_audioClip1=getAudioClip(getCodeBase(),”au/move、au”);m_audioClip2=getAudioClip(getCodeBase(),”au/notm ove、au”);addMouseListener(this);ﻩﻩaddKeyListener(this);publicvoidinitData(){System、out、println("run initData");int[]nHasDistrib=newint[9];//为每个小图分配一个数字标识,用来判定该小图就是否被随机编一个二维数组号for(inti=0;i<9;i++)nHasDistrib[i]=0;ﻩfor(int j=0;j〈3;j++)ﻩ{ﻩﻩfor(inti=0;i〈3;i++)ﻩﻩ{int nCount=j*3+i;int nImgNo=—1;do{nImgNo=(int)(Math、random()*9);}while(nHasDistrib[nImgNo]==1);//1代表已经分配了这张图片到二维数组中得随机位置m_nImageNo[i][j]=nImgNo;nHasDistrib[nImgNo]=1;System、out、println("test、、”);}}m_nImageNo[(int)(Math、random()*3)][(int)(Math、random()*3)]=NO_IMAGE;nStep=0;nTime=0;//清空计时器ﻩ}public void run(){while(Thread、currentThread()==thTimer){try{thTimer、sleep(990);String sTemp="您玩了”+nTime+"秒得时间,”;if(nTime>200)sTemp=sTemp+”时间用得很长了,您可要加油啦!”;else sTemp=sTemp+”别紧张,慢慢来。

相关主题