扫雷游戏课程设计报告.docx
- 文档编号:6108089
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:39
- 大小:104.42KB
扫雷游戏课程设计报告.docx
《扫雷游戏课程设计报告.docx》由会员分享,可在线阅读,更多相关《扫雷游戏课程设计报告.docx(39页珍藏版)》请在冰豆网上搜索。
扫雷游戏课程设计报告
课程设计报告
课程名称:
计算机技术综合课程设计
题目:
扫雷游戏课程设计
学院:
信息工程系:
计算机
专业:
计算机科学与技术
班级:
学号:
学生姓名:
时间:
2008年1月11日至1月25日
扫雷游戏设计
摘要:
本文介绍的是扫雷游戏的设计方法.该游戏使用的是JAVA语言编写,主要是用了JAVA的程序界面设计的方法和各种事件监听和处理的方法。
关键字:
扫雷界面设计JAVA事件监听事件处理
1前言
扫雷游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。
如果挖开的是地雷,您将输掉游戏。
扫雷游戏在程序运行后生成指定的地雷,在鼠标左键点击下寻找地雷,右键点击下标记地雷,点击笑脸的标记开始重新游戏,并给出胜利和失败的条件:
标出所有的地雷和左键点中地雷.点击键盘Q键将推出游戏。
在游戏菜单上,单击开局.单击游戏区中的任何方块,要启动计时器。
通过单击即可挖开方块。
如果挖开的是地雷,则您输掉游戏。
如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷.要标记您认为可能有地雷的方块,请右键单击它。
游戏区包括雷区、地雷计数器和计时器。
2本课程设计的定位
2。
1问题定义和内容简介
本课程设计是用JAVA编写一个扫雷游戏.
程序的功能是生成指定数目的地雷,通过鼠标操作玩游戏。
点击屏幕上的笑脸重新开始游戏;标出所有地雷后胜出;当鼠标左键击中地雷失败;按Q键退出游戏。
2.2论文研究内容的意义
扫雷游戏是WINDOWS系统自带的一个娱乐性的小游戏,在玩扫雷游戏的过程中也可以很好的培养耐心和细心,同时在无聊得时候可以用以休闲娱乐,如果我们自己也能动手做一个小程序来实现这个功能,自然能乐在其中。
3扫雷游戏的相关知识点
3。
1JAVA的图形界面
图形界面简称GUI,是用图形的方式,借助菜单、按纽等标准界面元素和鼠标操作,帮助用户方便地想计算机系统发出指令、启动操作,并将系统的运行结果同样以图形方式显示给用户的技术.JAVA的图形界面技术既为使用java.awt包来创建图形界面的方法,包括AWT组件、窗口和菜单设计、布局管理器以及绘图操作等.
3。
2AWT概述
AWT既抽象窗口工具集,用于图形用户界面的开发.AWT的功能包括以下方面:
(1)丰富的图形界面组件。
(2)强大的事件处理模型图形和图形工具,包括形状、颜色和字体.
(3)布局管理器,可以进行灵活的的窗口布局,设计特定窗口的尺寸和和屏幕分辨率。
(4)无关数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴操作。
(5)打印和无鼠标操作.
Java。
awt是java基本包中最大的一个,其中定义了所有的GUI组件类,以及其他用于构造图形界面的类。
3.3AWT基本组件
(1)标签组件(Label)
标签组件显示的是静态文本,在通常情况下是不能编辑的,能起到提示的作用
Label组件有三种构造函数:
Label():
创建空的标签
Label(String):
创建一个带初始字符串的标签。
Label(String,int):
创建一个带初始字符串及指定对齐方式的标签。
(2)文本域
文本域一般用来让用户输入姓名、信用卡号等这样的信息,它是一个能够接收用户的键盘输入的小块区域。
TextField():
创建空的文本域
(3)按钮(Button)
几乎所有的交互式程序中都会有按纽,它是一种交互能力强且交互方便的控件,这个控件提供了“按下并动作”的基本用户界面。
按纽的构造方法有:
Button():
建立一个没有标示字符串的新按纽类对象。
Button(StringLabel):
建立一个标示字符串为Label的新按纽类的对象
(4)画板组件(Panel)
我们在界面上安排各种组件时,有时会需要将组件成组放置,这时就可以使用面板组件。
Panel是最简单的容器组件,本身是一个矩形区域,可以在其中放入各种组件。
但它仅仅是安排各种组件的一种结构,需要最后加入到别的容器中才能实现GUI的功能。
面板组件的创建
Panel():
用默认的布局管理器创建面板组件。
Panel(LayoutManagerlayout):
用指定的布局管理器创建面板组件。
(5)框架窗口组件(Frame)
Frame是独立于浏览器的可独立运行的主窗口,通常用于进行开发桌面应用程序.Frame拥有边界和标题栏设置,其大小可以进行设置调整。
Frame里面需要加入组件,也可以加入菜单,或在上面绘图。
Frame的创建
Frame():
创建一个没有窗口标题的窗口框架.
Frame(String):
创建一个指定窗口标题的窗口框架。
(6)布局管理器
FlowLayout布局管理器
FlowLayout布局管理是一种最简单的布局管理方法,是Panel的默认布局。
它以流式的方式,自左向右,自上而下地放置容器中的组件,即组件按每行先后自左向后放置,一行放不下再换行。
FlowLayout布局管理器的创建
FlowLayout():
创建默认的FlowLayout布局管理器
FlowLayout(int):
以指定的对齐方式创建FlowLayout布局管理器。
其中的参数有FlowLayout.LEFT、FlowLayout。
RIGHT、FlowLayout。
CENTER
FlowLayout(int,int,int):
以指定的对齐方式及间距创建FlowLayout布局管理器。
其中第一个参数为对齐方式,第二个参数为组件间间距,第三个参数为列间距。
(7)事件处理
事件处理是一个接受事件、解释事件并处理用户交互的方法。
事件处理有三个要素:
①事件源事件源是一个时间的产生者,如按牛、窗口及文本域等.
②事件类型JAVA中所有的事件都封装成一个类,这些事件类被集中在java。
awt.exent包和java。
swing.event包中,所有的事件类均继承了AWTEvent类和一个方法getSouce()方法,该方法返回发生事件的对象.
③事件监听器不同的类型事件发生后,由事件监听器接受事件并调用响应的事件处理方法,所有的事件监听器实际上都是一个java。
awt.exent包中的借口,继承了java。
util.EventListener接口。
不同的事件有不同的处理方法,
(8)键盘事件处理
该程序使用的是键盘监听事件,键盘事件对应的事件类是KeyEvent类,使用的该类的方法是getKeyCode()获得按下或释放的键代码getKeyText()获得按下或释放的键的字符串.
键盘事件对应的事件监听器为:
KeyListener或KeyAdapter
实现键盘事件的操作步骤是:
第一步,注册KeyListener监听器addKeyListener()。
当事件源所在的类已经实现KeyListener的接口时,参数可用this,否则需创建或继承一个KeyListener
第二步,实现KeyListener接口的所有方法,即KeyPressed(KeyEvente)、KeyReleased(KeyEvente)、KeyTyped(MouseEvente)。
4功能模块描述
本扫雷游戏的实现,共分为五个模块,分别表述为:
模块1定义雷的类,鼠标左键点击不是雷,右键点击是雷,数字表示周围有多少个雷,具体实现函数如下示:
classMinextendsJPanel//雷的类
{
//备注:
鼠标的左键=1;右键=3;中键=2
privateintflag=0,statu=0;//定义雷的属性0:
没有打开1:
打开2:
标示为雷3:
不确定
//flag=0不是雷;flag=1是雷
privateintbut,count=0;//but:
哪一个鼠标键被按下去了count:
这个区域周围有多少个雷
privateintmx=0,my=0,mw=10;//定义雷的坐标和宽度
publicMin()//构造函数
{
statu=0;
}
publicMin(intf,intx,inty,intw)
//构造函数
{
flag=f;
mx=x;
my=y;
mw=w;
}
publicintgetFlag(){returnflag;}
publicintgetStatu(){returnstatu;}
publicintgetMx(){returnmx;}
publicintgetMy(){returnmy;}
publicintgetMw(){returnmw;}
publicintgetCount(){returncount;}
publicvoidsetFlag(intf){flag=f;}
publicvoidsetCount(intc){count=c;}
publicvoidsetData(intf,intx,inty,intw,ints)
//传递值
{
flag=f;
mx=(x—1)*w;
my=(y—1)*w;
mw=w—1;
statu=s;
}
//根据你点击鼠标的不同来改变雷的属性
模块2:
雷的分布和雷的画法具体实现函数的核心代码如下示:
classDrawPanelextendsJPanel
{
privateinti,j;
privateintf=0;//iff=1thengameover,iff=2thenwin
privateintchx=0,chy=0;//专门记录坐标x,y的值
privateintmsum=6,ksum=0;//msum:
雷的个数,ksum:
标示雷的个数
privateintbx=10,by=10,bw=40;//bx,by:
棋盘的大小,bw:
棋子的大小
publicMinboard[][]={
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
{newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin(),newMin()},
};
//画坐标为ax,ay区域的雷的状态
publicvoiddraw(Graphicsg,intax,intay)
{
intx,y,w;//坐标x,y;和宽度:
w
ints,c,flag;//状态;雷的个数;
intcx=bw/2—4;
intcy=bw/2+4;
x=board[ax][ay]。
getMx();
y=board[ax][ay].getMy();
w=board[ax][ay].getMw();
s=board[ax][ay].getStatu();
c=board[ax][ay]。
getCount();
flag=board[ax][ay]。
getFlag();
publicintgetCount(intai,intaj)
{
intsum=0;
if(board[ai][aj].getFlag()==1)
{
returnsum;
}
if(ai〉1&&aj>1&&ai { sum=board[ai-1][aj-1]。 getFlag()+board[ai][aj—1].getFlag()+board[ai+1][aj—1].getFlag()+ board[ai-1][aj]。 getFlag()+board[ai+1][aj].getFlag()+ board[ai-1][aj+1]。 getFlag()+board[ai][aj+1].getFlag()+board[ai+1][aj+1]。 getFlag(); } if(ai==1&&aj==1) { sum=board[ai+1][aj]。 getFlag()+ board[ai][aj+1].getFlag()+board[ai+1][aj+1]。 getFlag(); } if(ai==1&&aj==by) { sum=board[ai][aj-1]。 getFlag()+board[ai+1][aj-1].getFlag()+ board[ai+1][aj]。 getFlag(); } if(ai==bx&&aj==1) { sum=board[ai-1][aj].getFlag()+ board[ai-1][aj+1].getFlag()+board[ai][aj+1]。 getFlag(); } if(ai==bx&&aj==by) { sum=board[ai-1][aj—1].getFlag()+board[ai][aj—1]。 getFlag()+ board[ai—1][aj].getFlag(); } if(ai==1&&aj〉1&&aj〈by) { sum=board[ai][aj-1].getFlag()+board[ai+1][aj-1].getFlag()+ board[ai+1][aj].getFlag()+ board[ai][aj+1]。 getFlag()+board[ai+1][aj+1]。 getFlag(); } if(ai==bx&&aj〉1&&aj〈by) { sum=board[ai—1][aj-1]。 getFlag()+board[ai][aj-1]。 getFlag()+ board[a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 游戏 课程设计 报告
