软件设计方案报告拼图游戏.doc
《软件设计方案报告拼图游戏.doc》由会员分享,可在线阅读,更多相关《软件设计方案报告拼图游戏.doc(24页珍藏版)》请在咨信网上搜索。
软件设计汇报 题 目: 拼图游戏 专 业 数字媒体技术 学 生 姓 名 班 级 学 号 日 期 5月 评 分 细 则 评分项 优异 良好 中等 及格 不及格 平时表现 (10%) 程序演示 (30%) 汇报 (60%) 评分等级 等级: 老师署名: 年 5月 备注 评分等级有五种: 优异、良好、中等、及格、不及格 目录 一、序言 1 二、项目开发计划书 1 2.1技术可行性 1 2.2人员可能性 1 2.3代码工作量 1 2.4开发环境 1 三、项目分析 1 3.1设计目标 1 3.2程序功效需求概述 1 四、软件测试汇报 6 五、不足分析 9 六、小结 9 附1:代码 10 附2:附录 24 一、序言 鉴于拼图游戏是一款较为经典游戏,我们组选择了拼图游戏,借助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。在程序编写过程中,还出现了部分小问题,尤其是部分语言书写规则,细节功效实现着实让我们组大费了部分周折。 自学了相关软件工程知识,并能够把自学导内容加以实践和应用。因为我没有选修这门课程,所以造成在实践过程中还是碰到了部分问题,比如在软件开发初级阶段,和小组组员讨论系统功效结构化设置时,就不能全方面有效构思清楚。幸好另外一名同组组员较系统地学习了这门课程,经过讨论,最终设计出了现在程序。 经过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提升。安排课程设计基础目标,在于理论和实际结合,人和人之间沟通,尤其是观察、分析和处理问题实际工作能力,作为整个学习体系有机组成部分,课程设计即使只安排了两周进行,但并不含有绝对独立意义。这次课程设计,让我找出了本身情况和实际需要差距,并在以后学习期间立即补充相关知识,为求职和正式工作做好充足知识、能力准备,让我受益匪浅。 代码部分 import java.awt.*; import java.applet.*; import java.awt.event.* ; public class pintu extends Applet implements MouseListener,MouseMotionListener { private Image picture; private Graphics buffer; private Image pic[]; private Image off_pic[]; private Graphics off_buf[]; private Image off_screen; private Graphics off_buffer; private Image off_drag; private Graphics off_drag_buf; private int map[][]; private int ran[]; private int width=0; private int height=0; private int lastx; private int lasty; private int last_downx; private int last_downy; private int stepx; private int stepy; private boolean choose; private boolean click[][]; private boolean m_down; private boolean m_drag; private boolean not_redraw; private boolean able; Font font1,font2; //程序初始化 public void init() { resize(640,480); pic = new Image [3]; off_pic = new Image[16]; off_buf = new Graphics [16]; map = new int [4][4]; ran = new int [15]; for(int a=0;a<16;a++) map[a/4][a%4] = a; for(int a=0;a<15;a++) ran[a]=a; click=new boolean [4][4]; MediaTracker tracker= new MediaTracker (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(InterruptedException e){} //设置字体 font1= new Font ("TimesRoman", Font.BOLD, 48); font2= new Font ("TimesRoman", Font.BOLD, 32); width=640; height=480; //初始化主界面 initForm(); //添加鼠标监听事件 addMouseListener(this); addMouseMotionListener(this); } //面板初始化 void initForm() { this.setBackground (Color.orange); if(off_drag==null){ off_drag = createImage(width/4,height/4); off_drag_buf = off_drag.getGraphics (); } } public void paint(Graphics g){ if(off_screen==null) { off_screen = createImage(width,height); off_buffer=off_screen.getGraphics (); } if(able){ off_buffer.setColor (Color.black ); for(int a=0;a<4;a++) for(int b=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(int c=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(int d=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 ("Choose One!",320,100); } g.drawImage (off_screen,0,0,this); } public void repaint(){ paint(this.getGraphics ()); } //单击鼠标时产生事件 public void mouseClicked(MouseEvent evt){} //鼠标进入某个区域时产生事件 public void mouseEntered(MouseEvent evt){} //鼠标退出某个区域时产生事件 public void mouseExited(MouseEvent evt){} //移动鼠标时产生事件 public void mouseMoved(MouseEvent evt){ if(!able){ Point point; 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 ("picture 2!",320,100); this.getGraphics ().drawImage (off_screen,0,0,this); } else if(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 ("picture 0!",320,100); this.getGraphics ().drawImage (off_screen,0,0,this); } else if(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 ("picture 1!",320,100); this.getGraphics ().drawImage (off_screen,0,0,this); } else{ repaint(); } } } //拖动鼠标时产生事件 public void mouseDragged(MouseEvent evt){ if(!able) return; if(m_down){ Point point; Point temp; point=evt.getPoint(); m_drag=true; repaint(); Graphics david = 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; } } //按下鼠标时产生事件 public void mousePressed(MouseEvent evt){ if(!able) return; Point point; Point temp; 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; } } else if(m_down){ m_down=false; } } } //放开鼠标时产生事件 public void mouseReleased(MouseEvent evt){ if(able){ if(m_drag){ m_down=false;m_drag=false;not_redraw=false; Point point; Point temp; 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) { int david; 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 if(last_downx-temp.x==0 && Math.abs (last_downy-temp.y)==1) { int david; 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{ Point point; 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);} else return; } } //转换坐标 public Point getarea(Point point){ if(point.x>640 || point.y>480) return point; else return point = new Point (point.x/160,point.y/120); } //图片初始化 void initmap(int stage){ picture = createImage(width,height); buffer = picture.getGraphics (); buffer.drawImage (pic[stage],0,0,640,480,this); for(int a=0;a<15;a++) { off_pic[a] = createImage(width/4,height/4); off_buf[a] = off_pic[a].getGraphics (); off_buf[a].drawImage (picture,0,0,width/4,height/4, (a%4)*width/4,(a/4)*height/4,(a%4+1)*width/4,(a/4+1)*height/4,this); } initgame(); repaint(); } //程序是否结束 boolean wingame(){ for(int a=0;a<4;a++) for(int b=0;b<4;b++) { if(map[a][b]==a*4+b) ; else return false; } return true; } //游戏初始化 void initgame(){ for(int a=0;a<4;a++) for(int b=0;b<4;b++) { if(!(a==3 && b==3)){ map[a][b] = (int)(Math.random()*14); if(ran[map[a][b]]==-1) { int temp=map[a][b]; while(ran[temp]==-1){ temp++; if(temp>14) temp=0; } map[a][b]=ran[temp]; ran[temp]=-1; } else{ ran[map[a][b]]=-1; } } else map[3][3] = 15; } } } 附录说明 本例知识点 一句话讲解 新学知识 使用Image类 导入图片 使用MouseEvent类 处理鼠标事件 已学知识 使用Point类 转换坐标 使用Graphics类 管理屏幕显示- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 方案 报告 拼图游戏
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文