




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常州工学院学士学位设计一、设计任务1.设计任务与要求小组设计的拼图游戏是一个简单的益智小游戏,通过程序运行后用鼠标就可以操作界面上的按钮或者菜单选项开始拼图游戏,界面的最上方有本人班级的名字“13322”,界面上还有“开始”“预览”“选项”三个菜单,程序运行后就可以通过鼠标控制开始游戏。要求:小组设计的拼图游戏是一个具有一个简单的系统界面,操作简单易行,上手快,适用于广大用户的小游戏,先通过玩家鼠标点击“选项”选择要拼的图片,然后用鼠标点击分散的小图片操作来完成拼图。并且成功拼成图片后会出现“恭喜你完成拼图,加油!”一句话。2.设计方法与思路由于我们要将这个游戏写成一个应用程序,所以首先要设计一下游戏的框架和菜单。游戏的框架采用标准的Windows框架,在上面有标题栏、菜单栏,以方便玩家控制游戏。我们应该先做好这一部分。菜单栏包括游戏的开始、预览、选项等控制菜单。框架中间嵌入显示分散的小图片。然后,应该在一个面板上构建游戏的界面,将这个面板嵌入到游戏的大框架里。这样整个游戏的界面就出来了。对菜单以及界面上的控制按钮进行响应,并相应地来控制游戏。这时我们需要添加对菜单和按钮的事件响应方法。在游戏面板构建好这后,我们应该让游戏能够玩起来,这一部分主要是编写一些算法,用来控制游戏。这里我们还应该增加对鼠标事件的响应,让玩家用鼠标控制游戏。该游戏的流程图见图。二、设计分析1.题目描述此拼图游戏是一个myeclipse程序,用户通过点击游戏界面上的按钮或菜单栏选项控制游戏的开始、预览、选项等来开始游戏。此游戏分散的小图片的移动规则是小图片会朝着空位置方向移动,玩家先在界面上选择开始游戏,然后通过鼠标左键点击要移动的小图片,小图片会自动移动到原来没有图片的空位置,移动时,预备移往的图片旁边必须有可供移往的空位置。预览菜单的功能是玩家在游戏中任何时候都可以点击进入观看完成拼图后完整的大图片,选项菜单中,程序为玩家提供了很多不同种类的图片,玩家可以根据自己喜好选择自己喜欢的图片开始拼图游戏。2.功能需求分析拼图游戏的主要功能如下:(1)让玩家用鼠标控制界面上各个菜单选项的选择,直接点击菜单栏进入菜单。(2)游戏预览功能:当玩家在玩游戏的过程中忘记各个小图片的整体排列位置时能够进入预览功能观看完整的大图片。(3)游戏选项功能:系统为玩家提供了很多各种各样不同类型的图片,玩家能够根据自己的个人喜好选择不同的图片进行游戏。(4)游戏结束后出现一条人性化的鼓励标语:“恭喜你完成拼图,加油!”3.系统总体设计由于我们要将这个游戏写成一个应用程序,所以首先要设计一下游戏的框架和菜单。游戏的框架采用标准的Windows框架,在上面有标题栏、菜单栏,以方便玩家控制游戏。我们应该先做好这一部分。菜单栏包括游戏的开始、预览、选项等控制菜单。框架中间嵌入显示分散的小图片。然后,应该在一个面板上构建游戏的界面,将这个面板嵌入到游戏的大框架里。这样整个游戏的界面就出来了。对菜单以及界面上的控制按钮进行响应,并相应地来控制游戏。这时我们需要添加对菜单和按钮的事件响应方法。在游戏面板构建好这后,我们应该让游戏能够玩起来,这一部分主要是编写一些算法,用来控制游戏。这里我们还应该增加对鼠标事件的响应,让玩家用鼠标控制游戏。该游戏的流程图见图2。图2拼图游戏的整体结构流程图为了实现拼图游戏的所有需求,设计应分为三个部分:首先需要设计此拼图游戏的的界面以及其框架布局。拼图游戏的基本框架采用Windows标准框架,从上由下依次是标题栏、菜单栏、游戏操作主界面。标题栏上显示出了此游戏的创作者信息“拼图游戏13322”。菜单栏包含了开始、预览以及选项三个菜单选项,并对各个菜单项以及界面上的小方格控制按钮进行事件响应,相应地来成功控制拼图游戏中的各项操作。其次则需设计拼图游戏的“拼图”功能设计,需要设计在主界面中加载大图片并将其分割到9个小方格里,在设置方格为按钮事件响应,然后编写算法控制小方格的移动,移动方向总是朝没有图案的空方格上移动,同时还需要在游戏中设置预览功能,让玩家在游戏的任何时候都能预览他们要完成的拼图。4.作品特点使玩家能够玩的开心,玩出激情,让他们觉得不一样的拼图游戏,图片的多样性使玩家不觉得枯燥无味。点击图片来控制图片各种移动,使玩家可以玩成一张的拼图,同时可以根据拼图时间的快慢,可以锻炼人们的大脑。三、设计成果1.设计成果及作品运行结果展示运行程序拼图游戏后出现的主界面进入系统界面后,检测菜单栏的设置项和操作项的功能是否能够实现,选择操作项的删除记录功能、修改记录功能则出现如图所示的界面,代表功能已能完全实现。拼图游戏的开始游戏界面图拼图游戏的选项功能界面图拼图预览界面拼图完成界面2.作品的优缺点本拼图游戏是一个具有一个简单的系统界面,操作简单易行,上手快,适用于广大用户的小游戏,先通过玩家鼠标点击“选项”选择要拼的图片,然后用鼠标点击分散的小图片操作来完成拼图。并且成功拼成图片后会出现“恭喜你完成拼图,加油!”3.工程代码importjavax.swing.Icon;importjavax.swing.JButton; publicclassCellextendsJButton{ Cell(Iconicon){//实际为ICON super(icon); this.setSize(100,100); } publicvoidmove(Stringdirection,intsleep){//方格的移动 if(direction=="UP"){ this.setLocation(this.getBounds().x,this.getBounds().y-100); }elseif(direction=="DOWN"){ this.setLocation(this.getBounds().x,this.getBounds().y+100); }elseif(direction=="LEFT"){ this.setLocation(this.getBounds().x-100,this.getBounds().y); }else{ this.setLocation(this.getBounds().x+100,this.getBounds().y); } } }importjava.awt.Rectangle;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassMyCanvasextendsJPanelimplementsMouseListener{ booleanhasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件 Cellcell[];//定义方格 RectanglecellNull;//定义空方格区域 publicstaticintpictureID=1;//当前选择的图片代号 publicMyCanvas(){ this.setLayout(null); this.setSize(400,400); cellNull=newRectangle(200,200,100,100);//空方格区域在第三行每三列 cell=newCell[9]; Iconicon; for(inti=0;i<3;i++){//为9个方格加载图片,并初使化坐标,形成三行三列 for(intj=0;j<3;j++){ icon=newImageIcon("pictrue/pic_"+pictureID+"_"+(i*3+j+1)+".jpg"); cell[i*3+j]=newCell(icon); cell[i*3+j].setLocation(j*100,i*100); this.add(cell[i*3+j]); } } this.remove(cell[8]);//移除最后一个多余的方格 } publicvoidreLoadPictrue(){//当选择其它图形进行拼图时,需重新加载新图片 Iconicon; for(inti=0;i<3;i++){ for(intj=0;j<3;j++){ icon=newImageIcon("pictrue/pic_"+pictureID+"_"+(i*3+j+1)+".jpg"); cell[i*3+j].setIcon(icon); } } } publicbooleanisFinish(){//判断是否拼合成功 for(inti=0;i<8;i++){ intx=cell[i].getBounds().x; inty=cell[i].getBounds().y; if(y/100*3+x/100!=i) returnfalse; } returntrue; } publicvoidStart(){//对方格进行重新排列,打乱顺序 while(cell[0].getBounds().x<=100&&cell[0].getBounds().y<=100){//当第一个方格距左上角较近时 intx=cellNull.getBounds().x; inty=cellNull.getBounds().y; intdirection=(int)(Math.random()*4);//产生0-4,对应空方格的上下左右移动 if(direction==0){//空方格左移动,与左侧方格互换位置,左侧方格右移动 x-=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){//依次寻找左侧的按钮 cell[j].move("RIGHT",100); cellNull.setLocation(x,y); break;//找到后跳出for循环 } } } }elseif(direction==1){//RIGHT x+=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("LEFT",100); cellNull.setLocation(x,y); break; } } } }elseif(direction==2){//UP y-=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("DOWN",100); cellNull.setLocation(x,y); break; } } } }else{//DOWN y+=100; if(test(x,y)){ for(intj=0;j<8;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("UP",100); cellNull.setLocation(x,y); break; } } } } } if(!hasAddActionListener)//如果尚未添加动作事件,则添加 for(inti=0;i<8;i++)//为第个方格添加动作事件,这样单击按钮就能移动了 cell[i].addMouseListener(this); hasAddActionListener=true; } privatebooleantest(intx,inty){ if((x>=0&&x<=200)||(y>=0&&y<=200)) returntrue; else returnfalse; }// publicvoidpaint(Graphicsg){// // for(inti=0;i<=300;i+=100)// g.drawLine(0,i,300,i);// for(inti=0;i<=300;i+=100)// g.drawLine(i,0,i,300);// for(inti=0;i<8;i++)// cell[i].repaint();// } publicvoidmouseClicked(MouseEventarg0){ } publicvoidmouseEntered(MouseEventarg0){ } publicvoidmouseExited(MouseEventarg0) { } publicvoidmouseReleased(MouseEventarg0){ } publicvoidmousePressed(MouseEventarg0){//方格的鼠标事件,因为用到了MyCanvas中的一些方法,因此没有在Cell类中处理鼠标事件 Cellbutton=(Cell)arg0.getSource(); intx1=button.getBounds().x;//得到所单击方格的坐标 inty1=button.getBounds().y; intx2=cellNull.getBounds().x;//得到空方格的坐标 inty2=cellNull.getBounds().y; if(x1==x2&&y1-y2==100)//进行比较,如果满足条件则进行交换 button.move("UP",100); elseif(x1==x2&&y1-y2==-100) button.move("DOWN",100); elseif(x1-x2==100&y1==y2) button.move("LEFT",100); elseif(x1-x2==-100&&y1==y2) button.move("RIGHT",100); else return;//不满足就不进行任何处理 cellNull.setLocation(x1,y1); this.repaint(); if(this.isFinish()){//进行是否完成的判断 JOptionPane.showMessageDialog(this,"恭喜你完成拼图,加油!"); for(inti=0;i<8;i++) cell[i].removeMouseListener(this);//如果已完成,撤消鼠标事件,鼠标单击方格不在起作用 hasAddActionListener=false; } } }/**JAVA小游戏-拼图我做的第一个小游戏*Cell类是继承的按钮类,并加上相应图形,形成方格*MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心**2008年6月1日-10日**/importjava.awt.BorderLayout;importjava.awt.Button;importjava.awt.Choice;importjava.awt.Color;importjava.awt.Container;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;publicclassMyMainFrameextendsJFrameimplementsActionListener{ MyCanvasmyCanvas; JPanelpanelNorth,panelPreview;//定义上方的面板,及预览所需的面板 Buttonstart,preview,set;//定义开始,预览,设定按钮 Containercontainer;//容器,得到内容面板 publicMyMainFrame(){//初使化 container=this.getContentPane(); start=newButton("开始"); start.addActionListener(this); preview=newButton("预览"); preview.addActionListener(this); set=newButton("选项"); set.addActionListener(this); panelPreview=newJPanel(); panelPreview.setLayout(null); Iconicon=newImageIcon("pictrue/pic_"+MyCanvas.pictureID+".jpg"); JLabellabel=newJLabel(icon); label.setBounds(0,0,300,300); panelPreview.add(label); panelNorth=newJPanel(); panelNorth.setBackground(Color.red); panelNorth.add(start); panelNorth.add(preview); panelNorth.add(set); myCanvas=newMyCanvas(); container.add(myCanvas,BorderLayout.CENTER); container.add(panelNorth,BorderLayout.NORTH); this.setTitle("拼图小游戏-13322"); this.setLocation(300,200); this.setSize(308,365); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(3); } publicstaticvoidmain(String[]args){ //TODO自动生成方法存根 newMyMainFrame(); } publicvoidactionPerformed(ActionEventarg0){//对三个按钮事件的处理 //TODO自动生成方法存根 Buttonbutton=(Button)arg0.getSource(); if(button==start){ myCanvas.Start(); }elseif(button==preview){ if(button.getLabel()=="预览"){ container.remove(myCanvas); container.add(panelPreview); panelPreview.updateUI(); container.repaint(); button.setLabel("返回"); }else{ container.remove(panelPreview); container.add(myCanvas); container.repaint(); button.setLabel("预览"); } }elseif(button==set){//修改所选图片 Choicepic=newChoice(); pic.add("小猫"); pic.add("小猪"); pic.add("云"); pic.add("QQ"); pic.add("卡通"); pic.add("花"); inti=JOptionPane.showConfirmDialog(this, pic,"选择图片",JOptionPane.OK_CANCEL_OPTION); if(i==JOptionPane.YES_OPTION){ MyCanvas.pictureID=pic.getSelectedIndex()+1; myCan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全生产检查表及紧急处理方案
- 2025年脱硝催化剂项目申请报告
- 精神文化产品推广承诺书7篇范文
- 2025湖南湘西自治州事业单位(医卫类)引进高层次急需紧缺人才考试考前自测高频考点模拟试题及答案详解一套
- 企业内训课程设计框架技能提升培训版
- 员工培训计划制定模板全面版
- 读红楼梦人物赏析作文6篇
- 2025湖北恩施州立强学校选聘副校长、教师8人模拟试卷及1套参考答案详解
- 读鲁滨逊漂流记后的勇敢探索读后感(8篇)
- 经营权转让合同-经营权转让合同模板5篇
- 新版医疗器械管理制度零售单体药店
- 小学教师专业发展 教学大纲
- 学校装饰装修工程施工方案
- 烟草证 申请书
- 屋面光伏工程施工组织设计
- 山体公园施工方案
- DL-T 5876-2024 水工沥青混凝土应用酸性骨料技术规范
- 胆囊癌完整版本
- 【MOOC】数据库原理及应用-电子科技大学 中国大学慕课MOOC答案
- 节约集约建设用地标准 DG-TJ08-2422-2023
- 老年人体重管理策略研究
评论
0/150
提交评论