1、在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。1981年, 微软公司的 罗伯特杜尔 和 卡特约翰逊 两位工程师在Windows 3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地
2、雷,则游戏结束。二、正文2.1设计题目及要求(需求分析)1设计题目:基于Java的扫雷游戏2游戏的描述:本产品是一个简单的游戏软件,目的是尽快找到雷区中的所有地雷,而不许踩到地雷。如果挖开的是地雷,您将输掉游戏。3实现的功能:可以实现简单的游戏功能开始游戏、改变雷数。4游戏的界面:游戏的菜单栏中有开始游戏和列行 宽 选项,游戏的显示界面中有游戏的主界面和信息界面(列、行、宽和雷的个数)。5软件可实现扫雷游戏的简单操作:1)、游戏功能:点击鼠标左键点击下寻找地雷右键点击下标记地雷点击笑脸的标记开始重新游戏计雷功能:游戏当前雷数2)、设置功能:设置扫雷的行、宽、列和改变雷数6用户的操作:在游戏菜单
3、上,单击开局。单击游戏区中的任何方块,要启动计时器。通过单击即可挖开方块。如果挖开的是地雷,则您输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。要标记您认为可能有地雷的方块,请右键单击它。2.2概要(总体)设计1流程图2扫雷概述(类)JAVA的图形界面图形界面简称GUI,是用图形的方式,借助菜单、按纽等标准界面元素和鼠标操作,帮助用户方便地想计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术。JAVA的图形界面技术既为使用java.awt包来创建图形界面的方法,包括AWT组件、窗口和菜单设计、布局管理器以及绘图操作等。AWT概述 AWT既抽象
4、窗口工具集,用于图形用户界面的开发。AWT的功能包括以下方面:(1)丰富的图形界面组件。(2)强大的事件处理模型图形和图形工具,包括形状、颜色和字体。(3)布局管理器,可以进行灵活的的窗口布局,设计特定窗口的尺寸和和屏幕分辨率。(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作。(5)打印和无鼠标操作。Java.awt是java基本包中最大的一个,其中定义了所有的GUI组件类,以及其他用于构造图形界面的类。AWT基本组件(1)标签组件(Label)标签组件显示的是静态文本,在通常情况下是不能编辑的,能起到提示的作用Label组件有三种构造函数:Label(): 创建空的标签La
5、bel(String):创建一个带初始字符串的标签。Label(String,int):创建一个带初始字符串及指定对齐方式的标签。(2)文本域文本域一般用来让用户输入姓名、信用卡号等这样的信息,它是一个能够接收用户的键盘输入的小块区域。TextField():创建空的文本域(3)按钮(Button) 几乎所有的交互式程序中都会有按纽,它是一种交互能力强且交互方便的控件,这个控件提供了“按下并动作”的基本用户界面。按纽的构造方法有:Button():建立一个没有标示字符串的新按纽类对象。Button(String Label):建立一个标示字符串为Label的新按纽类的对象(4)画板组件(Pan
6、el)我们在界面上安排各种组件时,有时会需要将组件成组放置,这时就可以使用面板组件。Panel是最简单的容器组件,本身是一个矩形区域,可以在其中放入各种组件。但它仅仅是安排各种组件的一种结构,需要最后加入到别的容器中才能实现GUI的功能。面板组件的创建Panel():用默认的布局管理器创建面板组件。Panel(LayoutManager layout):用指定的布局管理器创建面板组件。(5)框架窗口组件(Frame) Frame是独立于浏览器的可独立运行的主窗口,通常用于进行开发桌面应用程序。Frame拥有边界和标题栏设置,其大小可以进行设置调整。Frame里面需要加入组件,也可以加入菜单,或
7、在上面绘图。 Frame的创建Frame():创建一个没有窗口标题的窗口框架。Frame(String):创建一个指定窗口标题的窗口框架。2.3详细设计游戏胜利和失败的条件创建,当所有雷都被找出时胜利,当左键点击到雷时失败,具体实现函数如下示:public void paint(Graphics g) 胜利失败条件 g.clearRect(0,0,600,600); g.drawString(Game Over,0,200);2.4 程序的核心代码public void paint(Graphics g) int x,y,w; int s; int cx = bw/2 - 4; int cy
8、= bw/2 + 4; for(i=1;i=bx;i+) for(j=1;j=by;j+) draw(g,i,j); if(f = 1) Font f = new Font(11,1,70); Font fo = g.getFont(); g.setColor(Color.white); g.setFont(f); /g.setSize(); g.setFont(fo); if( f = 2 )You win!2.5调试中出现的问题1. 类定义未找到错误java.lang.NoClassDefFoundError。原因分析由于该程序调用到的JAVA 类文件没有正确上传。JA
9、VA 类文件已经上传,但应用服务器并未检测到,建议将JSP 页面重新更新。解决方案将JAVA 类文件重新上传。将JSP 页面更新并上传;或将应用程序服务器进行重新启动。2. 解决java.lang.StackOverflowError 错误。错误信息严重:Exceptioninitializingpagecontextjava.lang.StackOverflowError.运行一个程序,JVM 会开辟一块内存空间去储存程序进行时的某些信息,当程序运行时需要储存的信息超过了分配的空间,就会出现那样的问题.比如死循环,递归次数过多,等等。首先从程序代码优化方面着手,检查是否有死循环、递归等程序,
10、如果有,修正、优化相关代码。2.6运行结果1 运行程序,生成指定行列数的扫雷游戏的图形界面,运行结果如图所示2 鼠标左键点击到雷时,失败,游戏结束,运行结果如图所示:3 改变雷的个数,从15个雷改为20个雷,开始游戏,运行结果如图所示:4 所有雷都被找出时,游戏胜利,运行结果如图所示:三、总 结这不是我第一次做课程设计,但这个扫雷游戏我平常也会经常的玩,所以对于做这个扫雷游戏的课程设计我也是很兴奋,虽然这设计过程中遇到很多困难,但都在尽力的克服,对于我自己做出的这个程序我还是比较满意的,基本功能基本都实现了,图形界面虽然不能说是非常友好,但好象也至少能看的过去,通过这个课程设计我学到了很多的东
11、西,把以前所学的课本知识很好的用到了实践当中,并且通过实践,重新发现了很多问题和很多以前不理解的没掌握的知识点,并且通过完成这个设计,很好的重新的理解并掌握了各种知识点。四、参考文献1耿祥义.JAVA大学实用教程.电子工业出版社.2005.032朱战立,沈伟编著Java程序设计实用指南电子工业出版社,2005.13美Cay S.Horstmann.程峰等译. JAVA2核心技术.机械工业出版社.2003.064 陈占伟,刘旭,陈文霞 Java程序设计武昌,武汉大学出版社,2011年7月 第一版5 朱庆生,古平,java程序设计北京,清华大学出版社,20116 包海山,李占玲,java程序设计案
12、例教程,北京,机械工业出版社7 刘瑞挺,侯冬梅,java程序设计实用教程,北京,清华大学出版社,2009五、附 录全部程序代码import java.awt.*;import javax.swing.*;import java.util.Random;import java.awt.event.*;class Min extends JPanel /雷的类 /备注:鼠标的左键 = 1;右键 = 3;中键 = 2 private int flag = 0,statu = 0; /定义雷的属性 0:没有打开 1:打开 2:标示为雷 3:不确定 /flag = 0 不是雷 ; flag = 1是雷
13、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) /构造函数 flag = f; mx = x; my = y; mw = w; public int getFlag()return flag; public int getStatu()return statu; public int getMx()
14、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; public void setData(int f,int x,int y,int w,int s) /传递值 mx = (x-1)*w; my = (y-1)*w; mw = w-1; statu = s; /根据你点击鼠标的不同来改变雷的属
15、性 public int sendKey(int key) /返回值,如果游戏结束则返回-1 int rtn = 1; if(key = 3) switch(statu) case 1: break; case 2: statu = 3; case 3: case 0: statu = 2; rtn = 1; if(key = 1 & statu = 0) switch(flag) statu = 1; rtn = 2; rtn = -1; return rtn;class DrawPanel extends JPanel private int i,j; private int f = 0;
16、 /if f = 1 then game over ,if f =2 then win private int chx = 0,chy = 0; /专门记录坐标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 Min(),new Min(),new Min(),new Min(),new Min(), new Min(),new Min(),new Min(),new Min(),new Min(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1