毕业论文基于Visual C++ 6.0的扫雷游戏设计11326.doc
摘 要扫雷游戏是 Windows 操作系统自带的一个小游戏,过去的几年里 Windows 操作系统历经数次换代,变得越来越庞大、复杂,但这个小游戏在任何版本的 Windows 操作系统里去却依然保持着原貌。扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法和语言实现,如 C,C+,VB,JAVA 等。本论文研究的是以 Visual C+ 6.0 为开发环境,设计并开发一款扫雷游戏,其功能类似于 Windows 操作系统自带的扫雷游戏。关键字:扫雷游戏;Visual C+;面向对象程序设计目录第一章 引言61.1 课题背景及意义61.2 Visual C+ 发展概况61.3 关于本课程设计7第二章 游戏的总体分析与设计82.1 游戏功能简介82.2 设计构想82.3 流程规划9第三章 扫雷游戏的具体实现过程103.1 设计方法和内容103.1.1详细设计内容与流程:103.2设计流程图113.3设计创新与关键技术11第四章 源程序及运行结果134.1部分源代码134.2运行结果20参考文献22第一章 引言1.1 课题背景及意义当前随着计算机的深入普及,越来越多的人有了个人电脑,人们运用计算 机完成许多重要的工作,计算机在人们的生活中变的越来越来重要。随着计算机 的应用和发展计算机已经不单纯是一个工作工具,人们越来越重视计算机的娱乐 性了,近年来游戏产业规模持续成长,全球每年游戏业总产值已经突破 200 亿美金,远远超越好莱坞电影产业以及音乐娱乐事业, 而成为目前娱乐事业的最大主流。不过游戏产业光 鲜亮丽的背后,却也隐含着高风险、高成本的危机,显示游戏产业慢慢步入“微利时代”。目前整个游戏产业的运作模式已经跟好莱坞电影产业的运作模式相同, 电影 产业有制片、发行、宣传等分工,游戏产业亦同,由专业的游戏研发小组负责研 发游戏,也有如微软这类国际级大厂负责游戏发行,甚至连“游戏制作人”也被 培养成明星一样成为一种招牌.明确的游戏产业分工的确有助于游戏产业的规模 发展与进化,但也无形中让游戏开发成本大增。为了降低游戏开发成本,开发娱 乐性强成本低的游戏就成为当前的主要课题, 在这种趋势下各种小型的低成本的 游戏软件应运而生。在这其中,系统自带的小游戏也占据了相当重要的地位,与它有编写简单容易上手等特点,非常适合人们在完 那些网络游戏和 3D 游戏相比,成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给 紧张工作的人们以放松,还可以让人们的大脑得到开发。这些小游戏包括扫雷,弹球,纸牌等等。而本课题就是扫雷游戏的设计。1.2 Visual C+ 发展概况Visual C+ 是一个功能强大的可视化软件开发工具。自1993年 Microsoft 公司推出 Visual C+1.0 后,随着其新版本的不断问世,Visual C+ 已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0), 但它的应用的很 大的局限性,只适用于 Windows 2000,Windows XP 和 Windows NT4.0。所 以实际中,更多的是以 Visual C+6.0 为平台。Visual C+6.0 不仅是一个 C+编译器,而且是一个基于 Windows 操作 系统的可视化集成开发环境(integrated development environment,IDE)。 Visual C+6.0由许多组件组成 ,包括编辑器、调试器以及程序向导 AppWizard、 类向导 Class Wizard 等开发工具。这些组件通过一个名为 Developer Studio 的组件集成为和谐的开发环境。 Visual C+ 之所以具有如此广泛的用途是因为它具有以下的特点: (1) 真正的面向对象编程,使开发人员不用加入太多的代码,加快了系统开 发的速度。 (2) 可视化的编程方法以及向导的功能,使开发人员不用加入太多的代码就 可以开发出标准的 Windows 程序。 (3) 数据访问的特性, 允许对包括 Microsoft SQL Server 和其他企业数据库在 内的大部分数据库格式建立数据库和前端应用程序, 以及可调整的服务器端部件 等。 (4) 通过 ActiveX 技术可使用其他应用程序提供的功能, 例如 Microsoft Word 字处理器、Microsoft Excel 电子数据表及其他 Windows 应用程序,甚至可直接使 用 Visual Basic 创建的应用程序和对象。 (5) Internet 功能强大,使用户很容易在应用程序内通过 Internet 或企业内部 网(Intranet)访问文档和应用程序,或者创建 Internet 服务器应用程序。 (6) 已完成的应用程序是真正的.exe 文件,您可以自由发布。1.3 关于本课程设计随着世界经济的长足发展和计算机技术的日益成熟, 计算机被应用到人类活 动的各个领域,各种应用软件也相继问世,这其中有相当一部分是游戏软件。使 用游戏软件自然是为了满足人们对娱乐性的要求,而有些软件大都采用 3D 设计 对系统配置的要求较高。在众多游戏软件中, 也不乏一些小游戏的身影, 它们对系统的配置要求较低。能够满足人们对娱乐性的需求,是人们在完成工作娱乐时候的最好选择。现在越 来越多的人投入到这种小游戏的开发当中,它已经成为一类必不可少的游戏软件。在各种操作系统中都附带了一些小的游戏,而这些游戏也成为电脑用户软件 中不可或缺的一部分。作为本系统的开发工具,Microsoft Visual C+ 6.0 成为首选。它具有可视化的编程界面、详细的提示、以及完善的帮助文档,使得软件开发人员感到无比的亲切感。第二章 游戏的总体分析与设计2.1 游戏功能简介当前各种游戏软件层出不穷。因为游戏的开发成本非常大,所以游戏的开发 具有一定的风险性,但是一些小游戏的开发具有成本小,编写简单的优势,所以 这些小游戏在游戏开发中也占有一席之地。在这类小游戏中包括益智类游戏,它 以画面精美游戏方法简单等特点得到大家的认可。 成为人们在工作之余不可或缺 的好伙伴。针对真种情况我用 VC 编写了扫雷这款小游戏。下面对该游戏的功能 做个简单的介绍。扫雷游戏的基本功能:点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显示所有的地雷。 如果没雷,则显示周围雷数,如果周围没雷,则再查看周围 八个区域是否有雷直到有雷为止并显示,这其实是一个递归过程。点击鼠标右键于未知区域,则将其置为有雷而不管是否真的有雷。可选择初、中、高三级并可自定义雷数和区域大小。雷区右下角显示总雷数减去被标明有雷区域的数目。雷区右下角显示扫雷的时间。将雷全部扫清后或失败后显示一对话框。2.2 设计构想相信大多数使用 Windows 操作系统的使用者,对这款游戏都不陌生。这款游 戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在 操作过程中充满了快乐与紧张的气氛。除了游乐当中能带给使用者快乐之外,游 戏的设计内容无形中也不断训练使用者的逻辑思考能力, 对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。在设计之前,我们先来了解这款游戏的规则:在不掀开任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏 结束),惟有将所有不含地雷的方块掀开,游戏才算成功。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块 的八个方向将空白方块翻开。2.3 流程规划流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。 画面初始时,以游戏者最后一次设定的地雷区大小为范围画出地雷区,当游戏者按下第一个方块时产开始计时,接着就是如何判断按下的方块是非地雷时的 处理,这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方块 是否含有地雷及是否继续往外翻开,直到踩到雷或者游戏胜利为止。第三章 扫雷游戏的具体实现过程3.1 设计方法和内容3.1.1详细设计内容与流程:整个程序完成后,要使操作界面出现一个9*9的棋盘格式,所以想到应该用到数组,设置一个a11113的三维数组,虽然地图是 9*9的 ,但数组申明是却是a11113,a0表示有无雷,a1表示周围雷的个数,a2表示是否打开,前面的11是因为某块没有雷的时候计算周围地雷的数量的时候,如果这块是(1,1)这样的边或角的时候考虑起来就特别麻烦所以就在9*9外面再围一圈(外面这圈全部数据定义为0)这样9*9的数据都可以用相同的方式计算了不需要考虑其他的情况了,这样就使问题变得简单化,然后将其设置为静态的,这样的好处是静态数据成员只分配一次内存,供所有对象共用,并且能将变量的值保存至下一次调用时,提高了系统的运行速度1。利用for循环,if循环的嵌套依次扫描棋盘上的坐标,如果选择将该块打开,并且该块周围没有雷的话,则将其余8块打开,并记录打开的雷的数量,直到所有坐标被打开,或踩到雷时游戏结束,具体步骤如下:(1) 从头到尾扫描并计数打开的数量 : 利用for循环扫描所有满足条件的数组,再利用if循环,如果该块打开且周围没有雷,则周围8块全部打开 ,并统计打开的块数。(2) 屏幕输出:利用for循环,if循环的嵌套依次扫描棋盘上的坐标,如果选择将打开该块,并且该块周围没有雷的话,则将其余8块打开 ,输出为空格。如果该块不打开,而是做标记即if(aij2 = 2)时,就输出,未打开或标记的仍然输出。(3) 输入坐标操作:设置三个参数x,y,choice,利用cout在屏幕上输出"输入坐标x=","输入坐标y=",使用while语句,如果输入的坐标值已经被打开,则利用cout输出"已经打开,请重新输入!",然后执行上一步操作。接着用cout输出“选择操作(打开:1,标记:2):”如果该坐标未被打开,跳过while语句往下执行if语句,当choice被赋值为1时,(即打开操作)此块打开没有雷且周围8块雷数为0的时候,程序按步骤(1)继续进行,若打开有雷的话,则利用cout输出“ 很遗憾! 踩到地雷了! GameOver!”游戏至此结束,当choice被赋值为2时,按(2)中操作输出2 .(4) 设置地雷:利用srand函数和rand函数设置随机的种子。利用系统的时间参数,使time(NULL)返回一个表示当前系统时间的整数,把这个数作为种子,以此保证程序结果的随机性3.3.2设计流程图设置静态数据成员a11113以及地雷总数,打开数等变量利用if循环,for循环的套用,当条件aij2 = 1成立,则该块打开 利用if循环,for循环的套用,当条件aij2 = 2成立,则该块以标记如果左边不成立,即为踩到雷,则输出" 很遗憾! 踩到地雷了! GameOver!"如果aij1 = 0,表示此块周围没有雷,周围8块以“ ”输出将打开的雷数进行自加并输出,以num变量表示 图3-1 设计流程图3.3设计创新与关键技术设计的难点在于如何产生随机数的问题,要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了,在这里需要用到两个生成随机数的函数,一个是srand(),一个是rand(),首先给srand()提供一个种子,unsigned int类型,其取值范围从065535,srand()根据这个种子会由一个特定的公式生成一个随机数序列;然后调用rand(),它会依次从这个序列中返回一个数(在0到32767之间),这里在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。地图是 9*9的 数组申明是却是a11113 后面的3前面已经做过声明,a0表示有无雷,a1表示周围雷的个数,a2表示是否打开,前面的11是因为某块没有雷的时候计算周围地雷的数量的时候,如果这块是(1,1)这样的边或角的时候考虑起来就特别麻烦所以就在9*9外面再围一圈(外面这圈全部数据定义为0)这样9*9的数据都可以用相同的方式计算了不需要考虑其他的情况了。第四章 源程序及运行结果4.1部分源代码#include <iostream.h>#include <stdio.h>#include <time.h> /时间库,要用到里面的时间来做随机数的种子#include <stdlib.h> >/标准工具库,要用到其中的rand()static int a11113; /a0 有无雷 a1周围雷的个数 a2 打开没有;int gameflag = 1; /游戏是否继续进行 ,=0就是结束游戏(gameflag为一个变量)int flag = 0; /完成游戏后gameflag = 0 , flag区分是否完成游戏 int num = 0; /打开几块 int _num; / 地雷总数 int play(void) int i,j; /*重头到尾的扫描*/ for(i=1;i<=9;i+) for(j=1;j<=9;j+) if(aij2 = 1) /如果该块打开 if(aij1 = 0) /如果某块上面没有雷,周围全部打开 (1) ai-1j+12 = 1; /周围8块的坐标ai-1j2 = 1; ai-1j-12 = 1; aij+12 = 1; aij-12 = 1; ai+1j-12 = 1; ai+1j2 = 1; ai+1j+12 = 1; /*从尾到头的扫描并计数打开的数量*/ num = 0; for(i=9;i>=1;i-) for(j=9;j>=1;j-) if(aij2 = 1) /如果该块打开 if(aij1 = 0) /如果某块上面没有雷,周围全部打开 (2) ai-1j+12 = 1; ai-1j2 = 1; ai-1j-12 = 1; aij+12 = 1; aij-12 = 1; ai+1j-12 = 1; ai+1j2 = 1; ai+1j+12 = 1; num += aij2; /等价于num=num+aij2if(num = (81 -_num) /如果完成了游戏推出 flag = 1 gameflag = 0; flag = 1; return 1; /*屏幕输出*/ cout<<" 你已经打开了"<<num<<"块"<<" 地雷总数:"<<_num<<endl; for(i=1;i<=9;i+) for(j=1;j<=9;j+) if(aij2 = 1) if(aij1 = 0) cout<<" " else cout<<" "<<aij1<<" " else if(aij2 = 2) /标记就输出 cout<<" " else cout<<" " /没有打开的输出 if(j = 9) cout<<endl; for(j=1;j<=9;j+) / 内嵌循环2 if(aij2 = 1) cout<<" " else cout<<" "<<i<<","<<j<<" " if(j = 9) cout<<endl; /*输入坐标操作*/ int x,y,choice; cout<<"输入坐标x=" cin>>x; cout<<"输入坐标y=" cin>>y; while(axy2 = 1) /如果该块已经打开,则执行括号内语句,否则 cout<<x<<","<<y<<"已经打开,请重新输入!"<<endl; cout<<"输入坐标x=" cin>>x; cout<<"输入坐标y=" cin>>y; cout<<"选择操作(打开:1,标记:2):" /如果未打开,直接执行此句cin>>choice; if(choice = 1) if(axy0 = 0) axy2 = 1; num+; else cout<<" 很遗憾! 踩到地雷了! GameOver!"<<endl; system("pause"); /system是一个系统调用;pause是一个系统操作;目的是为了不让运行窗口一闪而过,让你看清楚运行的结果。gameflag = 0;/游戏结束 return 0; if(choice = 2) axy2 = 2; return 0; int main(void) int n = 10; cout<<"设置地雷数(10-30,不足10按10算,超过30按30算)n=" cin>>n; if(n <= 10) n = 10; if(n >= 30) n = 30; _num = n; system("cls"); /调用清屏命令/*初始化*/ int i,j; for(i=0;i<11;i+) for(j=0;j<11;j+) aij0=0; aij1=0; aij2=0; /*设置地雷*/ srand( (unsigned)time( NULL ) ); /随机的种子 (srand是设计随机数的种子,作用是使每次产生的随机数不一样,time(NULL)会返回一个表示当前系统时间的整数,把这个数作为种子就能保证程序每次运行结果都不一样了)int n1,n2; for(i= 0;i<=n;) 待添加的隐藏文字内容2 n1 = rand()%9 + 1; n2 = rand()%9 + 1; if(an1n20 != 1) an1n20 = 1; i+; else continue; /*计算某块周围有几颗地雷*/ for(i=1;i<=9;i+) for(j=1;j<=9;j+) if(aij-10 = 1) aij1+; if(aij+10 = 1) aij1+; if(ai-1j0 = 1) aij1+; if(ai-1j-10 = 1) aij1+; if(ai-1j+10 = 1) aij1+; if(ai+1j0 = 1) aij1+; if(ai+1j+10 = 1) aij1+; if(ai+1j-10 = 1) aij1+; while(gameflag) play(); system("cls"); if(flag) cout<<endl; cout<<endl; cout<<endl;4.2运行结果(1)程序运行刚开始会出现一个“设置地雷数(10-30,不足10按10算,超过30按30算)n=”的界面,便可输入用户想要选择的数值,回车然后进入如(图4-1)的界面。 设置雷数 图4-1(2)接着根据提示输出X,Y,的坐标以及打开的操作,如(图4-2)界面 。 打开操作 图4-2(3)继续根据提示输入x,y的坐标以及标记的操作,标记后将出现图案,如(图4-3)。标记操作 图4-3(4)重复步骤(2)或(3),直至游戏结束。游戏失败 图4-4参考文献1郑莉,董渊,何江舟.C+语言程序设计M.第4版.清华大学出版.2010.72Stanley B.Lippman,Josée LaJoie,Barbara E.Moo.C+ Primer(中文版) M.第四版.人民邮电出版社.20063 Walter Savitch. C+面向对象程序设计基础、数据结构与编程思想M.第4版.清华大学出版社.20034钱能.C+程序设计教程M.第2版.清华大学出版社.20055郑莉.C+语言程序设计案例教程M.第1版.清华大学出版社.20056韦朴,陈泰生. Visual C+通用范例开发金典M.电子工业出版社.20087詹发荣.C+语言程序设计M. 中国铁道工业出版社.2006 8尹季昆.C+语言程序设计M. 科学出版社.2005Emloyment tribunals sort out disagreements between employers and employees. You may need to make a claim to an employment tribunal if: you don't agree with the disciplinary action your employer has taken against you your employer dismisses you and you think that you have been dismissed unfairly. For more informu, take advice from one of the organisations listed under Fur ther help. Employment tribunals are less formal than some other courts, but it is still a legal process and you will need to give evidence under an oath or affirmation. Most people find making a claim to an employment tribunal challenging. If you are thinking about making a claim to an employment tribunal, you should get help straight away from one of the organisations listed under Further help. ation about dismissal and unfair dismissal, see Dismissal. You can make a claim to an employment tribunal, even if you haven't appealed against the disciplinary action your employer has taken against you. However, if you win your case, the tribunal may reduce any compensation awarded to you as a result of your failure to appeal. Remember that in most cases you must make an application to an employment tribunal within three months of the date when the event you are complaining about happened. If your application is received after this time limit, the tribunal will not usually accept i. If you are worried about how the time limits apply to you If you are being represented by a solicitor at the tribunal, they may ask you to sign an agreement where you pay their fee out of your compensation if you win the case. This is known as a damages-based agreement. In England and Wales, your solicitor can't charge you more than 35% of your compensation if you win the case. You are clear about the terms of the agreement. It might be best to get advice from an experienced adviser, for example, at a Citizens Advice Bureau. To find your nearest CAB, including those that give advice by e-mail, click on nearest CAB. For more information about making a claim to an employment tribunal, see Employment tribunals. The (lack of) air up there Watch m Cay man Islands-based Webb, the head of Fifa's anti-racism taskforce, is in London for the Football Association's 150th anniversary celebrations and will attend City's Premier League match at Chelsea on Sunday. "I am going to be at the match tomorrow and I have asked to meet Ya ya Toure," he told BBC Sport. "For me it's about how he felt and I would like to speak to him first to find out what his experience was." Uefa has opened disciplinary proceedings against CSKA for the "racist behaviour of their fans" during City's 2-1 win. Michel Platini, president of European football's governing body, has also ordered an immediate investigation into the referee's actions. CSKA said they were "surprised and disappointed" by Toure's complaint. In a statement the Russian side added: "We found no racist insults from fans of CSKA." Age has reached the end of the beginning of a word. May be guilty in his seems to passing a lot of different life became the appearance of the same day; May be back in the past, to oneself the paranoid weird belief disillusionment, these days, my mind has been very messy, in my mind constantly. Always feel oneself should go to do something, or write something. Twenty years of life trajectory deeply shallow, suddenly feel something, do it.一字开头的年龄已经到了尾声。或许是愧疚于自己似乎把转瞬即逝的很多个不同的日子过成了同一天的样子;或许是追溯过去,对自己那些近乎偏执的怪异信念的醒悟,这些天以来,思绪一直很凌乱,在脑海中不断纠缠。总觉得自己似乎应该去做点什么,或者写点什么。二十年的人生轨迹深深浅浅,突然就感觉到有些事情,非做不可了。The end of our life, and can meet many things really do?而穷尽我们的一生,又能遇到多少事情是真正地非做不可? During my childhood, think lucky money and new clothes are necessary for New Year, but as the advance of the age, will be more and more found that those things are optional; Junior high school, thought to have a crush on just means that the real growth, but over the past three years later, his writing of alumni in peace, suddenly found that isn't really grow up, it seems is not so important; Then in high school, think don't want to give vent to out your inner voice can be in the high school children of the feelings in a period, but was eventually infarction when graduation party in the throat, later again stood on the pitch he has sweat profusely, looked at his thrown a basketball hoops, suddenly found himself has already can't remember his appearance. Baumgartner the disappointing news: Mission aborted. r plays an important role in this mission. Starting at the ground, conditions have to be very calm - winds less than 2 mph, with no precipitation or humidity and limited cloud cover. The balloon, with capsule attached, will move through the lower level of the atmosphere (the troposphere) where our day-to-day weather lives. It will climb higher than the tip of Mount Everest (5.5 miles/8.85 kilometers), drifting even higher than the cruising alt