毕业论文-基于JAVA的扫雷游戏设计18480.doc

上传人:韩长文 文档编号:3945822 上传时间:2019-10-10 格式:DOC 页数:29 大小:225.02KB
返回 下载 相关 举报
毕业论文-基于JAVA的扫雷游戏设计18480.doc_第1页
第1页 / 共29页
毕业论文-基于JAVA的扫雷游戏设计18480.doc_第2页
第2页 / 共29页
毕业论文-基于JAVA的扫雷游戏设计18480.doc_第3页
第3页 / 共29页
毕业论文-基于JAVA的扫雷游戏设计18480.doc_第4页
第4页 / 共29页
毕业论文-基于JAVA的扫雷游戏设计18480.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《毕业论文-基于JAVA的扫雷游戏设计18480.doc》由会员分享,可在线阅读,更多相关《毕业论文-基于JAVA的扫雷游戏设计18480.doc(29页珍藏版)》请在三一文库上搜索。

1、 课 程 设 计 报 告 课程名称: 计算机技术综合课程设计 题 目: 基于JAVA语言的扫雷游戏设计 学 院: 信息工程 系: 计算机 专 业: 计算机科学与技术 班 级: 学 号: 学生姓名: 时 间: 2008年1月11日至1月25日 基于JAVA语言的扫雷游戏设计摘 要:本文介绍的是扫雷游戏的设计方法。该游戏使用的是JAVA语言编写,主要是用了JAVA的程序界面设计的方法和各种事件监听和处理的方法。关键字:扫雷 界面设计 JAVA 事件监听 事件处理1 前言扫雷游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果挖开的是地雷,您将输掉游戏。扫雷游戏在程序运行后生成指定的地雷,在鼠

2、标左键点击下寻找地雷,右键点击下标记地雷,点击笑脸的标记开始重新游戏,并给出胜利和失败的条件:标出所有的地雷和左键点中地雷。点击键盘Q键将推出游戏。在游戏菜单上,单击开局。单击游戏区中的任何方块,要启动计时器。通过单击即可挖开方块。如果挖开的是地雷,则您输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。要标记您认为可能有地雷的方块,请右键单击它。游戏区包括雷区、地雷计数器和计时器。2 本课程设计的定位2.1 问题定义和内容简介本课程设计是用JAVA编写一个扫雷游戏。程序的功能是生成指定数目的地雷,通过鼠标操作玩游戏。点击屏幕上的笑脸重新开始游戏;标出所有地雷后胜出;当鼠标

3、左键击中地雷失败;按Q键退出游戏。2.2 论文研究内容的意义扫雷游戏是WINDOWS系统自带的一个娱乐性的小游戏,在玩扫雷游戏的过程中 也可以很好的培养耐心和细心,同时在无聊得时候可以用以休闲娱乐,如果我们自己也能动手做一个小程序来实现这个功能,自然能乐在其中。3 扫雷游戏的相关知识点3.1 JAVA的图形界面图形界面简称GUI,是用图形的方式,借助菜单、按纽等标准界面元素和鼠标操作,帮助用户方便地想计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术。JAVA的图形界面技术既为使用java.awt包来创建图形界面的方法,包括AWT组件、窗口和菜单设计、布局管理器以及

4、绘图操作等。3.2 AWT概述AWT既抽象窗口工具集,用于图形用户界面的开发。AWT的功能包括以下方面:(1)丰富的图形界面组件。(2)强大的事件处理模型图形和图形工具,包括形状、颜色和字体。(3)布局管理器,可以进行灵活的的窗口布局,设计特定窗口的尺寸和和屏幕分辨率。(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作。(5)打印和无鼠标操作。Java.awt是java基本包中最大的一个,其中定义了所有的GUI组件类,以及其他用于构造图形界面的类。3.3 AWT基本组件(1)标签组件(Label)标签组件显示的是静态文本,在通常情况下是不能编辑的,能起到提示的作用Label组件

5、有三种构造函数:Label(): 创建空的标签Label(String):创建一个带初始字符串的标签。Label(String,int):创建一个带初始字符串及指定对齐方式的标签。(2)文本域文本域一般用来让用户输入姓名、信用卡号等这样的信息,它是一个能够接收用户的键盘输入的小块区域。TextField():创建空的文本域(3)按钮(Button)几乎所有的交互式程序中都会有按纽,它是一种交互能力强且交互方便的控件,这个控件提供了“按下并动作”的基本用户界面。按纽的构造方法有:Button():建立一个没有标示字符串的新按纽类对象。Button(String Label):建立一个标示字符串为

6、Label的新按纽类的对象(4)画板组件(Panel)我们在界面上安排各种组件时,有时会需要将组件成组放置,这时就可以使用面板组件。Panel是最简单的容器组件,本身是一个矩形区域,可以在其中放入各种组件。但它仅仅是安排各种组件的一种结构,需要最后加入到别的容器中才能实现GUI的功能。面板组件的创建Panel():用默认的布局管理器创建面板组件。Panel(LayoutManager layout):用指定的布局管理器创建面板组件。(5)框架窗口组件(Frame)Frame是独立于浏览器的可独立运行的主窗口,通常用于进行开发桌面应用程序。Frame拥有边界和标题栏设置,其大小可以进行设置调整。

7、Frame里面需要加入组件,也可以加入菜单,或在上面绘图。Frame的创建Frame():创建一个没有窗口标题的窗口框架。Frame(String):创建一个指定窗口标题的窗口框架。(6)布局管理器FlowLayout布局管理器FlowLayout布局管理是一种最简单的布局管理方法,是Panel的默认布局。它以流式的方式,自左向右,自上而下地放置容器中的组件,即组件按每行先后自左向后放置,一行放不下再换行。FlowLayout布局管理器的创建FlowLayout():创建默认的FlowLayout布局管理器FlowLayout(int):以指定的对齐方式创建FlowLayout布局管理器。其中

8、的参数有FlowLayout.LEFT、FlowLayout.RIGHT、FlowLayout.CENTERFlowLayout(int,int,int):以指定的对齐方式及间距创建FlowLayout布局管理器。其中第一个参数为对齐方式,第二个参数为组件间间距,第三个参数为列间距。(7)事件处理事件处理是一个接受事件、解释事件并处理用户交互的方法。事件处理有三个要素:事件源 事件源是一个时间的产生者,如按牛、窗口及文本域等。事件类型 JAVA中所有的事件都封装成一个类,这些事件类被集中在java.awt.exent包和java.swing.event包中,所有的事件类均继承了AWTEvent

9、类和一个方法getSouce()方法,该方法返回发生事件的对象。事件监听器 不同的类型事件发生后,由事件监听器接受事件并调用响应的事件处理方法,所有的事件监听器实际上都是一个java.awt.exent包中的借口,继承了java.util.EventListener接口。不同的事件有不同的处理方法,(8)键盘事件处理该程序使用的是键盘监听事件,键盘事件对应的事件类是KeyEvent类,使用的该类的方法是getKeyCode()获得按下或释放的键代码getKeyText()获得按下或释放的键的字符串。键盘事件对应的事件监听器为:KeyListener或KeyAdapter实现键盘事件的操作步骤是

10、:第一步,注册KeyListener监听器addKeyListener().当事件源所在的类已经实现KeyListener的接口时,参数可用this,否则需创建或继承一个KeyListener第二步,实现KeyListener接口的所有方法,即KeyPressed(KeyEvent e)、KeyReleased(KeyEvent e)、KeyTyped(MouseEvent e)。4 功能模块描述本扫雷游戏的实现,共分为五个模块,分别表述为:模块1 定义雷的类,鼠标左键点击不是雷,右键点击是雷,数字表示周围有多少个雷,具体实现函数如下示:class Min extends JPanel /雷的

11、类 /备注:鼠标的左键 = 1;右键 = 3;中键 = 2 private int flag = 0,statu = 0; /定义雷的属性 0:没有打开 1:打开 2:标示为雷 3:不确定 /flag = 0 不是雷 ; flag = 1是雷 private int but,count = 0; /but:哪一个鼠标键被按下去了 count:这个区域周围有多少个雷 private int mx = 0,my = 0,mw = 10; /定义雷的坐标和宽度 public Min() /构造函数 statu = 0; public Min(int f,int x,int y,int w) /构造函

12、数 flag = f; mx = x; my = y; mw = w; public int getFlag()return flag; public int getStatu()return statu; public int getMx()return mx; public int getMy()return my; public int getMw()return mw; public int getCount()return count; public void setFlag(int f)flag = f; public void setCount(int c)count = c;

13、public void setData(int f,int x,int y,int w,int s) /传递值 flag = f; mx = (x-1)*w; my = (y-1)*w; mw = w-1; statu = s; /根据你点击鼠标的不同来改变雷的属性模块2:雷的分布和雷的画法具体实现函数的核心代码如下示:class DrawPanel extends JPanel private int i,j; private int f = 0; /if f = 1 then game over ,if f =2 then win private int chx = 0,chy = 0;

14、/专门记录坐标x,y的值 private int msum = 6,ksum = 0; /msum:雷的个数,ksum:标示雷的个数 private int bx = 10,by = 10,bw = 40; /bx,by:棋盘的大小,bw:棋子的大小 public Min board = new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new M

15、in(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new

16、 Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),ne

17、w Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),

18、new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()

19、,new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min

20、(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Mi

21、n(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new

22、Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new

23、 Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),n

24、ew Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),

25、new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(

26、),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min

27、(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(), ; /画坐标为ax,ay区域的雷的状态 public void dra

28、w(Graphics g,int ax,int ay) int x,y,w; /坐标x,y;和宽度:w int s,c,flag; /状态;雷的个数; int cx = bw/2 - 4; int cy = bw/2 + 4; x = boardaxay.getMx(); y = boardaxay.getMy(); w = boardaxay.getMw(); s = boardaxay.getStatu(); c = boardaxay.getCount(); flag= boardaxay.getFlag();public int getCount(int ai,int aj) int

29、sum = 0; if(boardaiaj.getFlag() = 1) return sum; if(ai1&aj1&aibx&aj1&aj1&aj1&ai1&aibx&aj=by) sum = boardai-1aj-1.getFlag()+ boardaiaj-1.getFlag()+ boardai+1aj-1.getFlag()+ boardai-1aj .getFlag()+ boardai+1aj .getFlag(); return sum; /传入参数:几列,几行,宽度,雷数 public void initMin(int ax,int ay,int aw,int as) i

30、nt k = 1; /表明产生的第几个雷 Random r; /随机数 f = 0; /f=0表示游戏还没有结束 ksum = 0; bx = ax; by = ay; bw = aw; msum = as; r = new Random(); /初始化底盘的值 for(i = 1;i = bx;i+) for(j=1;j=by;j+) boardij.setData(0,i,j,bw,0); /随机产生雷 while(k = msum) i = r.nextInt(bx)+1; j = r.nextInt(by)+1; if(boardij.getFlag() != 1) boardij.s

31、etFlag(1); k+; /非雷区的周围有几个雷,初始化其值 for(i = 1;i = bx;i+) for(j=1;j=by;j+) boardij.setCount(getCount(i,j); setBackground(Color.white); repaint(); 模块3 图形界面的设计,具体实现函数如下示:public class Mine extends JFrame implements ActionListener Container cp = getContentPane(); JButton bt = new JButton(_); Label l1 = new

32、Label(列:); Label l2 = new Label(行:); Label l3 = new Label(宽度:); Label l4 = new Label(雷的个数:); TextField tf1 = new TextField(10,2); /列 TextField tf2 = new TextField(10,2); /行 TextField tf3 = new TextField(40,2); /宽度 TextField tf4 = new TextField(15,2); /雷的个数 int x=10,y=10,w=40,sum=15; DrawPanel dp = n

33、ew DrawPanel(x,y,w,sum); public Mine() setBackground(Color.white); cp.setLayout(null); cp.add(dp); cp.add(bt); cp.add(tf1); cp.add(tf2); cp.add(tf3); cp.add(tf4); cp.add(l1); cp.add(l2); cp.add(l3); cp.add(l4); l1.setBounds(20 ,10,20,20); tf1.setBounds(40,10,20,20); l2.setBounds(70,10,20,20); tf2.se

34、tBounds(90,10,20,20); l3.setBounds(120,10,40,20); tf3.setBounds(160,10,20,20); l4.setBounds(190,10,60,20); tf4.setBounds(250,10,20,20); bt.setBounds(300,10,80,20); dp.setBounds(20,40,x*w,y*w); setResizable(false); setSize(x*w+40,y*w+80); setTitle(扫雷); show(); bt.addActionListener(this); addWindowLis

35、tener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e) if(e.getSource() = bt) /x = Integer.parseInt(tf1.getText(); /y = Integer.parseInt(tf2.getText(); /w = Integer.parseInt(tf3.getText(); sum = Integer.parseInt(tf4.getText();

36、 setSize(x*w+40,y*w+80); dp.setBounds(20,40,x*w,y*w); show(); dp.initMin(x,y,w,sum); 模块4 游戏胜利和失败的条件创建,当所有雷都被找出时胜利,当左键点击到雷时失败,具体实现函数如下示:public void paint(Graphics g) int x,y,w; int s; int cx = bw/2 - 4; int cy = bw/2 + 4; g.clearRect(0,0,600,600); for(i=1;i=bx;i+) for(j=1;j=by;j+) draw(g,i,j); if(f =

37、 1) Font f = new Font(11,1,70); Font fo = g.getFont(); g.setColor(Color.white); g.setFont(f); /g.setSize(); g.drawString(Game Over,0,200); g.setFont(fo); if( f = 2 ) Font f = new Font(11,1,70); Font fo = g.getFont(); g.setColor(Color.white); g.setFont(f); /g.setSize(); g.drawString(You win!,0,200);

38、g.setFont(fo); 模块5 键盘事件的监听,使用Q键退出图形界面,具体实现函数如下示:public void getQ() int keyCode; tf1.addKeyListener(new KeyAdapter() public void keyPressed(KeyEvent e) if(e.getKeyChar()=Q|e.getKeyChar()=q) System.exit(0); ); public static void main(String args) Mine nowMine=new Mine(); nowMine.getQ();5 程序流程图的设计6 运行结

39、果1 运行程序,生成指定行列数的扫雷游戏的图形界面,运行结果如图所示2 鼠标左键点击到雷时,失败,游戏结束,运行结果如图所示:3 改变雷的个数,从15个雷改为20个雷,开始游戏,运行结果如图所示:4 所有雷都被找出时,游戏胜利,运行结果如图所示:7总结这不是我第一次做课程设计,但这个扫雷游戏我平常也会经常的玩,所以对于做这个扫雷游戏的课程设计我也是很兴奋,虽然这设计过程中遇到很多困难,但都在尽力的克服,对于我自己做出的这个程序我还是比较满意的,基本功能基本都实现了,图形界面虽然不能说是非常友好,但好象也至少能看的过去,通过这个课程设计我学到了很多的东西,把以前所学的课本知识很好的用到了实践当中,并且通过实践,重新发现了很多问题和很多以前不理解的没掌握的知识点,并且通过完成这个设计,很好的重新的理解并掌握了各种知识点。以下是我对扫雷游戏的设计的总结:在这个设计过程中,雷的分布是一个关键,我是这样做的,首先我们在雷区上随机地放上雷,这可以用random类来实现。当没有雷

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1