扫雷游戏论文.docx
- 文档编号:29186416
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:42
- 大小:824.45KB
扫雷游戏论文.docx
《扫雷游戏论文.docx》由会员分享,可在线阅读,更多相关《扫雷游戏论文.docx(42页珍藏版)》请在冰豆网上搜索。
扫雷游戏论文
第1章引言
1.1课题背景及意义
当前随着计算机的深入普及,越来越多的人有了个人电脑,人们运用计算机完成许多重要的工作,计算机在人们的日常生活中扮演着越来越重要的角色。
随着计算机的广泛应用和深入发展,当前的计算机应用早已不单局限于工作,计算机的娱乐性越来越得到人们的关注,近年来游戏产业规模飞速成长。
权威市场调研机构国际数据集团(DFCIntelligence)日前发表报告显示,在2012年全球游戏市场的产值达到了600.4亿美元,并预测2013年将达到649亿美元,更会在2015年突破700亿美元大关。
这远远超越好莱坞电影产业以及音乐等娱乐事业,而成为目前娱乐事业的最大主流。
目前整个游戏产业的运作模式已经跟好莱坞电影产业的运作模式非常相近,电影产业有制片、发行、宣传等明细分工,游戏产业亦同,由专业的游戏研发小组负责研发游戏,也有如微软、Steam这类国际级经销商负责游戏发行,甚至连“游戏制作人”也被培养成明星一样成为一种招牌,如任天堂有王牌制作人宫本茂、SEGA有铃木裕、KONAMI有小岛秀夫、CAPCOM有三上真司,明确的游戏产业分工的确有助于游戏产业的规模发展与进化,但也无形中让游戏开发成本大增。
为了降低游戏开发成本,开发娱乐性强成本低的游戏就成为当前的主要课题,在这种趋势下各种小型的低成本的游戏软件应运而生。
在这其中,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3D游戏相比,它有编写简单、容易上手等特点,可以满足人们在完成日常工作之余适当娱乐的需求。
这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。
微软公司的Windows系列操作系统中内置了很多非常经典的小游戏,包括扫雷,弹球,纸牌等等。
1.2关于本课题
本次课题研究的是微软公司的操作系统Windows中的扫雷游戏。
扫雷游戏是Windows操作系统下的一款经典游戏,在过去的数年里,windows操作系统历经数次换代更新,变的越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然存活了下来,可见这款小游戏的经典。
扫雷游戏的规则简单,目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。
扫雷游戏具有上手容易、耐玩性高、玩家广泛等特点,基于这些原因,我决定将扫雷游戏作为我的研究课题。
第2章开发环境及相关技术的介绍
2.1开发环境
操作系统:
MicrosoftWindows7
程序语言:
C#
.NET框架版本:
.NETFramework4.0
集成开发环境:
MicrosoftVisualStudio2010
2.2C#的由来
在过去的一段时间中C和C++一直是商业软件的开发领域中最具生命力的语言。
虽然他们为程序员提供了丰富的功能,高度的灵活性和强大的底层控制力,但是利用C、C++语言开发的Windows应用程序显然复杂了很多,同时也牺牲了一定的效率。
与VB相比同等级的C、C++完成一个程序往往需要更多的时间来完成开发,因此各层人士都试图寻找一种新的语言,希望能在功能和功率之间找到一种更为理想的平衡点。
针对这一问题微软公司于2000年6月26日正式发布C#。
C#是一种最新的、面向对象的编程语言。
C#使得程序员可以在Miscrsoft开发的.NET平台上快速的编写应用程序。
C#是一种简单、现代、面向对象且类型安全的编程语言。
C#语言从C和C++语言演化而来,同时C#具备了应用程序快速开发RapidApplicationDevelopment(RAD)语言的高效率和C++固有的强大能力并吸收了Java和Delphi等语言的特点和精华,是.NET开发的首选语言。
2.3C#的特点
2.3.1简洁易用的语法
C#主要从C和C++继承而来,同时吸收Java和Delphi的优点。
C#摒弃了C和C++中一些比较复杂而且不常用的语法元素。
C和C++中的指针虽然功能强大但极不安全稍不小心就会导致程序出错甚至导致系统奔溃。
C#取消了指针,不允许直接对内存进行操作,让代码运行在安全的环境中。
此外C#语法的很多变化无不体现了C#的简洁之美。
2.3.2自动的资源回收机制
C#与.NET的完美集成使得C#完全拥有.NET的自动回收机制。
在windows中提供给程序使用的一切软、硬件统称为资源。
比如程序中需要在窗口上画图的笔就是一种资源在早期的windows版本中程序使用完资源后应该及时解放否则会导致系统资源不足而运行变慢。
在.NET框架中由于资源使用完后由系统自动清理所以编写C#程序不必小心翼翼地保证及时释放资源从而可以把更多的精力放在程序编写的逻辑上。
2.3.3与WEB的紧密结合
网上办公和电子商务在各行各业中的到越来越广泛的的应用,B/S模式程序的市场需求越来越多。
在微软的.NET开发套件中C#与ASP.NET是相互融合的。
ASP.NET的应用程序可以使用VB.NET语法也可以使用C#语法。
使用C#语法编写的ASP.NET结构更严谨,运行更高效。
由于有了WEB服务框架的帮助对程序员来说网络服务看起来就像是C#的本地对象。
程序员们能够利用他们掌握的面向对象的知识和技巧开发WEB服务。
仅需要使用简单的C#语言结构以及C#组件就能够方便的开发WEB服务,并允许它们通过Internet被运行在任何操作系统上的任何语言所调用。
2.3.4完整的安全性与错误处理
语言的安全性与错误处理能力是衡量一种语言是否优秀的重要依据。
任何人都会犯错即使是最熟练的程序员也不例外,如忘记变量的初始化,对不属于自己管理范围内存的空间进行修改等。
这些错误常常产生难以预计的后果。
一旦这样的软件被投入使用,寻找与改正这些简单错误的代价是让人无法估计的。
C#的先进设计思想可以消除软件开发中的许多常见错误,并且提供了包括类型安全在内的完整的安全性能支持。
为减少开发中的错误,C#帮助开发者通过更少的代码来完成相同的功能,这大大减轻了编程人员的工作量,同时更有效的避免了错误的产生。
2.3.5支持跨平台
随着互联网应用程序的应用范围越来越广,人们逐渐意识到,当前的网络系统错综复杂,用户使用的硬件设备和软件系统各不相同。
开发人员所设计的应用程序必须具有强大的跨平台性。
C#编写的应用程序就具备这种能力,这种跨平台性也包括了C#程序的客户端可以运行在不同类型的客户端上比如手机等非PC装置上。
2.3.6与XML的融合
由于XML技术真正融入到了.NET和C#之中,C#的编程变成了真正意义的网络编程。
甚至可以说.NET和C#是专为XML而设计。
使用C#的程序员可以轻松用C#内含的类来使用XML技术。
就这方面而言目前C#提供给了程序员更多的自由和更好的性能来使用XML。
2.4.NET开发平台
.NET是一个用于建立应用程序的平台,它在内部封装了大量的功能强大的应用程序接口函数(API),利用这些函数可以开发各类Windows应用软件。
.NET还是一个开发平台,它向广大的程序员提供了功能强大的集成开发环境(IDE)——VisualStudio。
在未来.NET还是一个运行、发布应用程序的平台,它可以将应用程序作为一种服务通过Internet提供给分布在世界各个角落的网络用户。
.NET平台对早期的开发平台作了重大改进。
其提供了一种全新的软件开发模型,它允许用不同程序设计语言创建的应用程序之间相互通信。
这个平台也允许开发者创建基于Web的应用程序,这些应用程序能够发布到多种不同的设备甚至是无线电话和台式机上。
Microsoft的.NET计划为利用Internet和Web进行软件的开发、设计和使用开辟了广阔的新前景。
.NET策略的一个主要方面是它与具体的语言或平台无关。
它并不要求程序员使用惟一的一种程序设计语言。
程序员可以将多种与.NET兼容的语言结合起来开发.NET应用程序。
多个程序员可以共同参与同一个软件项目得开发,每个人可以使用自己最精通的.NET语言如VisualC#.NET、C++.NET、VisualBasic.NET以及其他许多语言来完成项目的开发。
第3章需求分析
3.1可行性分析
3.1.1目的
可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。
也就是说可行性研究的目的不是解决问题,而是确定问题是否值得去解决,可行性分析研究的是在当前的具体条件下,是否具备必要的资源和其它条件。
本课题中,从经济可行性、技术可行性方面进行研究。
3.1.2经济可行性
当前游戏市场,各种类型的游戏软件层出不穷。
由于游戏的开发成本巨大,游戏的开发往往具有一定的风险性,但是一些小游戏的开发具有成本小,编写简单的优势,所以这些小游戏在游戏开发中也占有一席之地。
在这类小游戏中包括益智类游戏,它以画面精美、游戏方法简单等特点得到大家的认可,成为人们在工作之余不可或缺的好伙伴。
我的研究课题是扫雷游戏,这款小游戏具有投入成本小,开发风险性小等特点。
从经济可行性角度考虑是可行的。
3.1.3技术可行性
这款游戏使用C#语言进行编写,C#是一种高效的编程语言,可以快速开发出用户需求的产品。
其.NETFramework平台为开发者提供了庞大的类库,开发人员只需要通过相应的接口调用需求的方法就可以实现应用程序的快速开发。
这款游戏的定位是单机模式,使用WinForm技术进行开发即可。
游戏中的主要功能均可由C#中提供的方法来实现。
经上所述,技术可行性可以实现。
3.2界面分析
3.2.1主界面分析
该游戏的主窗体根据用户显示器分辨率的大小进行动态的调整,确保游戏的界面大小不由显示器分辨率大小的改变而改变。
游戏窗体居中设置,以占屏幕80%为宜。
主窗体中以游戏界面居中,时间计时器以及剩余地雷个数计时器显示在主窗体底部,而各种游戏设定选项设置在菜单中即可。
游戏可以进行难度的设置,分为初、中、高,共三个难度等级,每个等级都对应着不同的排行榜,玩家的优异游戏战绩将记录在排行榜内。
游戏也应该提供游戏界面更换的控制,如更改游戏背景色以及其它颜色等。
3.2.2界面美化分析
游戏应该充分考虑到美观性,可以通过游戏窗体界面的改变以及合适的游戏素材的添加来实现。
对于窗体界面的改变,这里可以尝试对C#中自带的控件进行重定义,在继承了原控件的基础属性之上进行更为美观的修改,如对按钮控件进行重定义,设置为长宽相等的正方形,并且允许定义地雷方块的颜色等。
也可以对游戏的菜单进行重绘,采用自绘制图形覆盖Windows系统自带的菜单,达到美化界面的效果。
游戏中需要用到很多图片素材以及声音素材,图片素材如地雷、计时用的时钟、各种窗体图标等,声音素材如开始声音、地雷爆炸声音、点击雷块声音等,这些素材可以考虑从素材网站进行下载。
3.3运行过程分析
游戏开始时,程序将会在雷区中布上相应难度的雷数,雷数将在右下角的剩余地雷个数框中显示。
布雷完毕后,玩家可以开始进行游戏,在点击按钮时,雷区的按钮上可能会出现数字,也有可能出现空白区,其中数字代表以该按钮为中心,周围八个按钮的雷数,空白区代表其周围八个按钮中没有地雷。
玩家可以根据周围的信息,来判断哪个按钮可能是雷,并在其上面打上标识。
当玩家将所有的地雷都找出来的时候,而且非雷的按钮都打开了,此时游戏获胜。
玩家在点击按钮的时候,其不同的鼠标点击对应相应的功能,有鼠标左键点击事件,鼠标右键点击事件以及鼠标滚轮键点击事件,其中鼠标滚轮键点击事件也可用左右键同时按下来执行。
第4章概要设计
4.1功能性设计
游戏应该提供的功能大致有:
难度选择功能、计时功能、记录游戏信息功能、排行榜功能、更换界面功能等。
此游戏仿照微软公司Windows操作系统中的扫雷游戏,提供三种标准游戏难度,其中:
初级:
81个方块、10个地雷。
中级:
256个方块、40个地雷。
高级:
480个方块、99个地雷。
布雷方式为随机布雷,但出于游戏的友好性考虑,要保证玩家点击的第一个方块不能是地雷。
当玩家点击到有地雷的方块后,游戏结束,并且显示当前游戏中的地雷位置。
若开始进行下局游戏,则需要对地雷进行重新布置。
若玩家探测到了所有地雷,则游戏胜利,弹出游戏胜利对话框。
游戏胜利后,玩家的当局游戏信息将被记录,玩家可以查看自己的游戏信息,如游戏场数,胜率,最佳战绩等。
当然,玩家不单可以查看自己的战绩,更可以查看该游戏的战绩总排行,这将在另一个窗口中进行显示。
游戏信息的记录以及各种数据的统计,会大大增加游戏的耐玩性。
由于本游戏采用的数据读写处理采用文件读取方式,有必要对游戏数据进行充分的加密处理,在程序打开时,将读取被加密的数据文件并对该文件进行解密操作,将解密的数据按照固定的算法读入内存,当游戏结束后,要将内存中的数据进行加密然后保存到文件中。
本设计的功能模块如下:
本设计的用例图如下所示:
4.2流程设计
本设计的主要流程是:
游戏开始后用户可以通过点击鼠标的左键、右键、中键或者左右键同时按下进行游戏,当所有的地雷被探索,则游戏胜利;若用户点击了雷块,则游戏结束;若用户退出游戏,则游戏结束。
游戏的主流程图如下:
第5章详细设计
5.1主窗体的构建
5.1.1扫雷游戏工程的构建
本课题采用微软公司为.NET平台开发量身定造的集成开发环境:
VisualStudio2010进行游戏的开发。
开发游戏的第一部和开发其他WinForm应用一样,要建立一个Windows窗体应用程序,作为游戏的主窗体程序。
创建过程如下图所示,项目名称为“扫雷”,并为该项目创建新的解决方案以及新的目录。
5.1.2自动适应屏幕的界面
创建游戏窗体之后,需要对窗体的大小进行设定,本游戏设定为,使游戏窗体自适应用户显示器分辨率,即根据用户显示器分辨率的大小动态的进行窗体大小的设置。
设置代码如下所示。
/*
*以下函数用于调整窗体,控件等的位置以及大小
*/
privatevoidsetGameFrameSize()
//此函数用于设置游戏窗体适应屏幕的大小
{
//获取当前屏幕的像素点大小,并取其相应的百分比进行游戏主窗体大小设定
intsetHeight=Screen.PrimaryScreen.Bounds.Height*9/10;
intsetWidth=Screen.PrimaryScreen.Bounds.Width*9/10;
intsetStartX=Screen.PrimaryScreen.Bounds.Width/2-setWidth/2;
intsetStartY=Screen.PrimaryScreen.Bounds.Height/2-setHeight/2;
this.SetBounds(setStartX,setStartY,setWidth,setHeight);
}
5.1.3自动适应窗体的控件
创建游戏窗体大小设定好之后,需要对窗体的各个控件的位置进行设定,如计时器控件、剩余地雷数量等控件的位置等。
设置代码如下所示。
privatevoidsetControlAreaSize()
//设置控制窗口的各个控件的位置
{
//获取主窗体各个控件的大小并按照百分比进行窗体设定
intwidth=controlArea.Size.Width;
inticonWidth=clockPicture.Size.Width;
inttextWidth=bombLast.Size.Width;
intcaculateLength=(width-2*iconWidth-2*textWidth)/3;
//设置时钟图片的位置及大小
clockPicture.SetBounds(caculateLength,0,clockPicture.Width,clockPicture.Height);
//设置计时器空间的位置及大小
timerCount.SetBounds(caculateLength+clockPicture.Width,0,timerCount.Width,timerCount.Height);
//设置剩余雷块数图片的位置及大小
bombPicture.SetBounds(2*caculateLength+clockPicture.Width+timerCount.Width,0,bombPicture.Width,bombPicture.Height);
//设置记录雷块剩余个数的控件的位置及大小
bombLast.SetBounds(width-caculateLength-bombLast.Width,0,bombLast.Width,bombLast.Height);
}
privateintcaculateBolckSize(introw,intcol)
//将地雷块调整为合适的大小
{
//获取主窗体各个控件的大小并按照百分比进行窗体设定
intgameAreaHeight=gameArea.Height;
intblockSize=gameAreaHeight*9/10/row;
intgameAreaWidth=gameArea.Width;
intblockSize2=gameAreaWidth*9/10/col;
if(blockSize>blockSize2)
{
blockSize=blockSize2;
}
if(blockSize>40)
{
blockSize=40;
}
returnblockSize;
}
在进行完窗体的设定之后,对游戏的窗体颜色进行一定的修改,即可有一个较为不错的效果。
下图是VisualStudio2010集成开发环境下的扫雷主窗体。
5.2雷区的设置
5.2.1雷区的生成
当游戏界面初始化完成后,开始进行地雷的布置,当玩家点击开始游戏按钮后,在地雷区中随机的布置当前游戏难度下应该产生的地雷总数。
雷块实际是一个自定义的Button控件,该控件继承了Button类,并且添加了雷块所在位置等属性信息,更改了自身形状的大小等。
如下代码为生成扫雷游戏页面,并为所有的雷块添加各种事件处理函数。
其中MouseMove事件与MouseLeave事件的添加作用是:
在鼠标移动到某未点击的雷块时,该雷块高亮显示。
当鼠标离开该雷块时,高亮显示效果消失。
这种设计会得到更好的游戏体验效果。
相关代码如下所示:
privatevoidnewBlockCava(introw,intcol)
//生成扫雷的游戏页面
{
//将剩余雷数框的值初始化
bombLast.Text=Program.theMountOfBoomb.ToString();
//根据雷块的大小以及屏幕的大小开始自定义位置布雷
inttempBlockSize=caculateBolckSize(row,col);
intstartPointX=gameArea.Width/2-tempBlockSize*col/2;
intstartPointY=gameArea.Height/2-tempBlockSize*row/2;
for(inti=0;i for(intj=0;j { block[i,j]=newBlock(); block[i,j].X=i; block[i,j].Y=j; block[i,j].IsBoomb=false; gameArea.Controls.Add(block[i,j]); block[i,j].SetBounds(startPointX+j*tempBlockSize,startPointY+i*tempBlockSize,tempBlockSize,tempBlockSize); //为雷块设置背景色 block[i,j].BackColor=Color.Pink; //为雷块添加各种响应事件 block[i,j].MouseUp+=newMouseEventHandler(bt_MouseUp); block[i,j].MouseDown+=newMouseEventHandler(bt_MouseDown); block[i,j].MouseMove+=newMouseEventHandler(bt_MouseMove); block[i,j].MouseLeave+=newEventHandler(bt_MouseLeave); } } 5.2.2第一次点击雷块的处理 当游戏第一次点击雷块后,程序将会对游戏区域进行设置。 即保证用户点击的雷块以及其周围的八个雷块都没有地雷,这样用户的第一次点击一定不会遇到地雷,并且至少会打开9个方块。 这样降低了开局的难度,并且体现了游戏的友好性,增加了游戏的耐玩性。 相关代码如下所示: privatevoidsetBoomb(intx,inty) //设置地雷并且保证点到的第一个方块和周围的八个方块不是地雷 { timer1.Start(); Randomrand=newRandom(); intBoombNumber=Program.theMountOfBoomb; intcountBoombNumber=0; while(countBoombNumber! =BoombNumber) { intpointX=rand.Next(Program.row); intpointY=rand.Next(Program.col); if(((block[pointX,pointY].IsBoomb==true)||(pointX==x&&pointY==y)||(pointX==x-1&&pointY==y-1)||(pointX==x-1&&pointY==y)||(pointX==x-1&&pointY==y+1)||(pointX==x&&pointY==y-1)||(pointX==x&&pointY==y+1)||(pointX==x+1&&pointY==y-1)||(pointX==x+1&&pointY==y)||(pointX==x+1&&pointY==y+1))==false) { block[pointX,pointY].IsBoomb=true; countBoombNumber++; } } } 第一次点击雷块效果如下所示: 5.2.3提示数字颜色设定 难度设置通过用户对难度控制对话框的设置来实现,当用户应用了不同于当前游戏的难度之后,程序将根据用户选择的难度设置指定个数的雷块对游戏界面进行雷块个数的改变以及地雷个数的重置。 此处涉及到了不同窗体之间的传值问题,本处的解决方案是: 采用赋值给类内静态变量的形式实现。 代码中的变量theMountOfBoomb,row,cow等都是静态变量。 5.3游戏难度设置 难度设置通过用户对难度控制对话框的设置来实现,当用户应用了不同于当前游戏的难度之后,程序将根据用户选择的难度设置指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 游戏 论文