版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常州工学院学士学位设计一、设计任务1.设计任务与要求小组设计的拼图游戏是一个简单的益智小游戏,通过程序运行后用鼠标就可以操作界面上的按钮或者菜单选项开始拼图游戏,界面的最上方有本人班级的名字“13322”,界面上还有“开始”“预览”“选项”三个菜单,程序运行后就可以通过鼠标控制开始游戏。要求:小组设计的拼图游戏是一个具有一个简单的系统界面,操作简单易行,上手快,适用于广大用户的小游戏,先通过玩家鼠标点击“选项”选择要拼的图片,然后用鼠标点击分散的小图片操作来完成拼图。并且成功拼成图片后会出现“恭喜你完成拼图,加油!”一句话。2.设计方法与思路由于我们要将这个游戏写成一个应用程序,所以首先要设计一下游戏的框架和菜单。游戏的框架采用标准的Windows框架,在上面有标题栏、菜单栏,以方便玩家控制游戏。我们应该先做好这一部分。菜单栏包括游戏的开始、预览、选项等控制菜单。框架中间嵌入显示分散的小图片。然后,应该在一个面板上构建游戏的界面,将这个面板嵌入到游戏的大框架里。这样整个游戏的界面就出来了。对菜单以及界面上的控制按钮进行响应,并相应地来控制游戏。这时我们需要添加对菜单和按钮的事件响应方法。在游戏面板构建好这后,我们应该让游戏能够玩起来,这一部分主要是编写一些算法,用来控制游戏。这里我们还应该增加对鼠标事件的响应,让玩家用鼠标控制游戏。该游戏的流程图见图。3.设计目标在这次课程设计中,主要是运用Java语言来编写,并可运用其他的技术。在我们的系统中,还采用了多线程、异常处理、画图、Socket技术、Swing控件、网络传输中的广播等技术,而这些知识都是我们没有学过的,这就要求我们去查阅相关书籍。正因为这样,才锻炼了我的自学能力,为以后的学习与工作打下了基础。
二、设计说明1.题目描述此拼图游戏是一个myeclipse程序,用户通过点击游戏界面上的按钮或菜单栏选项控制游戏的开始、预览、选项等来开始游戏。此游戏分散的小图片的移动规则是小图片会朝着空位置方向移动,玩家先在界面上选择开始游戏,然后通过鼠标左键点击要移动的小图片,小图片会自动移动到原来没有图片的空位置,移动时,预备移往的图片旁边必须有可供移往的空位置。预览菜单的功能是玩家在游戏中任何时候都可以点击进入观看完成拼图后完整的大图片,选项菜单中,程序为玩家提供了很多不同种类的图片,玩家可以根据自己喜好选择自己喜欢的图片开始拼图游戏。2.界面及功能详细设计拼图游戏的程序由三个类构成,其中类MyMainFrame包含main()方法,另外两个类中MyCanvas中则含六个方法:方法MyCanvas()、方法reLoadPictrue()、方法isFinish()、方法Start()和方法paint()、方法mousePressed(MouseEventarg0);另一个类Cell类中则包含了一个方法move(Stringdirection,intsleep)。此拼图游戏由三个类实现所有设计需求。第一个类MyMainFrame定义了一个main()方法,创建了MyMainFrame类实例,设置了程序的入口同时也设置了拼图游戏的Windows窗口主界面的菜单栏以及主界面分散图片上的各个按钮连接。第二个类MyCanvas包含了一个move(Stringdirection,intsleep)方法,这个方法控制主界面上分散的小图片受到鼠标的按钮响应后图片的移动,它控制小图片往没有图片的空位置移动。第三个类MyCanvas中则含五个方法:方法MyCanvas()、方法reLoadPictrue()、方法isFinish()、方法Start()和方法paint();另一个类Cell类中则包含了一个方法move(Stringdirection,intsleep)。它们各自实现的功能分析如下:(1)MyCanvas()方法中实现了游戏系统对将要进行拼图的图片加载,函数中设置了游戏的图片库中图片在电脑上的路径,然后调用函数找到相对应的图片将其分割成九个大小相等的小方格,并且去掉其中最后一个方格上的图案,最后再设置好没有图案的小方格在整个界面上的位置。此方法先定义了一个布尔型变量hasAddActionListener并将其值赋为false;用hasAddActionListener来设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件;然后在定义方格,加载当前玩家指定的图片将其分割放到定义好的方格中。拼图游戏加载图片模块的实现(2)方法reLoadPictrue()reLoadPictrue()方法则实现了重新加载另外一张图片的过程。当玩家完成一幅图的拼图或者是不能完成当前图片的拼图想要换一幅图在进行游戏的时候就调用此函数更换图片,玩家通过游戏主界面上菜单栏上的选项按钮响应调用此函数更换图片。选项菜单操作的功能图(3)方法isFinish()isFinish()方法主要是通过比较玩家拼好的图片和原图片想比较,若除去没有图案的空方格两张图片完全吻合则判断出玩家正确完成拼图。(4)Start()方法的功能先是是对分配好图案的小方格进行重新排列,打乱顺序,当第一个方格距左上角较近时,产生0-4,对应空方格的上下左右移动,空方格左移动,与左侧方格互换位置,5到8对应的方格也同理进行移动打乱图片顺序;当小方格图片的顺序打乱后则调用addMouseListener方法为第个方格添加动作事件,这样单击按钮就能移动小方格了。完成了方格的按钮响应。图5调用start方法的功能开始游戏功能图(5)方法paint()方法的功能则是工具接收到的鼠标的按钮响应在图中主界面上的小图采取相应的移动来进行游戏,其中调用了类库中MyCanvs中的mousePress(MouseEventarg0)方法。同时调用isFinish()函数将拼好的图片和原来图片库中的图片进行对比,判断拼图是否完成,没有完成就不做处理,游戏继续,若拼图完成则输出“恭喜你完成拼图,加油!”的鼓励标语。图6完成拼图游戏后的结束界面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; myCanvas.reLoadPictrue(); Iconic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024个人开展民族团结一家亲活动计划
- 社区单位工作计划
- 电气检测报告总结计划总结计划计划总结计划计划计划
- 关于八年级下学期班主任工作计划
- 学校―学年度学第二学期教学工作计划
- 2024年摩托车销售工作计划范文
- 小学四年级德育计划范文
- 热电公司行风建设工作计划
- 有关安全生产监督年度工作计划
- 幼儿园2024园本培训工作计划
- 《技术的含义及作用》课件
- 高空抛物安全宣传教育课件
- (必会)军队文职(药学)近年考试真题题库(含答案解析)
- 电气自动化试题及答案
- 2022年大学生职业生涯规划书1
- 2023-2024学年河南省焦作市高二下学期6月期末考试物理试题(解析版)
- 部编人教版六年级上册道德与法治全册教案
- 第16课 大家排好队 一年级道德与法治上册(2024版)教学设计
- 安保设施保障措施方案
- 2024市场营销知识竞赛题库及答案(共169题)
- 2024年平面设计师技能及理论知识考试题库(附含答案)
评论
0/150
提交评论