魔板游戏Java课程设计报告_第1页
魔板游戏Java课程设计报告_第2页
魔板游戏Java课程设计报告_第3页
魔板游戏Java课程设计报告_第4页
魔板游戏Java课程设计报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录目录 1 设计目的-2 2 总体设计-2 3 关键技术 -3 3.1 系统的功能模块划分.3 3.1.1 puzzleframe.java 类模块.3 3.1.2 puzzlepad.java 类模块.4 3.1.3 squarepoint.java 类模块.4 4程序流程-5 5 主要源代码-7 5.1puzzleframe 模块源程序.7 5.2 puzzlepad 模块源程序.10 5.3 squarepoint 类模块源程序.17 6 运行结果及结论-19 6.1 测试方案.19 6.2 运行结果.19 6. 3 小结.20 7.参考文献-21 1 1 设计目的设计目的 本次课程设

2、计是通过 java 语言编制一个魔板游戏,它是一款经典的智力游戏。而 java 语言是当今较为流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。这次课 程设计,还有利于加深对 java 课程的进一步了解,也可以巩固所学 java 语言基本知识,增 进 java 语言编辑基本功,掌握 jdk、editplus、eclipse、jcreator 等开发工具的运用,拓 宽常用类库的应用。使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通, 全面掌握 java 语言的编程思想及面向对象程序设计的方法。 利用所学高级语言的语法特性,结合数据结构算法、网络知识、文件处理和数据库等知 识

3、完成综合题目的设计和代码实现,并培养锻炼分析程序、撰写报告等能力。 2 2 总体设计总体设计 在设计魔板游戏时,要编写 7 个 java 源文件: puzzlegame.java、puzzlepad.java、point.java、block.java、handleimage.java、verifysuccess.ja va 和 handlemove.java。 魔板游戏除了需要编写的上述 7 个 java 源文件所给出的类外,还需要 java 系统提供的一些 重要的类,如 jmenuitem、jbutton 和 jradiobutton 等类。魔板游戏所用到的一些重要的类以 及之间的组合关系

4、如图 1 所示。 puzzlegame jmenupuzzlepadjradiobuttonjbutton point block handlemove image handleimage verifysuccess 图图 2-12-1 程序模块程序模块 3 3 关键技术关键技术 3.13.1 系统的功能模块划分系统的功能模块划分 在设计魔板游戏时,需要编写 3 个 java 源文件: puzzleframe.java、puzzlepad.java、squarepoint.java。 魔板游戏除了需要编写的上述 3 个 java 源文件所给出的类外,还需要 java 系统提供的 一些重要的类,

5、如 jmenuitem、jbutton 和 jradiobutton 等类。 3.1.13.1.1 puzzleframe.javapuzzleframe.java 类模块类模块 puzzleframe 类负责创建魔板游戏的主窗口,该类含有 main 方法,程序从该类开始。 puzzleframe 类的成员变量中有 4 种重要类型的对象: puzzlepad、jmenuitem、jradiobutton 和 jbutton。puzzleframe 类的主要成员的作用将在 后面的详细设计中阐述,puzzleframe 类主要成员变量(属性)和主要方法如表 3-1、3-2 所 示。 成员变量描述变

6、量类型名称 魔板 开始游戏的按钮 选择玩法 puzzlepad jbutton jradiobutton puzzlepad 开始 数字玩法,图像玩法 表表 3-13-1 puzzleframe.javapuzzleframe.java 主要成员变量(属性)主要成员变量(属性) 名称功能备注 puzzleframe actionperformed main 创建程序主窗口 处理 actionevent 事件 程序开始运行的方法 构造方法 接口方法 表表 3-23-2 puzzleframe.javapuzzleframe.java 主要方法主要方法 3.1.23.1.2 puzzlepad.j

7、avapuzzlepad.java 类模块类模块 puzzlepad 类创建的对象是 puzzleframe 类最重要的成员之一,代表“魔板” 。该类的成 员变量中有 5 种重要类型的对象:point、block 和 image。puzzlepad 类类主要成员变量 (属性)和主要方法如表 3-3、3-4 所示。 描述变量类型名称 魔板中的行数和列数 魔板中方块的宽和高 魔板中二维点数组 魔板中而为方块数组 模板可能用到的图像 int int squarepoint jbutton image rows,colums width,height point block image 表表 3-33

8、-3 puzzlepadpuzzlepad.java.java 主要成员变量(属性)主要成员变量(属性) 名称功能备注 puzzlepad 随机排列数字 随机排列图像 paintcomponent actionperformed 创建魔板对象 随机排列魔板中方块上的数字 随机排列魔板中方块上的图像 绘制图像 处理 actionevent 事件 构造方法 接口方法 表表 3-43-4 puzzlepadpuzzlepad.java.java 主要方法主要方法 3.1.33.1.3 squarepoint.javasquarepoint.java 类模块类模块 squarepoint 类负责创建确

9、定位置的对象,使用 point 对象可以确定 block 对象在 puzzlepad 对象中的位置,即确定“方块”在“魔板”中的位置。squarepoint.java 类主要 成员变量(属性)和主要方法如表 3-5、3-6 所示。 描述变量类型名称 判断点上是否有方块 点上的方块对象 boolean jbutton 有方块 block 表表 3-53-5 squarepointsquarepoint.java.java 主要成员变量(属性)主要成员变量(属性) 名称功能备注 squarepoint get 有方块 set 有方块 setblock getblock 创建“点”对象 判断点上是否

10、有方块 设置点上是否有方块 在点上放置方块 获取点上的方块 构造方法 表表 3-63-6 squarepointsquarepoint.java.java 主要方法主要方法 4 4程序流程程序流程 根据对模板游戏的功能分析,设计得到魔板游戏总流程,如图 4-1 所示: 图图 4-14-1 系统流程图系统流程图 流程解释:程序分为两种玩法,数字玩法和图片玩法,又分为初级和高级两种模式,进入游 戏选择游戏难度,后选择玩法,数字或图片玩法,系统将各切片顺序打乱,移动切片,判断 顺序是否正确,正确游戏结束,不正确继续移动,程序结束。 5 5 主要源代码主要源代码 5.1puzzleframe5.1pu

11、zzleframe 模块源程序模块源程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class puzzleframe extends jframe implements actionlistener puzzlepad puzzlepad; jbutton 开始; jmenubar bar; jmenu filemenu; jmenuitem 初级,高级; jradiobutton 数字玩法,图像玩法; buttongroup group=null; container con=null;

12、 public puzzleframe() bar=new jmenubar(); filemenu=new jmenu(魔板游戏); 初级=new jmenuitem(初级); 高级=new jmenuitem(高级); filemenu.add(初级); filemenu.add(高级); bar.add(filemenu); setjmenubar(bar); 初级.addactionlistener(this); 高级.addactionlistener(this); 开始=new jbutton(开始玩); 开始.addactionlistener(this); group=new

13、buttongroup(); 数字玩法=new jradiobutton(数字玩法,true); 图像玩法=new jradiobutton(图像玩法,false); group.add(数字玩法); group.add(图像玩法); puzzlepad=new puzzlepad(3,3,50,50); con=getcontentpane(); con.add(puzzlepad,borderlayout.center); jpanel pnorth=new jpanel(); pnorth.add(数字玩法); pnorth.add(图像玩法); pnorth.add(开始); con.

14、add(pnorth,borderlayout.north); con.validate(); addwindowlistener(new windowadapter() public void windowclosing(windowevent e) system.exit(0); ); setvisible(true); setbounds(100,50,440,360); validate(); public void actionperformed(actionevent e) if(e.getsource()=开始) if(数字玩法.isselected() puzzlepad.随机

15、排列数字(); else if(图像玩法.isselected() puzzlepad.随机排列图像(); else if(e.getsource()=初级) con.remove(puzzlepad); puzzlepad=new puzzlepad(3,3,50,50); con.add(puzzlepad,borderlayout.center); con.validate(); this.validate(); else if(e.getsource()=高级) con.remove(puzzlepad); puzzlepad=new puzzlepad(4,4,50,50); con

16、.add(puzzlepad,borderlayout.center); con.validate(); this.validate(); public static void main(string args) new puzzleframe(); 5.25.2 puzzlepadpuzzlepad 模块源程序模块源程序 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.vector; import java.awt.i

17、mage.*; public class puzzlepad extends jpanel implements actionlistener int rows ,colums; int width,height; squarepoint point; jbutton block; vector vector; int leftx=50,lefty=50; image image=null; toolkit tool=null; mediatracker mt; int 图像的宽,图像的高; image blockimage; boolean 画图像=true; public puzzlepa

18、d(int r,int c,int w,int h) setlayout(null); vector=new vector(); rows=r; colums=c; width=w; height=h; tool=gettoolkit(); try image=tool.createimage(dog.jpg); mt.addimage(image,1); mt.waitforall(); catch(exception e) block=new jbuttonrowscolums; point=new squarepointrowscolums; for(int i=0;irows;i+)

19、for(int j=0;jcolums;j+) if(i=rows-1) blockij.setsize(width,height); blockij.addactionlistener(this); vector.add(blockij); for(int i=0;irows;i+) for(int j=0;jcolums;j+) pointij=new squarepoint(50+j*width,50+i*height); if(i=rows-1) public void actionperformed(actionevent e) jbutton button=(jbutton)e.g

20、etsource(); int x=button.getbounds().x; int y=button.getbounds().y; int m=0,n=0; for(int i=0;irows;i+) for(int j=0;jcolums;j+) if(pointij.getx()=x n=j; int 上=math.max(0,m-1); int 下=math.min(rows-1,m+1); int 左=math.max(0,n-1); int 右=math.min(colums-1,n+1); if(point上n.get 有方块()=false) point上n.setblock

21、(button,this); pointmn.set 有方块(false); else if(point下n.get 有方块()=false) point下n.setblock(button,this); pointmn.set 有方块(false); else if(pointm左.get 有方块()=false) pointm左.setblock(button,this); pointmn.set 有方块(false); else if(pointm右.get 有方块()=false) pointm右.setblock(button,this); pointmn.set 有方块(false

22、); public void 随机排列数字() vector.removeallelements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(math.random()*vector.size(); jbutton b=(jbutton)vector.elementat(n); b.settext(+i); b.seticon(null); b.setborder(borderfactory.createlineborder(color.blue,1); vector.remove(n); i+; 画图像=false; repain

23、t(); public void 随机排列图像() try 图像的宽=image.getwidth(this); 图像的高=image.getheight(this); int w=图像的宽/colums; int h=图像的高/rows; blockimage=new imagerows*colums; int k=0; pixelgrabber pg=null; imageproducer ip=null; for(int i=0;irows;i+) for(int j=0;jcolums;j+) int pixels= new intw*h; pg=new pixelgrabber(im

24、age,j*w,i*h,w,h,pixels,0,w); pg.grabpixels(); ip=new memoryimagesource(w,h,pixels,0,w); blockimagek=tool.createimage(ip); k+; vector.removeallelements(); for(int i=0;irows;i+) for(int j=0;j0) int n=(int)(math.random()*vector.size(); jbutton b=(jbutton)vector.elementat(n); b.seticon(new imageicon(blo

25、ckimagenum); b.setborder(null); b.settext(); vector.remove(n); num+; 画图像=true; repaint(); catch(exception ee) public void paintcomponent(graphics g) super.paintcomponent(g); g.setcolor(color.black); g.fillrect(leftx,lefty,colums*width,rows*height); if(画图像=true) g.drawimage(image,colums*width+80,heig

26、ht,colums*width,rows*height,this); for(int i=0;irows;i+) g.setcolor(color.white); g.drawline(colums*width+80,height+i*height, colums*width+80+colums*width,height+i*height); for(int j=0;jcolums;j+) g.drawline(colums*width+80+j*width,height, colums*width+80+j*width,height+rows*height); g.setcolor(colo

27、r.black); g.fillrect(colums*width+80+(colums-1)*width, height+(rows-1)*height, width, height); 5.35.3 squarepointsquarepoint 类模块源程序类模块源程序 import java.awt.*; import javax.swing.jbutton; public class squarepoint int x,y; boolean 有方块; jbutton block=null; container con=null; public squarepoint(int x,int y) this.x=x; this.y=y; public boolean get 有方块() return 有方块; public void set 有方块(boolean boo) 有方块=boo; public int getx() return x; public int gety() return y; public void setblock(jbutton block,container con) this.con=con; this.block=block; con.add(block); block.setlo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论