毕业设计(论文)-Java版扫雷的设计与实现.doc_第1页
毕业设计(论文)-Java版扫雷的设计与实现.doc_第2页
毕业设计(论文)-Java版扫雷的设计与实现.doc_第3页
毕业设计(论文)-Java版扫雷的设计与实现.doc_第4页
毕业设计(论文)-Java版扫雷的设计与实现.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中北大学信息商务学院2011届毕业论文毕业论文Java版扫雷的设计与实现学生姓名: 学号: 学 院: 信息商务学院 系 名: 电子与计算机科学技术系 专 业: 计算机科学与技术 指导教师: 2015年 4 月 Java版扫雷的设计与实现摘 要扫雷是一款玩法相当简单的大众化的小游戏,游戏的胜利条件是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时要避免踩到雷。随着社会的不断进步,人们的压力也不断的提高,人们的生活节奏不断加快,在游戏层出不穷的时刻,人们对游戏的需求也不断提高,而扫雷游戏任然受到不少人的青睐,其本身的性质,决定了人们对它的喜爱的程度,不需要特殊的技巧,不需要不断的升级,还不需要太多的时间进行熟悉,简简单单却趣味无穷。人们长时间的面对计算机难免会有倦怠的情绪,而扫雷这款小游戏不会花太多时间,同时把玩家得思维带动起来,达到一举多得得效果。扫雷游戏的基本功能:点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。本次设计的主要目的是为了通过扫雷游戏来加深对Java语言的掌握,提高自己的编程水平。关键字:扫雷游戏,算法设计,事件,JAVA全套设计加扣 3012250582Java version of Minesweeper design and implementationAbstractMinesweeperis a play offairly simplepopular small game,game winning conditionsinthe shortest period of timeaccording tothe number that appears click the gridto identify all nonraylattice,while avoidingstepped on a mine.With the progress of society,constantly improvepeoples pressure,the accelerating pace of life of peoplein the game,thedemand forconstantlyemerge in an endless stream,the gameis also rising,and theMinesweeperstillattract many people of all ages,of its own nature,determinesthe extent ofpeople love it,do not need tospecialskills,do not need toconstantly upgrade,alsodo not need too muchtime tofamiliar,simplebut fun.The computerin the face ofpeople for a long timewill havea tired mood,andminethe gamewill not spend too much timeat the same time,thegame playerto driveupthinking,tohavemultipleeffects.The basic function of mine game:click the left mouse buttoninthe unknown area,ifthe unknown areathere is thunder,game stop,displayall the mines.If there is noray,is displayedaroundthe number of mine,ifnotaroundmine,thencheck whetherthere is thunderaround theeight areasuntilthere is thundernowand show,game playerneeds to find outall theminefieldnot minethe boxas soon as possible,but not stepped on landmines.The main purpose of this designisto pass theMinesweeper todeepen their understanding of Javalanguage learning,improve their level of programming.Key words: minesweeper, algorithm design, event, JAVA目 录1 绪论112 扫雷游戏的玩法213 扫雷游戏与科学214 开发语言及工具31.4.1 java语言及特点31.4.2 开发工具简介52 扫雷游戏的分析521 游戏可行性分析522 游戏需求分析523 游戏功能分析63 扫雷游戏设计631 游戏功能设计632 游戏总体设计73.2.1 算法思想73.2.2 游戏界面设计833 游戏详细设计93.3.1 雷区设计流程图93.3.2 游戏类设计103.3.3 游戏外部文件的设计114 扫雷游戏的实现1141 随机布雷的实现1142 点击后提示数字的实现1343 游戏结束的实现145 游戏的运行效果1551 游戏界面1552 游戏胜利1553 游戏失败166 扫雷技巧1661 活用定式1662 局部优化177 总结18参 考 文 献19致 谢20I1 绪论11 背景与意义 随着计算机得普及,人们越来越多得接触到计算机,计算机逐步渗入社会生活各个层面。现在生活节奏的越来越快,人们长时间的面对计算机难免会有倦怠的情绪,而扫雷这款小游戏不会花太多时间,同时把玩家得思维带动起来,达到一举多得得效果。扫雷是一款玩法相当简单的大众化的小游戏,游戏的胜利条件是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时要避免踩到雷。微软于1990年10月收购了扫雷的版权,并随纸牌游戏(Solitaire)一同加载到1992年发布的Windows 3.1系统上,扫雷从此流行起来,之后迅速成为了各种操作系统中必不可少的一款游戏。自1992年至今,微软的Windows操作系统经过数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。扫雷游戏还有十项主要的世界纪录:中级时间、高级时间、中级NF时间、高级NF时间、初级3bvs、中级3bvs、高级3bvs、初级NF3bvs、中级NF3bvs、高级NF3bvs(由于初级纪录的运气成分较大,雷界对此尚存争议,故初级时间和初级NF时间不列入主要的扫雷世界纪录)。所有十项纪录中,波兰的Kamil Muranski垄断了八项, Kamil (卡米尔)也因此在2012年10月26日成为被吉尼斯世界纪录认定的扫雷纪录保持者(在被认定为吉尼斯世界纪录的2012年,Kamil 实际垄断了所有的十项记录,是无可争议的世界第一)。剩余的两个记录项“中级NF 3bvs”和“高级NF 3bvs”由中国的郭蔚嘉保持。本次设计只是完成了扫雷游戏的基本功能,在细节方面仍有待以后完善。第 1 页 共 26 页12 扫雷游戏的玩法以windows XP自带扫雷winmine.exe为例(其它版本的扫雷游戏与之大同小异)。游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过24*30),玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。游戏的基本操作包括左键单击(Left Click)、右键单击(Right Click)、双击(Chording)三种。其中左键用于打开安全的格子,推进游戏进度;右键用于标记地雷,以辅助判断,或为接下来的双击做准备;双击在一个数字周围的地雷标记完时,相当于对数字周围未打开的方块均进行一次左键单击操作:左键单击:在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围33区域中的地雷数(一般为8个格子,对于边块为5个格子,对于角块为3个格子。所以扫雷中最大的数字为8);如果方块上为空(相当于0),则可以递归地打开与空相邻的方块;如果不幸触雷,则游戏结束。右键单击:在判断为地雷的方块上按下右键,可以标记地雷(显示为小红旗)。重复一次或两次操作可取消标记(如果在游戏菜单中勾选了“标记(?)”,则需要两次操作来取消标雷)。双击:同时按下左键和右键完成双击。当双击位置周围已标记雷数等于该位置数字时操作有效,相当于对该数字周围未打开的方块均进行一次左键单击操作。地雷未标记完全时使用双击无效。若数字周围有标错的地雷,则游戏结束,标错的地雷上会显示一个“ ”。(本次扫雷游戏的设计并没有添加鼠标双击的功能。)13 扫雷游戏与科学概率计算:扫雷过程中可能会遇到一些没有确定解,必须要猜的情况。人脑能快速定性分析,但不擅长于定量分析,所以正常操作下玩家的胜率远低于扫雷游戏的极限胜率。在扫雷过程中,每一步中每个位置是雷的概率都可以基于代数方法得到。NP完全问题扫雷是NP完全问题(Minesweeper is NP-complete)广义扫雷问题(general minesweeper problem)表述如下:给定一块被部分标定为数字或地雷的矩形区域,剩下一些格子还未打开,试确定在未打开的格子中是否存在某种形式的地雷分布,使已经出现的数字得到满足。换句话说,需要确定给出的数据是否相容。只要解决了这一问题,现实中的扫雷游戏便同样得到完美解决。例如要确定某个格子是否非雷,只需测试这一位置是雷时数据是否相容。如果不相容,就可以判定该位置安全。同理,若能验证某一格子为数字(08)时数据均不相容,也可判断出这一位置是雷。广义扫雷问题具有NP完全性。首先,它肯定是一个NP问题,因为验证一个解(由雷分布推断出数字)可以用多项式时间完成。其次,利用扫雷规则可以构建出所有的逻辑电路元件,从而证明布林可满足性问题(boolean satisfiability problem)可以约化为扫雷问题。因为布林可满足性问题已经被证明是NP完全问题,所以广义扫雷问题,或者说扫雷,也是NP完全问题。于是研究扫雷也成了研究NP完全问题的一个切入点。14 开发语言及工具本次的毕业设计我将利用Eclipse作为开发工具,用JAVA语言开发一款类似的“扫雷游戏”。1.4.1 java语言及特点Java是一种面向对象的程序设计语言,具有卓越的通用性、高效性、平台移植性和安全性,因此被广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等领域,同时拥有了全世界最大的开发者及专业社群。Java具备非常显著优势和广阔前景。首先java将源代码编译成二进制字节码(bytecode),然后通过各种不同平台上的虚拟机来解释执行字节码,因此实现了“一次编译、到处执行”的这一跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这使得java程序在一定程度上降低了本身的运行效率。Java技术已经日渐成熟,使用Java语言设计扫雷游戏有很大的优越性。这是因为Java是一门经过了很长时间的发展,现在已经充分完善了的面向对象的程序设计语言。并且随着Java的运行效率的不断提高,Java语言易学、严格、抽象度高、可读性好的优势也已经凸显出来。当今软件及计算机的应用规模越来越大,java的优点也吸引了众多软件开发者。本次设计的主要目的是为了通过扫雷游戏来加深对Java语言的掌握,提高自己的编程水平。java具有面向对象;简单性:(相对应C和C+来讲)java不需要程序员操作内存;跨平台:一次编译,到处运行 (JVM);多线程:其他语言的多线程一般是系统级别的,而java的多线程则是语言级别的;动态编译等特点。Java多线程模型。线程是指进程中的一个执行流程。一个进程可以由多个线程组件。即在一个进程中可以同时运行多个不同的线程,它们分别执行不同的任务。java类可以通过继承Thread类或者实现Runnable接口来实现java的多线程。线程在它的生命周期中会处于各种不同的状态:新建状态(New)用new语句创建的线程对象处于新建状态, 此时它和其他Java对象一样;仅在堆区中被分配了内存;就绪状态(Runnable)当一个线程对象创建后,其他线程调用它的start()方法, 该线程就进入就绪状态,处于这个状态的线程位于可运行池中, 等待获得CPU的使用权。运行状态(Running)处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中, 如果计算机只有一个CPU, 那么任何时刻只会有一个线程处于这个状态。如果计算机有多个CPU, 那么同一时刻可以让几个线程占用不同的CPU,使它们都处于运行状态。只有处于就绪状态的线程才有机会转到运行状态。阻塞状态(Blocked)指线程因为某些原因放弃CPU, 暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才有机会转到运行状态。死亡状态(Dead)当线程退出run()方法时,就进入死亡状态,该线程结束生命周期。线程有可能是正常执行完run()方法退出,也有可能是遇到异常而退出。不管该线程正常结束还是异常结束,都不会对其他线程造成影响。“扫雷游戏”的设计主要是对Java语言中Gui图形化界面的应用。GUI 即人机交互图形化用户界面设计。图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。GUI的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用。人们从此不再需要死记硬背大量的命令,取而代之的是可以通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。1.4.2 开发工具简介Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本内核包括:图形API (SWT/Jface), Java开发环境插件(JDT ),插件开发环境(PDE)等。2 扫雷游戏的分析21 游戏可行性分析可行性分析主要通过对项目的主要内容及其配套的条件,如市场需求、环境影响、建设规模、工艺路线、资源供应、设备选型、资金筹措、盈利能力等,从技术、经济、工程等各个方面进行调查研究与比较分析,并对项目建成以后可能取得的经济效益及社会环境影响进行预测,从而提出该项目是否值得投资和如何进行建设的咨询意见,为项目决策提供依据的一种综合性的系统分析方法。可行性分析应具有预见性、公正性、可靠性、科学性的特点。22 游戏需求分析随着社会的不断进步,人们的压力也不断的提高,人们的生活节奏不断加快,在游戏层出不穷的时刻,人们对游戏的需求也不断提高,而扫雷游戏任然受到不少人的青睐,其本身的性质,决定了人们对它的喜爱的程度,不需要特殊的技巧,不需要不断的升级,还不需要太多的时间进行熟悉,简简单单却趣味无穷。23 游戏功能分析扫雷游戏的基本功能:点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。如果没雷,则显示周围雷数,如果周围没雷,则再查看周围八个区域是否有雷直到有雷为止并显示,这其实是一个递归过程。点击鼠标右键于未知区域,则将其置为有雷而不管是否真的有雷。可选择初、中、高三级并可自定义雷数和区域大小以及游戏时间,剩余雷数等。扫雷游戏分为初级、中级、高级和自定义四个级别。单击游戏菜单可以选择“初级”、“中级”、“高级”或“自定义”; 选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器;用户要揭开某个方块,可单击它。若所点方块下有雷,用户便输了这一局,若所点方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷;如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记“雷”;用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个;扫雷胜利后,游戏中的标签会显示“你赢了!”;如果在扫雷过程中一不小心碰到了雷,游戏会显示“你输了!”。所以本程序需实现的主要功能有:用户可以自定义级别,并确定雷的个数;具有计时功能,即显示用户完成扫雷所花费的时间;用户识别雷右击可标记“雷”。3 扫雷游戏设计31 游戏功能设计 功能结构图是将系统的具体功能进行分解,按其功能的从属关系来表示的图表。系统的各个子系统是系统目标的下层的功能,而对其中的每项功能可以继续分解为第三、第四层等更多的功能。 功能结构图本质是按照功能的从属关系画成的图表,因此图中的每一个框都称为一个功能模块。功能模块可以根据其具体功能情况分解的或大或小,较大的功能模块可能是完成某一个任务的一组程序,而小功能模块可能是一个程序中的每个处理过程。 功能分解的过程就是一个由抽象到具体、由复杂到简单的过程。功能结构图对硬件、软件、解决方案等进行解剖,详细描述功能列表的结构,构成,剖面的从上到下,从大到小,从粗到细等而描绘或画出来的结构图。从概念上讲,上层功能包括 (或控制)下层功能,越是上层功能就越是笼统,相反下层功能就会更加的具体。 新系统的物理设计阶段就是系统设计。在用户提供的环境条件下,根据系统分析阶段所确定的功能要求与逻辑模型,设计出一个能在计算机网络环境上实施的方案,即建立新系统的物理模型。根据游戏的总体功能功能,画出游戏总体功能图如图3.1所示图3.1 总体功能图32 游戏总体设计3.2.1 算法思想(1) 随机分布。扫雷游戏要求在M行N列的网格游戏区随即的不上X个雷,且X的取值应小于M和N的乘积。这可以在一张M*N的网格上通过均匀分布的随即算法视线。其中X的网格是雷区,剩下的网格是非雷区。游戏的目标是尽可能快地找到所有的雷区,而不踩到地雷。Java提供了视线随即算法的类Math,通过Math类的random()方法这可以很方便的实现随即布雷的功能。(2) 计算按钮周围雷数。当一个方块被点击时,如果显示1则表示周围8格内有1个雷,如果是2就是周围8格有2个雷,以此类推,以递归的的方式计算方块被点击时应该显示的数字。3.2.2 游戏界面设计(1)扫雷棋盘的布局设计系统的整体布局为:CardLayout布局, 采用了菜单、按钮、面板等组件,菜单主要包括开始,选择级别,标记, 按钮的功能是重新开始新的游戏。如图3.2所示。图3.2 游戏界面(2)雷区的设计Level类设定游戏的难度,玩家通过单击游戏按钮触发的事件来选择游戏难度或自定义游戏难度,如果是选择初级难度,分配初级雷区按钮布局。如果是选择中级难度,分配中级雷区按钮布局。如果是选择高级难度,分配高级雷区按扭布局。如果是选择自定义难度,分配玩家自定义的按扭布局。如图3.3所示。图3.3 难度选择(3)信息统计的设计Panel类来对玩家游戏进行简单的数据统计,玩家通过单击游戏按钮触发的事件来查看统计的信息,信息包括最佳时间、已玩局数、获胜局数、失败局数以及胜率等数据信息。如图3.4所示。图3.4 信息统计33 游戏详细设计3.3.1 雷区设计流程图雷区是本次设计的重点,从Game类被初始化时,到游戏的进行与结束,具体流程图如下图所示。图3.5雷区流程图3.3.2 游戏类设计Game类是继承了JFrame实现了Runnable接口,该类里声明了组键,并进行布局,主方法main()实例化窗体对象,来启动游戏。Level类设定游戏的难度,该类继承了JDialog类来创建一个临时的对话框,来进行难度的调整,类中预设了初级难度、中级难度和高级难度三种难度的窗体大小及雷区分布,还有玩家自定义难度的窗体大小及雷区分布的调整。Panel类来统计玩家的对局信息,通过OutputStreamWriter()方法和FileOutputStream()将数据写到指定的文件中来储存玩家的游戏信息,玩家可以通过重置按钮将信息清空置零。MyButton类继承了JFrame实现了MouseListener接口,主要通过mouseClicked()方法来对鼠标事件监听来改变雷区按钮的状态,以此来判读玩家是否“踩到雷”。Button1类继承了MyButton类,通过SetIcon()方法加载一些外部图片来改变雷区按钮的样式,对踩雷进行判断。3.3.3 游戏外部文件的设计该游戏外部有一个image文件夹以及三个txt文件,分别用来存放雷区按钮的不同状态以及玩家的游戏信息。如图3.6所示。 图3.6 外部文件图4 扫雷游戏的实现41 随机布雷的实现当游戏开始时程序需要根据玩家所选难度,确定大小的矩形雷区中随机布置的地雷数量(初级为9*9个方块10个雷,中级为16*16个方块40个雷,高级为16*30个方块99个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过24*30),并将这些地雷随机分布在雷区,该过程主要由Java提供的Random方法解决,并且计算出每个按钮周围八个按钮有多少是雷。具体实现代码如下:public void RandomMethod(int x1,int y1) /随机布雷,并将是雷的Button1加入list中list=new ArrayList();int x, y;Random r=new Random();int a=new intM*N;for(int i=0;iM*N;i+)ai=i;int t=ax1*N+y1;ax1*N+y1=aM*N-1;aM*N-1=t;for(int i=1;i=NUM;i+)x=r.nextInt(M*N-i);t=ax;ax=aM*N-i-1;aM*N-i-1=t;for(int i=M*N-NUM-1;iM*N-1;i+)x=ai/N;y=ai%N;arrayxy.setlei(true);list.add(arrayxy);int count=0;for(int i=0;iM;i+) /计算每块砖块周围八块有多少地雷for(int j=0;j=0)if(j-1=0)if(arrayi-1j-1.getlei()=true)count+;if(i-1=0)if(arrayi-1j.getlei()=true)count+;if(i-1=0)if(j+1=0)if(arrayij-1.getlei()=true)count+;if(j+1N)if(arrayij+1.getlei()=true)count+;if(i+1M)if(j+1N)if(arrayi+1j+1.getlei()=true)count+;if(i+1=0)if(arrayi+1j-1.getlei()=true)count+;if(i+1=0)if(y-1=0)if(bx-1y-1.getwakai()=false)if(bx-1y-1.getbiaoji()=false) if(bx-1y-1.getleinum()=0) bx-1y-1.setnumber0(); bx-1y-1.setwakai(true); allnum-; lin(b,x-1,y-1); else if(bx-1y-1.getleinum()=1) bx-1y-1.setnumber1(); if(bx-1y-1.getleinum()=2) bx-1y-1.setnumber2(); if(bx-1y-1.getleinum()=3) bx-1y-1.setnumber3(); if(bx-1y-1.getleinum()=4) bx-1y-1.setnumber4(); if(bx-1y-1.getleinum()=5) bx-1y-1.setnumber5(); if(bx-1y-1.getleinum()=6) bx-1y-1.setnumber6(); if(bx-1y-1.getleinum()=7) bx-1y-1.setnumber7(); if(bx-1y-1.getleinum()=8) bx-1y-1.setnumber8(); bx-1y-1.setwakai(true); allnum-; ./此处省略部分递归代码 43 游戏结束的实现游戏结束分为两种情况一种是正确标记出所有的地雷取得胜利后的结束;一种是踩到地雷后游戏失败后的结束。游戏结束后将游戏数据统计储存同时还需给玩家一个提示框,让玩家选择继续游戏,还是退出游戏。以下是部分代码:public void DuiHuaKuanXuanZe()/游戏输了或赢了就弹出对话框,输赢显示的对话框只是shuyin属性和qingxuanze属性不同。 int xx=JOptionPane.showOptionDialog(null, +shuyin, +qingxuanze,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, choices,choices0);if(xx=0)System.exit(0);if(xx=1)/选择重玩游戏只需要对已有对象进行重新初始化属性if(xx=2)/选择新游戏XinYouXi(); public void diaglog()/输了时弹出对话框 choices= new String退出, 重玩游戏,新游戏; shuyin=你输了; qingxuanze=请选择; if(N=9&M=9)/更改初级连胜和连败信息并输出到文件中 catch (Exception e) e.printStackTrace(); /游戏数据储存的代码并在此展示。5 游戏的运行效果51 游戏界面游戏界面已在上文展示,见图3.2游戏界面图52 游戏胜利游戏胜利如图5.1所示。图5.1游戏胜利图53 游戏失败游戏失败如图5.2所示。图5.2 游戏失败图6 扫雷技巧61 活用定式 寻找常见的数字组合(定式),这有助于判雷,减少思考的时间。例如,在一组未挖开的方块的边上出现相邻的三个数字 2-3-2 表示这三个数旁边都是地雷,若出现1-2-2-1则两个2上有雷而两个1上无雷。两个1夹一个2【-1-2-1-】,两个1处必有雷,2必无雷;两个2夹一个1【-2-2-1-2-2-】,中心的1必有雷;两个2夹n个3【-2-3-3-2-】,2和3边上全是雷;连续的两个2靠边【|2-2-】,2边上都是雷;连续的三个1靠边【|1-1-1-】,远离边的那个1无雷;连续的三个1被夹在中间【|1-1-1|】,中间的1有雷,两边的1无雷;连续的四个1被夹在中间【|1-1-1-1|】,两边的1有雷,中间的1无雷。说明:方括号中的“|”表示边或已打开的方块,数字为未知方块正下方的数字。定式需要灵活运用,这里的数字都没有考虑周围已标记地雷,如果已经标记了地雷,则需要先用数字减去周围雷数,再应用定式(比如出现【-2-4-2-】,但是已知两个2周围已经各有一个雷,4周围已经有两个雷,则可以简化成【-1-2-1-】)。这些原则若能熟练掌握,能大大缩短扫雷时间并提高完成率。62 局部优化在扫雷的过程中,对同一特定局部的处理,不同的玩家会有不同的选择,但所耗费的时间却不相同。为了缩短整局完成的时间,我们有必要在每一个局部对操作进行优化,避免无效的点击和移动。这样积累下来的时间节省十分可观。因为扫雷游戏的目标是“找出所有不是雷的方块”,所以标出所有遇到的雷并非必要。初学者常常把时间浪费在标出所有的雷上,但是为了提高速度,标雷唯一可以接受的理由是能够通过双击打开更多的格子。可以理解为:标n个雷后双击就必须能开n+1乃至更多个格子,如果标了n个雷开不到n+1个格子,标雷就是失败的,不如直接左键单击点开非雷格子。一些玩家从不标雷,因为花费在插旗上的时间可以直接用来单击打开更多的格子,这种风格叫做盲扫。盲扫适用于3BV较低的地图,但对于一些局面,特别是地雷分布比较均匀的局面并不能实现局部最优化操作。实际上,标雷和盲扫这两种技术组合后才能对每一个局部使用最有效的解决方法。标雷双击可以使用1.5 Click技术节约时间。正常的标雷双击方法是点击右键标雷,然后同时点击左右两键完成双击。1.5 Click 的技巧是右键按下(不弹起)来标雷,然后左键在目标数字上按下(不弹起),最后双键同时弹起完成双击。这样在每个标雷和双击的组合中都减少了一个动作。只要右键在左键之前按下,标雷的动作都能完成。右键和左键按下的时间间隔越短,节约的时间越多。理论上这种方法几乎可以使标雷扫法的速度加倍,但实际达到的效果因人而异。第 22 页 共 26 页7 总结本次毕业主要通过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论