java课程设计报告拼图游戏.docx
- 文档编号:9462298
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:29
- 大小:1.47MB
java课程设计报告拼图游戏.docx
《java课程设计报告拼图游戏.docx》由会员分享,可在线阅读,更多相关《java课程设计报告拼图游戏.docx(29页珍藏版)》请在冰豆网上搜索。
java课程设计报告拼图游戏
目录
1、题目介绍....3
1、题目.............................................................................................3
2、任务..............................................................................................3
3、要求...............................................................................................3
二、需求分析.............................................................................3
3、概要设计..............................................................................4
1、功能分析.......................................................................................4
2、界面初始化...................................................................................4
3、事件处理
(1)鼠标事件.............................................................4
4、事件处理
(2)键盘事件.............................................................5
5、状态判断.......................................................................................5
6、程序流程图...................................................................................5
4、详细设计.............................................................................6
1、.html代码设计............................................................................6
2、.java代码设计............................................................................6
五、调试结果.............................................................................19
第一个大图的拼图界面..........................................................................19
第一个拼图全图预览..............................................................................19
第二个大图的拼图界面..........................................................................20
第二个拼图全图预览..............................................................................20
第三个大图的拼图界面..........................................................................21
第三个拼图全图预览..............................................................................21
六、心得总结.............................................................................22
七、参考资料...........................................................................22
1、题目介绍
1、题目:
拼图游戏设计
2、任务:
利用java的图形用户界面设计,设计一个拼图游戏界面,能够实现基本的游戏功能。
3、要求:
(1)游戏者可以选择不同的图片。
(2)按完成的时间计算成绩。
(3)记录拼图完成的总步数。
2、需求分析
拼图游戏是一个简单的小程序,游戏规则如下:
将一张大图打散成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、程序流程图
4、详细设计
1、编写.html代码
拼图游戏
拼图游戏
这是一个拼图游戏。
玩家应该将打散的小图拼成一张大图。
玩家可以通过鼠标和键盘来移动小图,移动的次数和拼成
一张大图所化费的时间作为游戏得分的依据。
成绩=1000-时间(秒)-移动步数*10
按F1键重新开始该游戏,按Y健可以预览整个的图片
--param标签NumOfImgparam的标签表示有多少张图片
剩下的param标签为每张图的名字
-->
2、编写.java代码
1、界面设计和附加功能
importjava.applet.*;
importjava.awt.*;
importjava.awt.event.*;
import.*;
//Downloadby
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_sImgName[i]=getParameter("Image"+(i+1))+".jpg"; //用字符串数组m_sImgName分别保存三个大图及其规范命名: p //pintu.jpgpintu1.jpgpintu2.jpg System.out.println(m_sImgName[i]); } System.out.println(param); MediaTrackermediaTracker=newMediaTracker(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(inti=0;i<9;i++) { m_Image[i]=createImage(IMAGE_WIDTH,IMAGE_HEIGHT); Graphicsg=m_Image[i].getGraphics(); intnRow=i%3; intnCol=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("initover"); thTimer=newThread(this); //为线程分配内存空间 thTimer.start(); //开始线程 initData(); m_audioClip1=getAudioClip(getCodeBase(),"au/move.au"); m_audioClip2=getAudioClip(getCodeBase(),"au/notmove.au"); addMouseListener(this); addKeyListener(this); publicvoidinitData() { System.out.println("runinitData"); int[]nHasDistrib=newint[9]; //为每个小图分配一个数字标识,用来判定该小图是否被随机编一个二维数组号 for(inti=0;i<9;i++)nHasDistrib[i]=0; for(intj=0;j<3;j++) { for(inti=0;i<3;i++) { intnCount=j*3+i; intnImgNo=-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; //清空计时器 } publicvoidrun() { while(Thread.currentThread()==thTimer) { try { thTimer.sleep(990); StringsTemp="你玩了"+nTime+"秒的时间,"; if(nTime>200)sTemp=sTemp+"时间用的很长了,你可要加油啦! "; elsesTemp=sTemp+"别紧张,慢慢来。 "; showStatus(sTemp); if(! bWantStartNewGame)nTime++; } catch(Exceptione) { } } } publicvoidpaint(Graphicsg) { g.setColor(Color.blue); //将当前颜色变为蓝色 g.fillRect(0,0,DELTAX,IMAGE_HEIGHT*3); //填充左边的提示信息区域 g.setFont(newFont("宋体",Font.PLAIN,15)); //设置字体 /*Font是一个字体类! PLAIN是它的一个静态常量! 类似的还有BOLD,ITALIC Font.PLAIN是一个普通的系统默认的字体! jMenuSystem.setFont(newjava.awt.Font("华文新魏",Font.PLAIN,20)); 设置字体为华文新魏类型: 普通系统默认大小为20 */ g.setColor(Color.red); //setColor函数对该函数调用的下文进行颜色设置 g.drawString("步数: "+nStep,5,20); g.drawString("现有图片"+m_nNumOfImg+"张",5,60); g.drawString("请按1-"+m_nNumOfImg+"键改变图片",5,100); //在坐标(5,20)画出字串,来显示现在走了多少步。 g.setColor(Color.blue); if(bOnShowAll) { intx=DELTAX; inty=0; g.drawImage(m_ImgAll,x,y,this); return; } for(inti=0;i<3;i++) { for(intj=0;j<3;j++) { intx=i*IMAGE_WIDTH+DELTAX; inty=j*IMAGE_HEIGHT; if(m_nImageNo[i][j]==NO_IMAGE) g.fill3DRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT,false); else { g.drawImage(m_Image[m_nImageNo[i][j]],x,y,this); g.drawRect(x,y,IMAGE_WIDTH,IMAGE_HEIGHT); } } } checkStatus(); if(bWantStartNewGame) { //如果游戏结束,玩家将拼图的顺序排对之后 nScore=1000-nStep*10-nTime; g.setColor(Color.blue); g.drawString("请按任意键重新开始",5,140); g.setColor(Color.red); g.setFont(newFont("宋体",Font.PLAIN,40)); g.drawString("你赢了"+nScore+"分",70+DELTAX,160); g.drawString("祝贺你! ",110+DELTAX,210); } } } publicvoidcheckStatus() { booleanbWin=true; //定义成员,默认值为真 intnCorrectNum=0; for(intj=0;j<3;j++) { for(inti=0;i<3;i++) { if(m_nImageNo[i][j]! =nCorrectNum&&m_nImageNo[i][j]! =NO_IMAGE) bWin=false; nCorrectNum++; } } //比较拼图是否都放到了正确的位置上,如果,有一个没有放到正确位置上,则游戏就不能结束。 if(bWin)bWantStartNewGame=true; } 2、鼠标事件处理 publicvoidmouseClicked(MouseEvente) { //Invokedwhenthemousehasbeenclickedonacomponent. if(bOnShowAll)return; if(bWantStartNewGame) { initData(); repaint(); bWantStartNewGame=false; return; } intnX=e.getX()-DELTAX; intnY=e.getY(); intnCol=nY/IMAGE_HEIGHT; intnRow=nX/IMAGE_WIDTH; System.out.println("col: "+nCol+"row: "+nRow); intnDirection=directionCanMove(nCol,nRow); if(nDirection! =DIRECTION_NONE) { move(nCol,nRow,nDirection); nStep++; m_audioClip1.play(); repaint(); } else { m_audioClip2.play(); } } publicvoidmouseEntered(MouseEvente) { //Invokedwhenthemousehasbeenclickedonacomponent. } publicvoidmouseExited(MouseEvente) { //Invokedwhenthemousehasbeenclickedonacomponent. } publicvoidmousePressed(MouseEvente) { //Invokedwhenthemousehasbeenclickedonacomponent. } publicvoid
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 报告 拼图游戏