当前位置:文档之家› 扫雷游戏

扫雷游戏

扫雷游戏
扫雷游戏

南昌大学实验报告

学生姓名:邹晓敏学号:6103313025 专业班级:数媒131

实验类型:□验证□综合□设计□创新实验日期:实验成绩:

一、实验项目名称

扫雷游戏编程

二、实验目的

1、掌握Windows SDK编程;

2、掌握Windows API的使用;

3、深入体会完整项目的开发过程。

三、实验基本原理

SDK:(软件开发工具包)是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。它可以简单的为某个程序设计语言提供应用程序接口API的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。API(应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API 而使操作系统去执行应用程序的命令动作。API和SDK 是开发Windows应用程序所必需的东西,MFC编程框架和类库都是建立在它们之上的,

GDI:是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。

DC:MFC图形设备接口的设备描述表,它是MFC的主要对象之一。通过CDC类进行各种绘图操作,

四、实验步骤

1. 游戏分析

经过对游戏的初步分析,扫雷游戏含有如下规则:根据输入的信息,执行相应的挖雷,插旗,疑问标记,自动蔓延开挖等。如果选择了标记功能,那么单机右键会依次对未知点进行插旗,标记,取消插旗与标记。如果点滴到插旗的如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利,如果所有的雷都被插旗或者点击后剩余。而后为了丰富游戏添加了笑脸和计时器功能。

2. 实现功能

1、鼠标左击排雷,右击插小旗,打问号;

2、方格里面的数字表示方格周围的雷数;

3、游戏开始的同时开始计时,点笑脸能归零。

4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏;

5、任何时候开始游戏第一次点击不会扫到雷。

3. 编写程序

创建MFC单个文档项目,编写程序中要包含创建窗口函数,其中用到的窗口消息有WM_CREATE,WM_SIZE,WM_PAINT,WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE,WM_RBUTTONUP,WM_RBUTTONDOWN,WM_USER_DBBUTTONUP,WM_DESTROY。涉及到的主要函数有:

BOOL layMines(); 布雷

void placeNumber(); 计算数据

void markOtherMine(); 标雷

void markOtherFlag(); 标旗

void pushMine(POINT mousePos); 冲雷

void onMouseLButtonClick(HWND hwnd,POINT mousePos); 左键处理

void initGame(); 初始化游戏

VOID CALLBACK TimerProc (HWND, UINT, UINT, DWORD ) ; 定时器处理

4. 调试程序,试玩几遍看是否能够达到预期效果

五、实验数据及处理结果

实验部分重要源程序

1.布置雷区

BOOL layMines()

{

gameState = 0;//游戏重新开始

openCount = 0;//翻开空格数

btLandmineMapinfo[0][0]=(BYTE)0;

DWORD ixMine,iyMine,iMineBomb,icBomb=0,x,y;

//RECT rcMine;

//初始为0

for(int i=0;i

{

for(int j=0;j

}

//分4部分

ixMine=(int)floor(mineColNum/2.0);

iyMine=(int)floor(mineRowNum/2.0);

iMineBomb=(int)floor(mineBomb/4.0);

srand((unsigned)time(NULL)); //得到时间随机

//设置左上

while (icBomb

x=rand()%ixMine;

y=rand()%iyMine;

if (btLandmineMapinfo[x][y]!=0x10) {

btLandmineMapinfo[x][y]=(BYTE)0x10;

icBomb++;

}

}

icBomb=0;

//设置右上

while (icBomb

x=rand()%(mineColNum-ixMine)+ixMine;

y=rand()%iyMine;

if (btLandmineMapinfo[x][y]!=0x10) {

btLandmineMapinfo[x][y]=(BYTE)0x10;

icBomb++;

}

}

icBomb=0;

//设置左下

while (icBomb

x=rand()%ixMine;

y=rand()%(mineRowNum-iyMine)+iyMine;

if (btLandmineMapinfo[x][y]!=0x10) {

btLandmineMapinfo[x][y]=(BYTE)0x10;

icBomb++;

}

}

icBomb=0;

//设置右下

while (icBomb<(mineBomb-3*iMineBomb)) {

x=rand()%(mineColNum-ixMine)+ixMine;

y=rand()%(mineRowNum-iyMine)+iyMine;

if (btLandmineMapinfo[x][y]!=0x10) {

btLandmineMapinfo[x][y]=(BYTE)0x10;

icBomb++;

}

}

return TRUE;

}

2.冲雷

void pushMine(POINT mousePos)

{

int i,j;

POINT p;

if(mousePos.x<0||mousePos.y<0||mousePos.x==mineColNum||mous ePos.y==mineRowNum)//下标越界

{

return;

}

if(btLandmineMapinfo[mousePos.x][mousePos.y]<=2)//未翻开的

{

btLandmineMapinfo[mousePos.x][mousePos.y]=countBomb(mousePos) ;//计算雷数,翻开

openCount++; //计算翻开的

if(btLandmineMapinfo[mousePos.x][mousePos.y]!=15)//不为空

{

return;

}

else//为空,冲雷

{

for(i=mousePos.x-1; i<=mousePos.x+1; i++)

{

for(j=mousePos.y-1; j<=mousePos.y+1; j++)

{

p.x=i;p.y=j;

pushMine(p);

}

}

return;

}

}

else//已经翻开的

return;

}

3.统计雷数

int countBomb(POINT mousePos)

{

int iBomb=0;

for(int i=mousePos.x-1;i<=mousePos.x+1;i++)

{

for(int j=mousePos.y-1;j<=mousePos.y+1;j++)

{

if(i<0||j<0||i==mineColNum||j==mineRowNum||(i==mousePos.x&&j== mousePos.y)) continue;

if(btLandmineMapinfo[i][j]>=0x10||btLandmineMapinfo[i][j]==3||btLan dmineMapinfo[i][j]==5) iBomb++;

}

}

return 15-iBomb;

}

4.定时器程序

VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)

{

POINT pp;

RECT rect;

//

timeCount++;

pp = getTimePosition();

rect.left = (long)pp.x;

rect.top = (long)pp.y;

rect.right = (long)(pp.x+3*NUM_BITMAP_WIDTH);

rect.bottom = (long)(pp.y+3*NUM_BITMAP_HEIGHT);

InvalidateRect (hwnd, &rect, FALSE) ;//

}

5.处理左键程序

void onMouseLButtonClick(HWND hwnd,POINT mousePos)

{

if(btLandmineMapinfo[mousePos.x][mousePos.y]%0x10==0||btLan dmineMapinfo[mousePos.x][mousePos.y]%0x10==2)

{

if(btLandmineMapinfo[mousePos.x][mousePos.y]!=0x10)

{

pushMine(mousePos);//冲雷

if(mineBomb+openCount==mineRowNum*mineColNum)

{

markOtherFlag();

gameState = 3;

KillTimer (hwnd, ID_TIMER) ;

}

InvalidateRect (hwnd, NULL, FALSE) ;

}

else

{

btLandmineMapinfo[mousePos.x][mousePos.y]=3;//炸雷

markOtherMine();

gameState = 2;

MessageBeep(0);

KillTimer (hwnd, ID_TIMER) ;

InvalidateRect (hwnd, NULL, FALSE) ;

}

}

}

6.贴砖

hdcMem = CreateCompatibleDC (hdc) ;

SelectObject (hdcMem, hBitmap) ;

for (y = 0 ; y < mineRowNum ; y ++)

{

for (x = 0 ; x < mineColNum ; x ++)

{

BitBlt(hdc,MINEAREA_SIDE+MINE_BITMAP_WIDTH*x,MINE AREA_TOP+MINE_BITMAP_HEIGHT*y,MINE_BITMAP_WIDTH,MIN E_BITMAP_HEIGHT,hdcMem,0,MINE_BITMAP_HEIGHT*

(btLandmineMapinfo[x][y]%0x10),SRCCOPY);

}

}

实验结果截图

1.开始游戏

2. 游戏中

3.标记雷

4.双击

5.游戏失败

6.游戏胜利

六、思考讨论题或体会或对改进实验的建议

从开始制作扫雷游戏到结束前前后后已经持续了半个学期,在这半个学期我收获了很多,可以说是一个从无到有的过程。

因为大一编程的基础不是很好一开始这门课是感到有些吃力的,对扫雷游戏

更是无从下手。但是扫雷让我们从实践中学到了更多的C++编程知识,一开始看到示例中让人眼花缭乱的程序代码让人很有放弃的冲动,于是我就开始分析扫雷游戏的规则和我编程是需要实现的功能,大致有了一个方向之后便下载老师上传的代码进行研究。一步一步了解其代码的用途,看懂代码之后自己动脑去想如果自己会怎么设计。在这中间也遇到不少的困难,一开始不知道位图是怎么做的,那些看起来可爱的表情做起来却并不简单,还要在代码里将这些表情的二维坐标对应起来,过程细致而繁杂。还有在设定难度时要重新画方格,右键单击时出现不同的状态,第一次点击的时候不能扫到雷等等难关,都被坚持不懈的毅力和耐力一一克服,每天做一点就做成了有游戏功能的扫雷。我后来又参考老师扫雷10的代码在我的扫雷游戏中加了笑脸和计时器的功能,因为我们代码的排版不一致,所以添加这两个功能花费了我很多的时间。但是也最有收获,再不能成功运行的情况下我自然而然就思考了很多,想着哪一步是什么功能一步一步去完成最后成功的增加了笑脸的功能。之后加计时器的功能时就比较有经验快速的完成了。

看着自己的扫雷游戏能运行,感叹自己的辛苦没有白费。也慢慢发现这门课的有趣,之后的涂鸦板希望自己也能保持热情好好的去完成。

七、实验问题

1.简要描述该游戏你的设计思路。

游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示

标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系

不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周

边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其

为中心的周边方块内藏有3个地雷。当按下的方块不是地雷,且周边八

个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。

流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。画面初始时,以游戏者最后一次设

定的地雷区大小为范围画出地雷区,但此时并未产生地雷。当游戏者按下

第一个方块时产生地雷资料并启动定时器,不要让游戏者第一次就踩到地

雷,接着就是如何判断按下的方块是非地雷时的处理,这也是整个游戏的

技术核心,可以通过递归的观念来检查周边的方块是否含有地雷及是否继

续往外翻开。

2.游戏中主要处理了哪些消息?

WM_CREATE(窗口创建),WM_SIZE(改变窗口大小),WM_PAINT(重绘),WM_LBUTTONDOWN(左键按下),WM_LBUTTONUP(左键起来),WM_MOUSEMOVE(鼠标移动),WM_RBUTTONUP(右键起来),

WM_RBUTTONDOWN(右键按下),WM_USER_DBBUTTONUP(双键起来),WM_DESTROY(窗口销毁)

3.编程中你是否有自己的编程习惯?在命名方法是否有自己

的考虑?

编程中我喜欢把整个框架主函数先编好然后在根据主函数中的需要来编调用函数。先有骨架再加血肉。命名方

法会根据其作用来命名浅显易懂,多用英语或者简写。

软件测试 扫雷游戏

软件测试 实验报告(20 15 -20 16 学年第 2学期) 学号: 学生姓名: 专业班级: 学院: 学生成绩:

1.引言 1.1编写目的 编写该测试报告目的为: (1).查找并总结该模块程序所存在的问题; (2).为更改存在的问题,提供参考。 (3).评估测试测试执行和测试计划是否符合 1.2 程序功能 扫雷游戏中各个功能实现 1.3 测试对象 扫雷软件游戏规则测试 1.4 测试方法 黑盒测试 2.测试计划 2.1、条件: ?方块当前状态:标识问号方块、方块初始状态、方块标识红旗、 标识数字X且周围已标记了X个雷、标识数字X且周围没有标记完X个雷,标识数字X标雷错误 ?鼠标操作:左键、右键、双击 ?方块状态:有雷、无雷 2.2、动作: ?方块白色 ?方块标识问号 ?方块标识数字 ?方块旗子 ?炸弹爆炸,游戏结束

?未标识方块闪速 ?周围所有的非雷显示 2.4、简化公式: 6*3*2 =(1+1+1+1+1+1)*3*2 =1*3*2+1*2*2+1*3*2+1*1*1+1*1*1+1*1*1 =6+4+6+1+1+1 =19

3.测试结果分析 3.1结果分析 在程序代码基本完成后,经过不断的调试和修改,最后测试本次所设计的扫雷游戏能够正常运行,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,总的来说本次设计在功能上已经基本达到要求,在其他细节方面有待以后完善。 3.2 修改建议 1.在游戏中可以假如一些声音的提示,在游戏完成和失败的时候弹出一些小 的Flash动画。 2.完善一下扫雷英雄榜等。 4.测试评估 4.1测试任务评估 本次测试执行准备充足,完成了既定目标。 4.2 测试对象评估 测试对象尚未完善,不符合现阶段测试质量要求,存在着一些缺陷,本测试需要进一步修正,重新进行测试。

扫雷游戏教案

一、入门准备训练 从一个假成语导入:八面埋伏(十面埋伏) 注:【秦朝末年(公元前206年),楚汉交兵争霸天下.战争持续了多年,虽然还没有分出最后胜负. 但是楚霸王项羽的领地已经越来越少,大半天下为汉王刘邦所得.刘邦命足智多谋的韩信挂帅,统帅六-七十万大军浩浩荡荡追剿项羽.韩信设下了十面埋伏之计,将楚军诱入罗网,层层包围。】 谈话:对红色的格子八面埋伏,你需要哪些格子(理解一个格子,需要哪些格子来包围它) 图①是一个雷区(黑点表示地雷),让学生试着分析下数字与包围它的雷有什么联系)并说一说

2.根据这个规律,以下是已经被扫出的雷区,你能填出红格中的数字吗。 3、下面的几个雷区中有数量不等的地雷,请在空格里填上合适的数字。 ① ② ③ 最简单的问题 找一找:下面的雷区中,空格里可能有地雷,请根据格子中的数,找出地雷的位置。(用●表示地雷)

图中间的3告诉你什么?有数字的格子表示没有地雷,把空格中可能有地 雷的地方标上●。 你首先可以确定哪些位置一定有地雷,为什么?怎么确定哪个空格没有地 雷呢? 滚动思考:在下面的雷区中找出地雷 下面的雷区中,空格里可能有地雷,请根据格子中的数,找出地雷的位置。(用●表示地雷) 温馨提示:注意先看,哪个位置是可以确定有地雷的?再用其他格子的数字进行验算,没有矛盾,你的扫雷就完成了。 关键位置的分析 看一看:下面这片雷区中只有5颗地雷,小明却找出了6颗,请你看一看,哪一颗应该不是地雷?

(1) 哪个数字相邻的空格里的地雷数量是合乎实际的? (2) 那两个数字相邻的空格里的地雷数量不对了? (3) 去掉哪个地雷合适? 滚动思考:下面的雷区中已经找出了一些地雷,但是还有一些没有找到,请把还 温馨提示:注意寻找,哪些格子的附近还少地雷? 无法确定的时候,可以先试一试。 综合分析 找一找:在空格里标出地雷,有地雷的标上 ,如果没有地雷,就在空格里写上表示周围地雷数量的数字。

JAVA课程设计扫雷小游戏

Java游戏设计报告 院系计算机科学学院 班级计科11002 姓名张林峰 设计日期2012.12.18—2012.12.29

1·设计内容及要求 1.1·扫雷小游戏的基本要求 扫雷小游戏主要采用Java语言编写,适合windows XP以下的系统,以eclipse 为平台。具体要求如下: <1>扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。单机游戏菜单选择“初级”、“中级”和“高级”。 <2>游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。 <3>用户选择某个方格,单击它就行。若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。 <4>如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。 <5>用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。 <6>扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。 <7>如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。 1.2需求实现的主要功能 (1)该游戏具有计时功能,即扫完全部地雷所花费的时间。 (2)用户可以选择是否有音效。 (3)用户可以自定义级别,还可以输入任意地雷数。 (4)自动保存扫雷排行榜。 2·需求分析 2.1扫雷区域的布局设计 系统的整体布局为:CardLayout布局,采用菜单、按钮、面板……等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。 2.2雷区的设计 MineArea类是javax.swing包中Jpanel容器的子类,实现了ActionListener 和MouseListener接口,所创建的对象:mineArea是MineGame类中最重要的成员之一,作为一个容器添加到MineGame窗口的中心。 2.3音效的设计

经典游戏:扫雷的技巧攻略

经典游戏:扫雷的技巧攻略 扫雷作为策略游戏,需要游戏者精确的判断。现在扫雷高级的官方最快纪录是33.95秒,中级则是由一个波兰玩家保持的8.5秒。而初级纪录是1秒,世界上很多人达到了这一点。在1秒的时间里完成初级扫雷,据测算概率在0.00058%至0.00119%之间(属于运气题),最可能的方法是直接点击四个角的方块。而本文所作的事情,则是将雷与雷之间的规律给你揪出来,并且深入思考其中的内涵。让你以后面对扫雷时,缩短与记录的差距,战无不胜! 从简单雷区入手下图是一个初级的雷区,并且标注了两颗雷的位置,你能将剩下的地雷扫描出来吗? 经过逐一排查,可以很轻松的确定雷区中的6颗地雷所在位置:

再来看一个简单的“雷区”: 通过逐步扫描每一个方块会发现:首先最左边的和最右边的两个格子都一定是地雷,从左数第二个空格子和从右数第二个空格子也都是地雷,由于数字1的关系,从左数第3个格子和从右数第3个格子都不是地雷,翻开一定是数字1……这样一直下去,最后你会发现最中间的两个空格子,不管有没有地雷,都和周围格子上的数字不符。也就是说这样的雷区有bug,是无解的。雷区中的逻辑门怎么判断一个雷区是否有bug?又怎么判断雷区中地雷的具体位置呢?难道一定要从头到尾将雷区扫描一遍吗?其实这些雷区里其实藏着一个规律。我们用数学方法来分析了上例的雷区:在之前提到的这两个雷区里,把还没有翻开的格子交叉标记上字母x和x’。可以看到:当x的格子有雷时,x’格子一定没有地雷,反之亦然。如果将最左边的空格子作为输入,把最右边的格子作为输出,输入结果和输出结果一定是一样或者相反的。如果是相反的,这相当于一个NOT (“非”)门电子元件。如果是一样的,就有趣了,这样的一片雷区就具备了电路导线的性质!

(完整word版)JAVA课程设计--扫雷游戏

合肥学院 计算机科学与技术系 课程设计报告 2009~2010学年第二学期 课程Java语言与应用 课程设计名称扫雷游戏 学生姓名胡远远 学号0604031005 专业班级07网络工程一班 指导教师许强张贯虹

2010年09月 1.设计内容及要求 1.1 扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下:(1)选择级别后将出现相应级别的扫雷区域,这是用户使用鼠标左键单击雷区中任何一个方块便启动计时器。 (2)用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下五雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (3) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (4)扫雷胜利后,显示游戏胜利。 (5) 用户可以右击空格,可以选择标记为“旗帜”、“问号”或者返回成空格。 1.2 需实现的主要功能 (1)用户点击笑脸实现复位操作。 调用repaint()和validate()函数对界面进行重置以及刷新操作(2)可以显示用户完全扫雷成功所花时间。 文本框TF记录扫雷成功所花的时间 (3)在失败和胜利后跳出失败或胜利的文本框 JoptionPane 该类用来调出对话框并提示胜利 2.需求分析 2.1 扫雷棋盘的布局设计 系统的整体布局为:CardLayout布局, 采用了文本框、按钮、面板、框架…等组件,菜单主要有run按钮笑脸和哭脸,按钮的功能是重新开始新的游戏。

扫雷

大连科技学院 Java课程设计报告 题目扫雷小游戏 学生姓名 XXX 专业班级软件工程12-1 指导教师史原职称讲师 所在单位大连科技学院 教研室主任刘瑞杰 完成日期 2015年6月12日

目录 1.总体设计 (1) 1.1本系统的主要功能 (1) 1.2系统包含的类及类之间的关系 (1) 2.详细设计 (2) 2.1 MineGame.java(主类): (2) 2.2 MineArea.java: (2) 2.3 Block.java: (3) 2.4 BlockView.java (3) 2.5 LayMines.java: (3) 2.6 Record.java: (4) 2.7 ShowRecord: (4) 3.运行效果 (5) 3.1 系统主界面 (5) 3.2初级录入界面 (5) 3.3中级录入界面 (6) 3.4高级录入界面 (6) 3.5游戏结束录入界面 (7) 3.6游戏英雄榜界面 (7) 参考文献 (8) 附录1 软件源程序 (8) 课程设计实践总结: (25)

1.总体设计 1.1本系统的主要功能 (1)本系统用户可以自定义级别并且可以任意输入雷数; (2)具有计时功能,即显示用户完成移动盘子所花费的时间; (3)自动保存扫雷英雄榜; 1.2系统包含的类及类之间的关系 本系统共包括7个java源文件。 如图1-1所示。 图1-1 类之间的关系

2.详细设计 2.1 MineGame.java(主类): (1)成员变量 bar和fileMenu 提供菜单操作,单击菜单操作中的选项为“初级”,“中级”,“高级”或“扫雷英雄榜”;mineArea 是扫雷区域,提供有关雷的主要功能;英雄榜”负责存放三个级别的扫雷最好成绩;showHeroRecord负责显示英雄榜中的数据(2)方法 MineGame()是构造窗口,负责完成窗口的初始化。 ActionPerformed(ActionEvent)方法是MineGame类实现的ActionListener接口中的方法,该方法负责执行菜单发出的有关命令。用户选择菜单中的菜单项可触发ActionEvent事件,导致actionPerformed(ActionEvent)方法执行相应的操作。 Main(String[])方法是程序运行的入口方法。 (3)源代码见文件MineGame.java 2.2 MineArea.java: (1)成员变量 block和Block类型的数组,用来确定雷区有多少需进行扫雷的方块; blockView是BlockView类型的数组,负责block数组中Block对象提供视图; lay是LayMines类型的对象,负责设置block数组中的哪些方块不是雷; record负责提供保存成绩的界面,是一个对话框,默认为不可见,用户只有扫雷成功后,才可以看见该对话框; reStart是一个按钮对象,用户单击它重新开始游戏; time是计时器对象,负责计算用户用时。 (2)方法 initMineArea(int,int,int,int)方法可根据参数提供的数据设置雷区的宽度,高度,类的数目以及雷区的级别。 actionPerformed(actionEvent)是MineArea类实现的ActionListener接口中的方法。当用户单击blockView中的某个方块时actionPerformed(actionEvent)执行有关算法。 Show()方法是一个递归方法,actionPerformed(actionEvent)方法执行将调用show 方法进行扫雷。 mousePressed(mouseEvent)方法是MineArea类实现的MouseListener接口中的方

扫雷小游戏课程设计

西安科技大学 软件工程课程设计报告 题目:扫雷游戏开发 班级:计科0901班 学号: xxxxxxxxxxxx 姓名: xxxxxxx 电话:xxxxxxxxxxxxx

2012年7月 目录 1 绪论 (3) 1.1 选题目的及意义 (3) 1.2 系统概述 (3) 2 可行性研究报告 (4) 3 需求规格说明书 (5) 4 总体设计说明书 (6) 5详细设计说明书 (7) 6 系统实现 (16) 6.1 开发环境 (16) 6.2 关键技术 (16) 6.3 运行结果 (16) 7测试分析报告 (17) 8心得体会 (19) 参考文献

1.绪论 1.1选题目的及意义 随着现在生活节奏的加快,人们在工作学习之余需要一个轻松娱乐的放松环境。因此我编写此软件的目的,一方面作为初学者来了解java环境下的小程序开发,另一方面使用户能在娱乐休闲的同时拓展思维能力。扫雷是单人计算机游戏。游戏的用户界面由小方格组成的战场构成。当游戏开始时,计算机将固定的地雷数随机的放到战场的方格。此游戏还允许玩家指定战场中的地雷数。 参考Windows 操作系统提供的扫雷游戏,改进扫雷游戏程序,增加以下功能:在主界面中添加一个菜单栏,菜单栏中包括游戏和帮助两个菜单,其中游戏菜单中设置初级、中级、高级、自定义、声音、扫雷英雄榜这几个菜单项,帮助菜单中设置游戏规则和制作人员两个菜单项。 背景说明: a.软件名称:扫雷 b.用户:所有扫雷游戏爱好者 1.2 系统概述 1.2.1扫雷游戏的基本要求 Windows 2000/XP系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计使用Java语言编写一个与其类似的扫雷游戏。具体要求如下: (1) 扫雷游戏分为初级、中级和高级三个级别。单击游戏菜单可以选择“初级”、“中级”和“高级”。 (2) 选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击‘“开始”便启动计时器。 (3) 用户要揭开某个方块,可左键单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下无雷,则显示一个数字,该数字代表方块的周围的8个方块中共有多少颗雷。 (4) 如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),程序将显示的剩余雷数减少一个。 (5)当用户点中雷时,将有“你输了”的提示出现,胜利时,将有“你赢了”的提示出现。 1.2.2 需实现的主要功能 用户可以自定义级别并且可以任意输入雷数; 具有计时功能,即显示用户完成移动盘子所花费的时间。

能力拓展训练-----扫雷游戏

课程设计 题目扫雷游戏 学院计算机学院 专业软件工程 班级0803班 姓名徐泽前 指导教师 2010 年7 月15 日

扫雷游戏 1规则描述 游戏开始后,系统会在雷区的小方块中随机布下若干个地雷。部署完毕后,系统会在其他非雷方块中填充一些数字。某一个具体数字表示与其紧邻的8个方块中雷方块的数量,玩家可以根据这些信息去半段时候可以打开某些方块,并把认为是地雷的方块打上标记,当玩家吧所有地雷找出来后,其余非雷方块区域都已打开,这时游戏结束。在游戏过程中一旦错误的打开了雷方块则立即失败,游戏结束;当玩家标识的地雷数量超过程序设定,虽然打开了全部其余方块,游戏仍不会结束。 2软件环境 Windows XP Microsoft Visual C++ 3功能需求分析 游戏需要提供两个计数器,一个用来显示用户扫雷所花费的时间,以秒为单位;一个用来显示当前还剩多少个雷方块。另外提供一个按钮,用来开始游戏。在游戏区域方面,按功能将它分成两大区域:雷区和提示区。提示区除了上面提供的计数器外,还包括两个按钮,一个用来开始游戏,一个用来显示版本信息。游戏过程中,当玩家用鼠标点击相应的方块,程序就会做出相应的鼠标响应时间,程序处理这些鼠标时间的过程中会伴随着GDI绘图,而众多鼠标事件的处理,都是围绕着实现扫雷程序的算法而衍生的。

4程序实现 4.1界面设计 图1 界面设计图 4.2具体实现 4.21布雷 随机获取一个状态为非雷的点,将它的属性标识为雷,重复这样的工作,直到布下足够的累为止,流程图如下 在CMineWind类中添加游戏的布雷模块的处理函数,该函数的具体实现如下所示:

游戏开发课程设计报告模版-扫雷游戏报告(定稿)

中原工学院信息商务学院 课程设计报告 2016~2017学年第一学期 课程游戏开发课程设计 课程设计名称扫雷游戏 学生姓名*** 学号***** 专业班级数媒141 指导教师郑全录 2016年12月

目录 第一章设计内容及要求 (1) 1.1 扫雷游戏的基本要求 (1) 1.2 游戏需要实现的主要功能 (1) 第二章需求分析 (2) 2.1扫雷游戏界面设计 (2) 2.2 雷区的设计 (2) 2.3 音效的设计 (3) 2.4 扫雷英雄榜的设计 (3) 第三章总体设计 (5) 3.1 总体功能图 (5) 3.2 总体流程图 (5) 第四章主要功能设计流程 (6) 4.1 雷区设计流程图 (6) 4.2 音效设计流程图 (6) 4.3 英雄榜设计流程图 (7) 第五章主要功能设计流程 (8) 5.1 类之间关系图 (8) 5.2程序运行效果图 (8) 5.2.1 游戏登录界面 (8) 5.2.2游戏菜单界面 (9) 5.2.3游戏运行界面 (10) 5.2.4游戏英雄榜界面 (12) 第六章总结 (13) 参考文献 (14) 附录 (15)

第一章设计内容及要求 1.1扫雷游戏的基本要求 当前各种游戏层出不穷,因为游戏的开发成本非常大,所以游戏的开发具有一定的风险性,但是一些小游戏的开发成本具有成本小,编写简单的优势,所以这些小游戏在游戏开发中也占有一席之地。在这类小游戏中包括益智类游戏,它以画面精美、游戏方法简单等特点得到大家的认可。成为人们在工作之余不可或缺的好伙伴。针对这种情况我选择了扫雷游戏该课题作为我的课程题目。 Windows XP和Windows 7系统提供的扫雷游戏是一个很有趣的游戏。本次课程设计的主要任务是使用JA V A语言编写一个与其类似的扫雷游戏。具体要求如下: 1、扫雷游戏分为初级、中级和高级三个级别,同时扫雷英雄榜存储每个级别的最好成绩,即挖出全部的地雷且用时最少者。单击游戏菜单可以选择“初级”、“中级”和“高级”或“查看英雄版”。 2、选择级别后将出现相应级别的扫雷区域,这时用户使用鼠标左键单击雷区中任何一个方块便启动了计时器。 3、用户要揭开某个方块,可单击它。若所揭方块下有雷,用户便输了这一局,若所揭方块下没有雷,则显示一个数字,该数字代表此方块周围的8个方块中共有多少颗雷。 4、如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),窗口左上角的雷数计数器将会减少一个。 5、扫雷胜利后(用时最少者),程序弹出保存成绩的对话框。 6、用户如果遇到疑问的方块,可以勾选游戏菜单下的标记选项卡(或者用快捷键Alt+G然后点击M)即可标记该可疑方块,此时双击右键并可出现“?”标记。另有颜色选项,当用户选中该项时,游戏将以最低图像像素来显示。 7、如果用户需要使用提示声,可选中声音选项,此时将听到计时的咔嗒声。当用户点中雷时,将有爆炸声产生;胜利时,将有凯旋的旋律播放,此时企鹅出现欢悦表情。 1.2游戏需要实现的主要功能 1、用户可以自定义级别并且可以任意输入雷数; 2、具有计时功能,既显示用户完成所有扫雷任务所需要的时间; 3、自动保存扫雷英雄榜。

扫雷游戏技巧

1.边角的1对应的角肯定是雷,如下图。这也是扫雷中最常见的情形。 2. 2 2.边上的两个2并排对应的两个块肯定是雷,如下图。 3. 3 3.边角的3对应的3个块肯定是雷,如下图。 4. 4 4.孤立的3对应的3个块肯定是雷,如下图。

5. 5 5.孤立的4对应的4个块肯定是雷,如下图。 6. 6 6.孤立的5对应的5个肯定是雷,如下图。 7.7

7.两个1夹一个2的1,两个1下面对应的块肯定是雷,如下图。 8.孤立的2对应的两个块肯定是雷,如下图。 9.如下图,已知3的左边两个是雷,那么3的下边两个中肯定有一个是雷,所以第二个1下边的那个块肯定不是雷。 10.如下图,已知2的左边一个是雷,所以2的下边两个中肯定有一个是雷,所以1的右边3个块都不是雷。 11.如下图,上边那个1对应的两个角块中有一个是雷,所以下边那个1下边的3个块都不是雷。

12.如下图,两个并排的3对应的3个块都是雷。 13.如下图,两个并排的2,已知左边那个2的左边是雷,则右边那个2的右下角那个肯定也是雷。 14.如下图,已知右边两个竖着的1的左边两个块中有个个是雷,则左边那两个1下方的两个块都不是雷。 15.如下图,1和2孤立地排在一起,则2要从下方3个块中选两个,肯定不会是左边两个,所以2的右下角那个肯定是雷,而1和2下边两个块中有1个是雷,所以1左下角那个肯定不会是雷。

16.如下图,一个3和一个2并排在一起,已知3上边那个是雷,则3左下角那个块肯定是雷,而2右下角那个块肯定不是雷。 17.如下图,两个2并排在一起,且已知右边那个2正上方那个块是雷,则它的左边两个中肯定只有一个是雷,并且左边那个2的左边3个块都不是雷。 一夹二,一有雷; 二夹一,心有雷; 二夹三,全有雷; 二二边,都有雷; 三连一,中有雷; 四连一,边有雷。

扫雷的课程设计报告

西安文理学院信息工程学院课程设计报告 设计名称:数据结构课程设计 设计题目:实现一个N*M的扫雷游戏 学生学号:1402130407 专业班级:软件13级四班 学生姓名:樊秀琳 学生成绩: 指导教师(职称):谢巧玲(讲师) 课题工作时间:2015.6.22 至2015.7.3

说明: 1、报告中的任务书、进度表由指导教师在课程设计开始前填写并发给每个 学生。 2、学生成绩由指导教师根据学生的设计情况给出各项分值及总评成绩。 3、所有学生必须参加课程设计的答辩环节,凡不参加答辩者,其成绩一律 按不及格处理。答辩由指导教师实施。 4、报告正文字数一般应不少于3000字,也可由指导教师根据本门综合设 计的情况另行规定。 5、平时表现成绩低于6分的学生,取消答辩资格,其本项综合设计成绩按 不及格处理。

信息工程学院课程设计任务书 指导教师:院长: 日期:2015年6月22日

信息工程学院课程设计进度安排表 学生姓名:樊秀琳学号:1402130407 专业:软件工程班级:13级四班 指导教师签名: 2014年6月22日

成绩评定表 学生姓名:樊秀琳学号:1402130407 专业:软件工程班级:13级四班

摘要 摘要: 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法设计和语言实现,如C,C++,VB,JAVA等。我利用eclipse编写了与它功能相似的扫雷游戏,寓学于乐。 程序的功能是随机生成地雷数,通过鼠标操作玩游戏,不接受键盘,按任意键结束程序。单击屏幕上的笑脸可以重新开始游戏。所有地雷标出后胜利,当鼠标左键单击到地雷时提示游戏失败。其功能类似于Windows操作系统自带的扫雷游戏。论文首先介绍了进行该游戏课程设计的目的,然后是任务描述和设计的相关要求,最后是最重要的需求分析和设计方案。重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解用户的意图,进而做出相对应的动作。清除未靠近地雷区的方块较为复杂。 关键词:算法设计;事件;Eclipse

扫雷游戏报告

《扫雷游戏》程序设计报告 院系中兴电信学院 专业计算机科学与技术 班级7B1431 小组成员强建敏张伟田志杰赵立

一、开发环境 Intel?Pentium?2及以上的处理器,32M以上内存,20M以上硬盘空间。 Microsoft?WindowsTM22000或XP以上操作系统。 800×600或以上的屏幕分辨率 microsoft visual studio 2010 二、系统功能 游戏共由两个类组成 主界面对话框类:主要负责主界面、菜单及各个窗口类对象的创建和调用等处理。 扫雷窗口类:主要负责接收玩家鼠标输入的打开格子位置、格子变换、花费时间及地雷格子的显示等处理。 三、系统设计 1、扫雷格子模块功能设计 地雷格子的处理是扫雷游戏的核心内容,包括如下几个部分。 (1)地雷铺设模块。 游戏中的地雷个数可以根据玩家设定。地雷分布是调用随机数发生函数生成随机数。利用随机数去除最大行数或者最大列数,得到放置地雷行列坐标。然后分别防止地雷到不同的行和列的格子中去。 (2)自动打开周围不是地雷的格子。 在游戏中,当玩家单击的格子周围没有地雷格子时,就需要程序自动地把周围的格子自动打开来提高玩家的效率。 以上的实现,由如下代码实现。 public void LoadGame() {

int x = Convert.ToInt16(cbX.Text);//行坐标 int y = Convert.ToInt16(cbY.Text);//纵坐标 intmine_count = Convert.ToInt16(cbMinecount.Text);//地雷个数 mines = new List(); mines = CreateMines(x, y, mine_count);//生成随机地雷集合 intbtnx = plMines.Location.X + 5; intbtny = 5; for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { Button btn = CreateButton(btnx, btny); btn.Tag = j + "," + i; plMines.Controls.Add(btn); btnx += 40; } btnx = plMines.Location.X + 5; btny += 40; Application.DoEvents(); } } 2、玩家输入模块功能设计 在扫雷游戏中,用的最多的就是鼠标的输入。而鼠标输入又分为鼠标左键单击和右键单击两种处理类型。 1. 鼠标左键的处理

扫雷游戏程序设计课程设计报告

课 程 设 计 扫雷游戏程序设计 2013 年 11 月 5 日 设计题目 学 号专业班级 学生姓名 指导教师

合肥工业大学课程设计任务书

一. 设计任务 (1)鼠标左击排雷,右击插小旗,打问号; (2)方格里面的数字表示方格周围的雷数; (3)能够显示未标记雷数和游戏用时; (4)雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; (5)可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数),和自行定义雷区行数,列数和雷数的功能; (6)排行榜功能,扫雷成功时候,根据游戏用时更新排行榜。 二. 具体设计 (一)、设计思路 扫雷游戏是很经典也很有趣的一款游戏,这次的游戏程序设计要求设计出功能与原游戏相近的一款游戏,首先定义变量和类要画出游戏方格以及位图,设计游戏等级,等级越高方格越多雷数也越多;然后设置随机布雷以保证每次重新开始游戏都有不同的雷区地图;另外定义鼠标左击扫雷,左击标记周围埋雷情况,右击奇数次排雷偶数次取消上次排雷,以及扫雷第一次左击不能扫到雷。

(二)、设计表示: 1、鼠标左击排雷,右击插小旗,打问号; 2、方格里面的数字表示方格周围的雷数; 3、能够显示未标记雷数和游戏用时; 4、雷区上面的小脸可以变化,显示微笑,惊讶,痛苦,胜利。在任何情况下单击小脸可以重新开始游戏; 5、可进行游戏难度的设定:包括预定义的难度级别(雷区行数,列数和雷数); 6、任何时候开始游戏第一次点击不会扫到雷。 由于时间等原因未完成功能: 排行榜和自行定义雷区行数,列数和雷数功能。 (四)、详细设计 1、添加位图 前十二幅是在雷区的,后四幅是按钮。为了便于加载,必须各自保证其连续性。 分别表示游戏进行的状态、结果胜利或触雷。

扫雷

扫雷是一款逻辑推理小游戏,比较简单。很多人不会玩,可能是因为它的游戏规则描述不够清晰。 上面的截图,是电脑自带的游戏帮助内容。 我认为描述不清的是第三项: 挖开数字,则表示在其周围的八个方块中共有多少个雷,可以使用该信息推断能够安全单击附近的哪些方块。 问题的关键是“周围八个方块”是哪八个。下图所示为一个正进行中游戏的截图。 首先,左上角九个格子如图所示,。中间有个绿色数字2,它周围恰好是8个格子,它是2,说明周围8个格子里有2个雷,图示已标记。绿色数字2恰好在9个

格子的正中,所以剩下的8个格子就是它的周围。再举例,我们从左边第六列开始截图,得 到。这个截图中间蓝色数字1也恰好在9个格子的正中,说明周围8个格子里有1个雷。 其次,仍然在左上角截图。第一行中间的红数字3代表,它周围的8个格子里有3个雷。 继续举例,这次从左边第二行第二列截图。自己对照原图,可找到此截图 的精确位置。这个截图的部分,你用刚才的例子,可以很清晰地找到数字2周围的2个雷,数字1周围的1个雷。 也许现在你已明白“周围八个方块”的含义,然而还有特殊情况。也就是扫雷格子里,第一行和最后一行,第一列和最后一列,我们称为“边缘格子”。 “边缘格子”上的数字,代表的不是周围八个方块的含义。 比如说,左上角的这部分截图(自己对照原图,可找到此截图的精确位置)。截图中,数字2因为在第一行,属于“边缘格子”,所以它的周围是5个格子而不是8个。5个格子的具体位置就是图示的除数字2之外的5个。同理,2右边的数字1,周围的5个格 子应该是这样。2左边的数字3,周围的5个格子应该是这样

。再左边的数字3,周围的5个格子应该是这样。 第一列的数字也是“边缘格子”,比如左上角截图。图中第二行的数字1,周围的5个格子如图所示。 但是,还有一种特殊情况,那就是“四个角的边缘格子”,比如说这个图中的左上角的数字1,它的周围应该是3个格子,不是5个,也不是8个。3个格子是这个图中 除左上角外的3个。 说到这里,我们就把“其周围的八个方块”说清楚了,关键是对“周围”的理解。 另外还有一个小技巧,就是可以在扫雷操作中,可以把鼠标放在显示数字的格子上,然后左右键同时按下去,你会发现周围的格子闪动或打开,也可帮助你更好地理解“周围”的含义。 现在我们开始游戏,选择难度为初级,10个雷,9×9=81个格子。如图一。 第一步,任意单击一个格子,会露出一片空地。如果你运气够差,恰好点到雷,那就再开始新游戏。如图二。 图一

Java课程设计报告_扫雷小游戏

. . . . JAVA语言课程设计报告 题目:扫雷小游戏 设计者: 专业班级: 学号: 指导教师: 2011年 12月 12日 计算机学院

目录: 1.设计容及要求 (1) 1.1.扫雷小游戏的基本要求 (1) 1.2 需求实现的主要功能 (1) 2.需求分析 (1) 2.1 扫雷区域的布局设计 (1) 2.2 雷区的设计 (1) 2.3 音效的设计 (1) 3.总体设计 (2) 3.1总体功能图 (2) 3.2游戏设计流程图 (2) 4.主要功能设计 (3) 4.1 雷区设计流程图 (3) 4.2 音效设计流程图 (4) 4.3 排行榜设计流程图 (5) 5.代码实现 (6) 5.1 类之间的关系图 (6) 5.2 各界面图及代码: (6) 5.2.1 游戏菜单界面 (6) 5.2.2 游戏登录界面(初级、中级、高级) (8) 5.2.3自定义扫雷界面 (15)

6.扫雷总结 (18) 7.参考文献 (18) 1·设计容及要求 1.1·扫雷小游戏的基本要求 扫雷小游戏主要采用Java语言编写,适合windows XP 以下的系统,以eclipse 为平台。具体要求如下: <1> 扫雷小游戏分为初级、中级和高级三个级别,扫雷排行榜保存着每个级别的最好成绩,即挖出全部的地雷并且用时最少。单机游戏菜单选择“初级”、“中级”和“高级”。 <2> 游戏默认的是初级级别,用户可以选择不同级别将出现对应级别的扫雷区域,单击扫雷区域任一方格以便启动计时器。 <3> 用户选择某个方格,单击它就行。若所选择的放阁下有雷,这一局就结束了,若所选择方格下无雷,则会显示一个数字,该数字代表方格周围8个方格中共有几颗雷。 <4> 如果用户认为某个方格下有雷,单击右键可以在方格上标记一个用户认为是雷的图标(一个小旗子)。 <5> 用户可以选择标记为疑问的方格,可以选择游戏菜单下的标记,或者双击右键所选方格显示(?)图标。 <6> 扫雷完成后,程序弹出保存成绩的对话框,用户可以根据自身选择是否保存。 <7> 如果用户喜欢有提示音,可以选择游戏菜单中的声音选项,单击扫雷区域任一方格,就会听到吧嗒声。当点中地雷时,将会有爆炸声音响起,胜利后,将播放凯旋的旋律。 1.2 需求实现的主要功能 (1)该游戏具有计时功能,即扫完全部地雷所花费的时间。 (2)用户可以选择是否有音效。 (3)用户可以自定义级别,还可以输入任意地雷数。 (4)自动保存扫雷排行榜。 2·需求分析 2.1 扫雷区域的布局设计 系统的整体布局为:CardLayout 布局,采用菜单、按钮、面板……等组件,菜单项主要有开始,选择级别,自定义,标记,声音,扫雷排行榜,退出,按钮的功能是重新开始游戏(可以选择游戏菜单里的开局,也可以点击企鹅图标重新开始游戏)。 2.2 雷区的设计

软件体系结构课程之扫雷游戏

扫雷游戏 开发成员:代禄礼 学号:2406070428

开发时刻: 2010-7-5

目录 0、引言……............................................. ............................................... .....................2 1、工作打算........................................ ................................................................ (2) 1.1、要紧工作时期划分............................................... ................................... (2) 1.2、各时期工作任务分解....................................................................................2 2、需求分析.............................................. ...................................................................2

2.1、概述................................................................................................................2 2.2、用户分析............................................ ...................................................... (3) 2.3、约束条件........................................................................................ ................3 2.4、功能需求.............................................. .................................................... (3) 2.5、用户界面需求................................................................................................4

VB扫雷小游戏编程代码

VB扫雷小游戏 一.编程目的 二.编程思路 1.新建command_up和label_down控件 2.用load加载控件 3.根据雷区的X、Y、以及难度进行随机布雷。 4.统计每一个label周围雷的数量并作为label的caption。 5.在单击command的时候显示label 6.在右击command的时候进行标记 7.在label上左右键同时按下的时候检查已标记雷的数量与label显示的数量是否一致。三.界面设计 四.代码设计 Dim Start_Time, End_Time Dim Area_X%, Area_Y%, Area%, Area_List() Dim Current_Mine% Dim Difficulty# Dim Continue_Flag%, Success_Flag%, LeftAndRight_Flag% Dim Near_List Dim Mine_Count Private Sub Command_End_Click() End End Sub Private Sub Delete_Item(List(), Index As Integer) Dim i%

For i = LBound(List) + Index - 1 To UBound(List) - 1 List(i) = List(i + 1) Next i '防止100%的困难度 If UBound(List) > LBound(List) Then ReDim Preserve List(LBound(List) To UBound(List) - 1) End Sub Private Sub Command_retry_Click() '卸载 For i = 1 To Area Unload Label_Down(i) Unload Command_Up(i) Next i Command_Start.Caption = "开始游戏" Call Command_Start_Click End Sub Private Sub Command_Up_Click(Index As Integer) Success_Flag = 1 If Continue_Flag = 1 Then If Timer1.Enabled = False Then Call Command_Start_Click If Label_Down(Index).Caption = "X" Then Success_Flag = 0 Continue_Flag = 0 For i = 1 To Area If Command_Up(i).Visible = True And Command_Up(i).Caption = "X" And Label_Down(i).BackColor = vbRed Then '标记雷正确 Command_Up(i).Picture = LoadPicture(App.Path + "\pictures\mine_correct.gif", , , Command_Up(i).Width, Command_Up(i).Height) Command_Up(i).Visible = True Label_Down(i).Visible = True ElseIf Command_Up(i).Visible = True And Command_Up(i).Caption = "X" And Label_Down(i).BackColor = vbGreen Then '标记雷错误 Command_Up(i).Picture = LoadPicture(App.Path + "\pictures\mine_wrong.gif", , , Command_Up(i).Width, Command_Up(i).Height) Command_Up(i).Visible = True Label_Down(i).Visible = True Else Command_Up(i).Visible = False Label_Down(i).Visible = True End If Next i

扫雷游戏

南昌大学实验报告 学生姓名:邹晓敏学号:6103313025 专业班级:数媒131 实验类型:□验证□综合□设计□创新实验日期:实验成绩: 一、实验项目名称 扫雷游戏编程 二、实验目的 1、掌握Windows SDK编程; 2、掌握Windows API的使用; 3、深入体会完整项目的开发过程。 三、实验基本原理 SDK:(软件开发工具包)是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。它可以简单的为某个程序设计语言提供应用程序接口API的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。API(应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API 而使操作系统去执行应用程序的命令动作。API和SDK 是开发Windows应用程序所必需的东西,MFC编程框架和类库都是建立在它们之上的, GDI:是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。 DC:MFC图形设备接口的设备描述表,它是MFC的主要对象之一。通过CDC类进行各种绘图操作, 四、实验步骤 1. 游戏分析 经过对游戏的初步分析,扫雷游戏含有如下规则:根据输入的信息,执行相应的挖雷,插旗,疑问标记,自动蔓延开挖等。如果选择了标记功能,那么单机右键会依次对未知点进行插旗,标记,取消插旗与标记。如果点滴到插旗的如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利,如果所有的雷都被插旗或者点击后剩余。而后为了丰富游戏添加了笑脸和计时器功能。

相关主题
文本预览
相关文档 最新文档