软件设计报告拼图游戏.docx
- 文档编号:25733523
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:21
- 大小:330.02KB
软件设计报告拼图游戏.docx
《软件设计报告拼图游戏.docx》由会员分享,可在线阅读,更多相关《软件设计报告拼图游戏.docx(21页珍藏版)》请在冰豆网上搜索。
软件设计报告拼图游戏
软件设计报告
题目:
拼图游戏
专业数字媒体技术
学生姓名
班级学号
日期2013年5月
评分细则
评分项
优秀
良好
中等
及格
不及格
平时表现
(10%)
程序演示
(30%)
报告
(60%)
评分等级
等级:
教师签名:
2013年5月
备注
评分等级有五种:
优秀、良好、中等、及格、不及格
一、序言
鉴于拼图游戏是一款较为经典的游戏,我们组选取了拼图游戏,借助Java-Eclipse这样一个开发环境完成此次软件工程实验项目。
二、项目开发计划书
2.1技术可行性
我们组成员系统的学习了软件工程和Java的相关知识,具备一定的系统分析与设计能力,熟悉Java的设计与操纵;早期的大部分工作已经完成,所以后面的工作相对轻松:
指导老师林巧民老师多年从事软件工程和程序设计的教学与研究工作,因而该系统的实现在技术上是可行的。
2.2人员可能性
程序的设计、编写与调试由杜宗泽、沙杰。
文档的编写与整理,后期测试由陈凯负责。
2.3代码工作量
预计需一个星期左右。
2.4开发环境
开发环境:
Java-Eclipse
三、项目分析
3.1设计目标
按照软件工程的规范,以Java-Eclipse为前端开发工具,设计并实现一个拼图游戏。
3.2程序功能需求概述
(1)实现载入3幅图片;
(2)设置字体;
(3)初始化界面;
(4)添加鼠标监听事件;
(5)面板初始化;
(6)单击鼠标时产生的事件;
(7)鼠标进入某个区域时产生的事件;
(8)鼠标突出某个区域时产生的事件;
(9)移动鼠标时产生的事件;
(10)拖动鼠标时产生的事件;
(11)按下鼠标时产生的事件;
(12)放开鼠标时产生的事件;
(13)转换坐标;
(14)图片初始化;
(15)判断程序是否结束;
(16)游戏初始化。
四、软件测试报告
在Java-Eclipse环境中调试、运行程序
点击运行后出现如下画面:
单击选取美女头像,初始状态如下图:
此时可根据需要单击左上角“小程序”菜单进行功能选择,如下图:
五、不足分析
(1)4x4拼图难度较大;
(2)右下角会有一块空缺,鉴于能力有限,未能完善。
六、小结
经过两个星期的努力,我们小组比较圆满地完成了本次课程设计的题目——拼图游戏。
本练习制作拼图游戏的实例,运用了Java2中的图形处理技术和消息响应技术。
通过图形技术,实现图片的导入和分割。
通过消息响应机制,使程序可以响应用户的鼠标操作,进行拼图游戏的操作。
在为期一周的学习实践中,最大的收获是锻炼了自己的编程能力。
熟悉了Java-Eclipse开发环境。
程序的编写是最为艰辛的过程。
首先,由于没有较为深入的学习Java高级语言,我们小组在开始程序编写工作之前,借阅了相关的书籍,初步学习了Java语言中的各项功能。
在又了一定的知识积累后,我才着手开始项目程序的编写。
程序编写的灵魂在于算法的设计,所以我们组在这部分花费的精力也最多。
算法比较复杂。
刚开始由于思考的不够全面,编写的程序虽能勉强完成大概的功能需求,但还是出现了很多bug。
后来通过对算法的重新审视,以及查阅相关的书籍,不断的修改已有程序,终于基本消除了bug。
在程序的编写过程中,还出现了一些小的问题,特别是一些语言书写的规则,细节功能的实现着实让我们组大费了一些周折。
自学了有关软件工程的知识,并可以把自学导的内容加以实践与应用。
由于我没有选修这门课程,所以造成在实践过程中还是遇到了一些问题,比如在软件开发的初级阶段,与小组成员讨论系统功能的结构化设置时,就不能全面有效的构思清楚。
幸好另外一名同组成员较系统地学习了这门课程,通过讨论,最后设计出了现在的程序。
通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。
安排课程设计的基本目的,在于理论与实际的结合,人与人之间的沟通,尤其是观察、分析和解决问题的实际工作能力,作为整个学习体系的有机组成部分,课程设计虽然只安排了两周进行,但并不具有绝对独立的意义。
这次课程设计,让我找出了自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,让我受益匪浅。
代码部分
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
publicclasspintuextendsAppletimplementsMouseListener,MouseMotionListener
{
privateImagepicture;
privateGraphicsbuffer;
privateImagepic[];
privateImageoff_pic[];
privateGraphicsoff_buf[];
privateImageoff_screen;
privateGraphicsoff_buffer;
privateImageoff_drag;
privateGraphicsoff_drag_buf;
privateintmap[][];
privateintran[];
privateintwidth=0;
privateintheight=0;
privateintlastx;
privateintlasty;
privateintlast_downx;
privateintlast_downy;
privateintstepx;
privateintstepy;
privatebooleanchoose;
privatebooleanclick[][];
privatebooleanm_down;
privatebooleanm_drag;
privatebooleannot_redraw;
privatebooleanable;
Fontfont1,font2;
//程序的初始化
publicvoidinit()
{
resize(640,480);
pic=newImage[3];
off_pic=newImage[16];
off_buf=newGraphics[16];
map=newint[4][4];
ran=newint[15];
for(inta=0;a<16;a++)
map[a/4][a%4]=a;
for(inta=0;a<15;a++)
ran[a]=a;
click=newboolean[4][4];
MediaTrackertracker=newMediaTracker(this);
//要载入的图片
pic[0]=getImage(getCodeBase(),"PICTURE0.JPG");
pic[1]=getImage(getCodeBase(),"PICTURE1.JPG");
pic[2]=getImage(getCodeBase(),"PICTURE2.GIF");
tracker.addImage(pic[0],0);
tracker.addImage(pic[1],0);
tracker.addImage(pic[2],0);
try{
tracker.waitForID(0);
}catch(InterruptedExceptione){}
//设置字体
font1=newFont("TimesRoman",Font.BOLD,48);
font2=newFont("TimesRoman",Font.BOLD,32);
width=640;
height=480;
//初始化主界面
initForm();
//添加鼠标监听事件
addMouseListener(this);
addMouseMotionListener(this);
}
//面板初始化
voidinitForm()
{
this.setBackground(Color.orange);
if(off_drag==null){
off_drag=createImage(width/4,height/4);
off_drag_buf=off_drag.getGraphics();
}
}
publicvoidpaint(Graphicsg){
if(off_screen==null)
{
off_screen=createImage(width,height);
off_buffer=off_screen.getGraphics();
}
if(able){
off_buffer.setColor(Color.black);
for(inta=0;a<4;a++)
for(intb=0;b<4;b++)
{
if(map[a][b]!
=15)
off_buffer.drawImage(off_pic[map[a][b]],b*width/4,a*height/4,this);
if(map[a][b]==15)
off_buffer.fillRect(b*width/4,a*height/4,width/4,height/4);
for(intc=0;c<2;c++)
off_buffer.drawRect(b*width/4+c,a*height/4+c,width/4-c,height/4-c);
if(click[a][b])
{
off_buffer.setColor(Color.red);
for(intd=0;d<2;d++)
off_buffer.drawOval(b*width/4-d,a*height/4-d,width/4+d,height/4+d);
off_buffer.setColor(Color.black);
}
}
}
else{
off_buffer.setColor(Color.orange);
off_buffer.fillRect(0,0,640,480);
off_buffer.setFont(font1);
off_buffer.setColor(Color.red);
off_buffer.drawImage(pic[2],30,50,250,180,this);
off_buffer.drawImage(pic[0],370,160,250,180,this);
off_buffer.drawImage(pic[1],60,270,250,180,this);
off_buffer.drawString("ChooseOne!
",320,100);
}
g.drawImage(off_screen,0,0,this);
}
publicvoidrepaint(){
paint(this.getGraphics());
}
//单击鼠标时产生的事件
publicvoidmouseClicked(MouseEventevt){}
//鼠标进入某个区域时产生的事件
publicvoidmouseEntered(MouseEventevt){}
//鼠标退出某个区域时产生的事件
publicvoidmouseExited(MouseEventevt){}
//移动鼠标时产生的事件
publicvoidmouseMoved(MouseEventevt){
if(!
able){
Pointpoint;
point=evt.getPoint();
if(point.x>30&&point.x<280&&point.y>50&&point.y<230)
{
off_buffer.setColor(Color.orange);
off_buffer.fillRect(0,0,640,480);
off_buffer.setFont(font1);
off_buffer.drawImage(pic[2],25,45,250,180,this);
off_buffer.drawImage(pic[0],370,160,250,180,this);
off_buffer.drawImage(pic[1],60,270,250,180,this);
off_buffer.setColor(Color.black);
off_buffer.fillRect(30,225,250,5);
off_buffer.fillRect(275,50,5,176);
off_buffer.setColor(Color.red);
off_buffer.drawString("picture2!
",320,100);
this.getGraphics().drawImage(off_screen,0,0,this);
}
elseif(point.x>370&&point.x<620&&point.y>160&&point.y<340)
{
off_buffer.setColor(Color.orange);
off_buffer.fillRect(0,0,640,480);
off_buffer.setFont(font1);
off_buffer.drawImage(pic[2],30,50,250,180,this);
off_buffer.drawImage(pic[0],365,155,250,180,this);
off_buffer.drawImage(pic[1],60,270,250,180,this);
off_buffer.setColor(Color.black);
off_buffer.fillRect(370,335,250,5);
off_buffer.fillRect(615,160,5,175);
off_buffer.setColor(Color.red);
off_buffer.drawString("picture0!
",320,100);
this.getGraphics().drawImage(off_screen,0,0,this);
}
elseif(point.x>60&&point.x<310&&point.y>270&&point.y<450)
{
off_buffer.setColor(Color.orange);
off_buffer.fillRect(0,0,640,480);
off_buffer.setFont(font1);
off_buffer.drawImage(pic[2],30,50,250,180,this);
off_buffer.drawImage(pic[0],370,160,250,180,this);
off_buffer.drawImage(pic[1],55,265,250,180,this);
off_buffer.setColor(Color.black);
off_buffer.fillRect(60,445,250,5);
off_buffer.fillRect(305,270,5,175);
off_buffer.setColor(Color.red);
off_buffer.drawString("picture1!
",320,100);
this.getGraphics().drawImage(off_screen,0,0,this);
}
else{
repaint();
}
}
}
//拖动鼠标时产生的事件
publicvoidmouseDragged(MouseEventevt){
if(!
able)
return;
if(m_down){
Pointpoint;
Pointtemp;
point=evt.getPoint();
m_drag=true;
repaint();
Graphicsdavid=this.getGraphics();
if(!
not_redraw)
off_drag_buf.drawImage(off_pic[map[last_downy][last_downx]],0,0,this);
david.drawImage(off_drag,point.x+stepx,point.y+stepy,this);
not_redraw=true;
}
}
//按下鼠标时产生的事件
publicvoidmousePressed(MouseEventevt){
if(!
able)
return;
Pointpoint;
Pointtemp;
point=evt.getPoint();
if(getarea(point)==point)
return;
else{
temp=getarea(point);
if(!
m_down){
if(map[temp.y][temp.x]==15)
return;
else{
m_down=true;
last_downx=temp.x;
last_downy=temp.y;
stepx=temp.x*160-point.x;
stepy=temp.y*120-point.y;
}
}
elseif(m_down){
m_down=false;
}
}
}
//放开鼠标时产生的事件
publicvoidmouseReleased(MouseEventevt){
if(able){
if(m_drag){
m_down=false;m_drag=false;not_redraw=false;
Pointpoint;
Pointtemp;
point=evt.getPoint();
if(getarea(point)==point)
{repaint();
return;}
else{
temp=getarea(point);
if(map[temp.y][temp.x]!
=15){
repaint();return;}
else{
if(Math.abs(last_downx-temp.x)==1&&last_downy-temp.y==0)
{
intdavid;
david=map[last_downy][last_downx];
map[last_downy][last_downx]=15;
map[temp.y][temp.x]=david;
if(wingame())
able=false;
repaint();
return;
}
elseif(last_downx-temp.x==0&&Math.abs(last_downy-temp.y)==1)
{
intdavid;
david=map[last_downy][last_downx];
map[last_downy][last_downx]=15;
map[temp.y][temp.x]=david;
if(wingame())
able=false;
repaint();
return;
}
else{repaint();return;}
}
}
}
}
else{
Pointpoint;
point=evt.getPoint();
if(point.x>30&&point.x<280&&point.y>50&&point.y<230)
{able=true;initmap
(2);}
if(point.x>370&&point.x<620&&point.y>160&&point.y<340)
{able=true;initmap(0);}
if(point.x>60&&point.x<310&&point.y>270&&point.y<450)
{able=true;initmap
(1);}
elsereturn;
}
}
//转换坐标
publicPointgetarea(Pointpoint){
if(point.x>640||point.y>480)
returnpoint;
els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 报告 拼图游戏