1 引言1.1 课题背景及意义当前随着计算机的深入普及,越来越多的人有了个人电脑,人们运用计算机完成许多重要的工作,计算机在人们的日常生活中扮演着越来越重要的角色。
随着计算机的广泛应用和深入发展,当前的计算机应用早已不单局限于工作,计算机的娱乐性越来越得到人们的关注,近年来游戏产业规模飞速成长。
权威市场调研机构国际数据集团(DFC Intelligence)日前发表报告显示,在2013年全球游戏市场的产值达到了600.4亿美元,并预测2014年将达到649亿美元,更会在2015年突破700亿美元大关。
这远远超越好莱坞电影产业以及音乐等娱乐事业,而成为目前娱乐事业的最大主流。
目前整个游戏产业的运作模式已经跟好莱坞电影产业的运作模式非常相近,电影产业有制片、发行、宣传等明细分工,游戏产业亦同,由专业的游戏研发小组负责研发游戏,也有如微软、Steam这类国际级经销商负责游戏发行,甚至连“游戏制作人”也被培养成明星一样成为一种招牌,如任天堂有王牌制作人宫本茂、SEGA有铃木裕、KONAMI 有小岛秀夫、CAPCOM有三上真司,明确的游戏产业分工的确有助于游戏产业的规模发展与进化,但也无形中让游戏开发成本大增。
为了降低游戏开发成本,开发娱乐性强成本低的游戏就成为当前的主要课题,在这种趋势下各种小型的低成本的游戏软件应运而生。
在这其中,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3D游戏相比,它有编写简单、容易上手等特点,可以满足人们在完成日常工作之余适当娱乐的需求。
这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。
微软公司的Windows系列操作系统中内置了很多非常经典的小游戏,包括扫雷,弹球,纸牌等等。
1.2 关于本课题本次课题研究的是微软公司的操作系统Windows中的扫雷游戏。
扫雷游戏是Windows操作系统下的一款经典游戏,在过去的数年里,windows操作系统历经数次换代更新,变的越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然存活了下来,可见这款小游戏的经典。
扫雷游戏的规则简单,目标是在最短的时间内根据点击格子出现的数字找出所有非第1页共30页类格子,同时避免踩雷。
扫雷游戏具有上手容易、耐玩性高、玩家广泛等特点,基于这些原因,我决定将扫雷游戏作为我的研究课题。
1.3 Windows自带的扫雷游戏的玩法在游戏菜单上,单击开局。
要启动计时器,请单击游戏区中的任何方块。
注意:通过单击即可挖开方块。
如果挖开的是地雷,则您输掉游戏。
如果方块上出现数字,所显示的数字则表示在其周围的八个方块中共有多少颗地雷。
双击出现的数字,如果周围八个方块仅剩出现数字的数就可全部打开。
在不确定的时候右键单机挖开数字旁边的空处已确定此方块是否是炸弹要标记您认为可能有地雷的方块,请右键单击它。
游戏区包括雷区、地雷计数器和计时器。
1.4 Windows自带的扫雷游戏的秘籍技巧:排成一行的格中,两个1夹一个2,1底下必有雷;两个2夹一个1,中心的1底下必有雷;两个2夹n个3,2和3底下全有雷;两个2靠边,2底下都有雷;连续的三个1,中间的1有雷;连续四个1两边的1有雷。
口诀:一夹二,一有雷;二夹一,心有雷;二夹三,全有雷;二二边,都有雷;三连一,中有雷;四连一,边有雷。
先扫四个角,紧接扫中间第2页共30页这里的2和1并不是只有2、1的格子才能适用,有的时候比如是3或4,但附近已经标了一个雷,剩下1或2颗还不能确定,当然也可以使用这个原则。
同时也可也用此法:围绕数字一圈8个格子中就有数字所是雷的个数,之后可以推理了。
秘诀:按住键盘中z下方的Alt左边的一个键,再按一下D,这样扫雷界面会最小化,然后用鼠标点一下下边的扫雷页面,时间就会停住,而且打开扫雷界面,输入X Y Z Z Y ,按一下右下角的shift键。
这时,鼠标放在雷区,在方格区活动,你会看到屏幕左上角有个小光点在一闪一闪。
(很小很小的,不容易看。
最好桌面是深色的,要不看不清)小光点出现,说明鼠标停在的格子不是雷。
相反,就是雷区。
扫雷游戏进入后左上角会有两个选项,1是游戏,2是帮助,游戏按钮可以调节游戏的难易度和设置扫雷还可以开始和退出,帮助按钮有扫雷的介绍。
1.5 国内外扫雷记录现在扫雷高级的官方纪录是37.775秒,纪录的保持者是迪昂.提乌(DionTiu),在2006年5月9日创造的。
扫雷中级最高的官方纪录是10.015秒,由波兰玩家Kamil Muranski保持。
初级纪录是1秒,世界上很多人达到了这一点.在1秒的时间里完成初级的扫雷,据测算概率在0.00058%至0.00119%之间,点四个角的可能性最高。
国内高级记录由中国扫雷第一人张砷镓(世界排名第五位)保持,打破记录用时38.82秒。
几个原则很简单。
首先,如果一个格附近的所有雷都已被标记,同时按下左右键就会自动扫开它附近剩余的格,省的你一个个的按了。
排成一行的格中,两个1夹一个2,1底下必有雷;两个2夹一个1,1底下必有雷;两个2夹n个3,所有的2和3底下都有雷;两个2靠边,2底下都有雷;连续的三个1,中间的1有雷;连续四个1两边的1有雷————这里的2和1并不是只有2、1的格子才能适用,有的时候比如是3或4,但附近已经标了一个雷,剩下1或2颗还不能确定,当然也可以使用这个原则。
这些原则熟练掌握,能做到一眼看出,并迅速点右键标雷、双击开格,就可以达到100秒以内的水平。
第3页共30页点脑是XP,随便一点开始扫雷,按下键盘"Windows徽标键+M" (最小化所有窗口),再用鼠标还原窗口, 倒计时会停止.(要用鼠标还原,若用键盘"Windows徽标键+ Shift+ M" 还原最小化的窗口倒计时不会停止。
表1-1 最新扫雷记录级别用时记录保持者时间初级 1.1 莫文雄2009-9-4中级11.07 林锦帆2012-3-31高级38.82 张砷镓2008-1-261.6 扫雷与数学界大多数的电脑都装有扫雷游戏。
扫雷游戏是微软Windows操作系统下的一个游戏。
游戏者要试着从已标明数字的方格周围的正方形内找出所有的地雷,从标明的数字,可以告诉你周围的正方形内隐藏着几个地雷。
不过,你想到过吗?这看似简单的游戏却能帮助数学家们破解数学领域的一些有趣的难题。
数学家们又希望通过这个电脑游戏解决令人困惑已久的数学难题。
英国伯明翰大学的数学教授里查·凯耶对与数学有关的游戏十分感兴趣,他认为数学与游戏是一对完美的结合。
玩游戏时,他会想是不是有什么有趣的数学问题隐藏其中,所以他一直在思考能否通过玩电脑游戏来解决数学难题。
凯耶教授在玩了几个星期扫雷游戏后,逐渐悟出了其中的奥秘。
目前的扫雷游戏共分为3个级别:初级、中级和高级。
级别越高,雷区就越大。
如果继续将级别提高,雷区扩大,就会碰到像不能破解的数学难题一样的困惑。
凯耶教授认为扫雷游戏能帮助解决数学界中困惑数学家们长达30年的一道排列组合难题———“P与NP的问题”。
通过解决这个问题,就可以得出一个结论,一些在某一段时间内看似悬而未决的问题就可能用一种相对简单的方法来破解,如可以通过计算机来解决。
凯耶教授认为,如果能找出最高级扫雷游戏中所有地雷排列组合的规律,他就能解决“P与NP问题”。
剑桥的克雷数学研究院已经提供了100万美元的奖金来奖励能解决这个难题的人。
这样简单的一个电脑游戏竟能把我们带到数学界的一个新突破。
数学问题其实离我们的日常电脑应用并不遥远。
第4页共30页2 开发环境及相关技术的介绍2.1 开发环境表2-1 开发环境操作系统Microsoft Windows 7程序语言java集成开发环境MyElipse第5页共30页2.2 Java的由来Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。
用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动感的Web、Internet计算。
从此,Java被广泛接受并推动了Web的迅速发展,常见的浏览器现在均支持Java applet。
另一方面,Java技术也不断更新。
Java平台由Java虚拟机(Java Virtual Machine)和Java应用编程接口(Application Programming Interface、简称API)构成。
Java应用编程接口为Java 应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。
在硬件或操作系统平台安装一个Java平台之后,Java应用程序就可运行。
现在Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行。
Java应用编程接口已经从1.1X版发展到1.2版。
目前常用的Java平台基于Java1.6,最近版本为Java1.7。
Java分为三个体系JavaSE、JavaEE、JavaME。
2.3 技术难点(1)具有计时功能,即能够统计完成游戏所用的时间(2)空白区域的递归算法(3)布雷的生成算法(4)左右键的功能设计2.4 关键技术1.什么是递归函数递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。
2.函数调用机制的说明任何函数之间不能嵌套定义,调用函数与被调用函数之间相互独立(彼此可以调用)。
发生函数调用时,被调函数中保护了调用函数的运行环境和返回地址,使得调用函数的状态可以在被调函数运行返回后完全恢复,而且该状态与被调函数无关。
第6页共30页被调函数运行的代码虽是同一个函数的代码体,但由于调用点,调用时状态,返回点的不同,可以看作是函数的一个副本,与调用函数的代码无关,所以函数的代码是独立的。
被调函数运行的栈空间独立于调用函数的栈空间,所以与调用函数之间的数据也是无关的。
函数之间靠参数传递和返回值来联系,函数看作为黑盒。
3.递归调用的形式递归调用有直接递归调用和间接递归调用两种形式:(1)直接递归即在函数中出现调用函数本身。
(2)间接递归调用是指函数中调用了其他函数,而该其他函数却又调用了本函数。
4.递归的条件(1)须有完成函数任务的语句。
(2)—个确定是否能避免递归调用的测试(3)一个递归调用语句。
该递归调用语句的参数应该逐渐逼近不满足条件,以至最后断绝递归。
(4)先测试,后递归调用。
在递归函数定义中,必须先测试,后递归调用。
也就是说,递归调用是有条件的,满足了条件后,才可以递归。
5.消除递归大多数递归函数都能用非递归函数来代替。
6.递归的评价递归的目的是简化程序设计,使程序易读。
2.5 设计软件程序使用Java语言,开发平台是MyEclipse。