扫雷游戏设计Word文件下载.docx
- 文档编号:18486871
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:15
- 大小:99.27KB
扫雷游戏设计Word文件下载.docx
《扫雷游戏设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《扫雷游戏设计Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
并输出。
②游戏类:
主要功能还是在该类中完成。
首先先定义其参数。
然后再初始化游戏池。
显示游戏窗口。
判断游戏是否继续进行。
显示数字。
定义键盘的作用。
等等。
四、运行结果
五、课程设计总结
设计完贪食蛇之后再设计扫雷游戏,设计难度减少不少。
但是还是面临了许多问题。
关于雷的随机出现和周围数字的产生。
还有就是循环体的设计同样困扰了自己。
通过向老师和同学请教,终于将问题一个个解决。
在此次课程设计中进一步巩固了用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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扫雷 游戏 设计