扫雷游戏设计Word文件下载.docx

上传人:b****4 文档编号:18486871 上传时间:2022-12-17 格式:DOCX 页数:15 大小:99.27KB
下载 相关 举报
扫雷游戏设计Word文件下载.docx_第1页
第1页 / 共15页
扫雷游戏设计Word文件下载.docx_第2页
第2页 / 共15页
扫雷游戏设计Word文件下载.docx_第3页
第3页 / 共15页
扫雷游戏设计Word文件下载.docx_第4页
第4页 / 共15页
扫雷游戏设计Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

扫雷游戏设计Word文件下载.docx

《扫雷游戏设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《扫雷游戏设计Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

扫雷游戏设计Word文件下载.docx

并输出。

②游戏类:

主要功能还是在该类中完成。

首先先定义其参数。

然后再初始化游戏池。

显示游戏窗口。

判断游戏是否继续进行。

显示数字。

定义键盘的作用。

等等。

四、运行结果

五、课程设计总结

设计完贪食蛇之后再设计扫雷游戏,设计难度减少不少。

但是还是面临了许多问题。

关于雷的随机出现和周围数字的产生。

还有就是循环体的设计同样困扰了自己。

通过向老师和同学请教,终于将问题一个个解决。

在此次课程设计中进一步巩固了用C++语言编写程序。

也同样体会到了在编程过程中要细致耐心。

同时锻炼了自己独立思考的能力。

自己设计的扫雷游戏仍然有许多的不足之处。

例如没有划分其难度等级等等。

应该向其他同学多加学习。

早日掌握好这门语言。

六、参考文献

①《C++程序设计》(第二版)谭浩强编著清华大学出版社

.②《VisualC++程序设计学习笔记》刘春辉编著北京电子工业出版社

七、附录

//头文件

#include<

iostream>

cstdlib>

ctime>

windows.h>

conio.h>

//定义

#defineKEY_UP0xE048//宏定义UP为16进制的0xE048

#defineKEY_DOWN0xE050

#defineKEY_LEFT0xE04B

#defineKEY_RIGHT0xE04D

#defineKEY_ESC0x001B

#defineKEY_1'

1'

#defineKEY_2'

2'

#defineGAME_MAX_WIDTH100

#defineGAME_MAX_HEIGHT100

//字符串资源

#defineSTR_GAMETITLE"

键1:

打开;

键2:

标记"

#defineSTR_GAMEWIN"

恭喜你,胜利了!

"

#defineSTR_GAMEOVER"

(⊙o⊙),很遗憾!

\n"

#defineSTR_GAMEEND"

按ESC键将退出游戏\n"

//基类

classCConsoleWnd

{

public:

staticintTextOut(constchar*);

staticintGotoXY(int,int);

staticintCharOut(int,int,constint);

staticintTextOut(int,int,constchar*);

staticintGetKey();

};

intCConsoleWnd:

:

GetKey()//等待标准输入和返回键码

{

intnkey=getch(),nk=0;

if(nkey>

=128||nkey==0)nk=getch();

//从控制台读取一个字符,但不显示在屏幕上。

returnnk>

0?

nkey*256+nk:

nkey;

}

GotoXY(intx,inty)//移动光标到(x,y)

COORDcd;

//表示一个字符在控制台屏幕上的坐标

cd.X=x;

cd.Y=y;

returnSetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd);

//API中定位光标位置的函数

TextOut(constchar*pstr)//在当前位置输出字符串

for(;

*pstr;

++pstr)putchar(*pstr);

//该函数将制定的表达式的值所对应的字符输出到标准输出终端上。

return0;

CharOut(intx,inty,constintpstr)//在(x,y)处输出一个字符

GotoXY(x,y);

returnputchar(pstr);

//输出一个字符串(x,y)

TextOut(intx,inty,constchar*pstr)

returnTextOut(pstr);

//应用类

classCSLGame:

publicCConsoleWnd

private:

intcurX,curY;

intpoolWidth,poolHeight;

intbm_gamepool[GAME_MAX_HEIGHT+2][GAME_MAX_WIDTH+2];

CSLGame():

curX(0),curY(0){poolWidth=poolHeight=0;

}

intInitPool(int,int,int);

intMoveCursor(){returnCConsoleWnd:

GotoXY(curX,curY);

intDrawPool(int);

intWaitMessage();

intGetShowNum(int,int);

intTryOpen(int,int);

intDFSShowNum(int,int);

conststaticintGMARK_BOOM;

conststaticintGMARK_EMPTY;

conststaticintGMARK_MARK;

//定义静态参数(私有,不可被其他函数调用)

constintCSLGame:

GMARK_BOOM=0x10;

GMARK_EMPTY=0x100;

GMARK_MARK=0x200;

//初始化游戏池.

//如果长*宽<

雷数或者雷数<

=0或者长宽超过限定值,游戏无法运行。

intCSLGame:

InitPool(intWidth,intHeight,intnBoom)

poolWidth=Width;

poolHeight=Height;

if(nBoom<

=0||nBoom>

=Width*Height||Width<

=0||Width>

GAME_MAX_WIDTH||Height<

=0||Height>

GAME_MAX_HEIGHT)

{

return1;

for(inty=0;

y<

=Height+1;

++y)

for(intx=0;

x<

=Width+1;

++x)

bm_gamepool[y][x]=0;

srand(time(NULL));

//随机数发生器的初始化函数,初始化雷的数据

while(nBoom)

intx=rand()%Width+1,y=rand()%Height+1;

if(bm_gamepool[y][x]==0)

bm_gamepool[y][x]=GMARK_BOOM;

--nBoom;

//初始化的光标位置

curX=curY=1;

MoveCursor();

//显示游戏窗口

DrawPool(intbDrawBoom=0)

for(inty=1;

y<

=poolHeight;

++y)

CConsoleWnd:

GotoXY(1,y);

for(intx=1;

x<

=poolWidth;

++x)

putchar('

.'

);

elseif(bm_gamepool[y][x]==GMARK_EMPTY)

'

elseif(bm_gamepool[y][x]>

0&

&

bm_gamepool[y][x]<

=8)

0'

+bm_gamepool[y][x]);

elseif(bDrawBoom==0&

(bm_gamepool[y][x]&

GMARK_MARK))

#'

elseif(bm_gamepool[y][x]&

GMARK_BOOM)

if(bDrawBoom)

*'

else

GetShowNum(intx,inty)

intnCount=0;

for(intY=-1;

Y<

=1;

++Y)

for(intX=-1;

X<

++X)

if(bm_gamepool[y+Y][x+X]&

GMARK_BOOM)++nCount;

returnnCount;

//如果不是雷,显示数字;

如果是雷,游戏结束。

TryOpen(intx,inty)

intnRT=0;

if(bm_gamepool[y][x]&

nRT=EOF;

intnCount=GetShowNum(x,y);

if(nCount==0)

DFSShowNum(x,y);

elsebm_gamepool[y][x]=nCount;

returnnRT;

DFSShowNum(intx,inty)

if((0<

x&

=poolWidth)&

(0<

y&

=poolHeight)&

(bm_gamepool[y][x]==0))

intnCount=GetShowNum(x,y);

bm_gamepool[y][x]=GMARK_EMPTY;

DFSShowNum(x+X,y+Y);

//返回值是1,胜利;

返回值为0,不结束;

否则,失败。

WaitMessage()

intnKey=CConsoleWnd:

GetKey();

intnRT=0,nArrow=0;

switch(nKey)

caseKEY_UP:

if(curY>

1)--curY;

nArrow=1;

}break;

//定义键盘上上下左右键的作用和12(打开,标记。

caseKEY_DOWN:

if(curY<

poolHeight)++curY;

caseKEY_LEFT:

if(curX>

1)--curX;

caseKEY_RIGHT:

if(curX<

poolWidth)++curX;

caseKEY_1:

nRT=TryOpen(curX,curY);

caseKEY_2:

if((bm_gamepool[curY][curX]

&

~(GMARK_MARK|GMARK_BOOM))==0)

bm_gamepool[curY][curX]^=GMARK_MARK;

caseKEY_ESC:

//返回索引

if(nKey==KEY_1)

inty=1;

intx=1;

if(bm_gamepool[y][x]==0)break;

if(x<

=poolWidth)break;

if(!

(y<

=poolHeight))

nRT=1;

if(nArrow==0)

DrawPool();

//主函数

intmain(void)

intx=15,y=15,b=15,n;

//定义长宽及雷数

CSLGameslGame;

GotoXY(0,0);

TextOut(STR_GAMETITLE);

slGame.InitPool(x,y,b);

slGame.DrawPool();

slGame.MoveCursor();

while((n=slGame.WaitMessage())==0)//循环

;

//游戏结束

slGame.DrawPool

(1);

TextOut("

if(n==1)

TextOut(STR_GAMEWIN);

TextOut(STR_GAMEOVER);

TextOut(STR_GAMEEND);

while(CConsoleWnd:

GetKey()!

=KEY_ESC)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1