扫雷群规则资讯

(微信扫雷群)【源码项目】C语言—C++开发,打造一个小项目扫雷小游戏!红包扫雷群挂免费

发布人:20元微信抢红包群号 来源:微信抢红包群,支付宝红包群,红包群,红包扫雷群发布时间:2022-08-17 02:10:25 热度:

微信红包扫雷群规则

一直说写个几百行的小项目,于是我写了一个控制台的扫雷,没有想到精简完了代码才200行左右,不过考虑到这是我精简过后的,浓缩才是精华嘛,我就发出来大家一起学习啦,看到程序跑起来能玩,感觉还是蛮有成就感的~哈哈

扫雷应该属于一款大众游戏,从我初中使用计算机开始,它就被集成到了windows系统中,虽然他是这么经典,我还是要介绍一下他的玩法,然后再考虑在控制台中怎么实现它。

1、游戏的主界面,是一个一个小方格,在小方格上单击左键,可以翻开小方格看看后面有什么。

2、在这些小方格的背后隐藏着雷,如果不幸点中了雷,那么就GameOver了。

如果点中的不是一个雷,那么就是一块空地,这个时候会出现两种情况:

1)用鼠标点中的空地周围八个点内有雷,那么就显示雷的个数

2)用鼠标点中的空地周围没有雷,这个时候就将周围的空地全部显示出来,遇到该显示数字的空地,就将数字显示出来。(仔细观察你会发现,数字会将空地围起来,这是一句废话,但是也值得想一想这是为什么)

3、在小方格上,点击鼠标的右键,可以将一个空地标记为雷,微信红包扫雷群犯法吗当然这个功能只是为了方便你记忆你之前确定是雷的地方。(还有左右键都点,和点击右键出现?标记,这里就不谈啦)

4、当空地上剩余的格子数和雷的个数一样多,那么这个时候就应该算是胜利啦。

OK~游戏流程说完了,这个时候该谈谈如何实现了。

1、首先需要一张地图,一般情况下我们都可以用一个二维数组表示一个地图,每一个元素代表着扫雷中的一个小方格。相应元素存储0,那么地图上的这个位置就是空地,相应元素存储1,那么就代表这个位置就一颗雷。

2、在控制台上依照二维数组长度和宽度,打印相应的小方块。

3、然后就用鼠标点击那些小方块,对于控制台来讲,在黑框框的区域中是有坐标的,可以使用一些函数捕获到你点击了屏幕的哪一个坐标。

4、对于控制台来说,打印一个字符,有的字符横向占一个位置比如普通的字母数字,有的字符横向占两个位置比如一些图形字符: ①②③■◆等等,这点在控制台编程的时候要注意。

微信红包群免费扫雷

5、当点击屏幕的时候,获取到点击的坐标后,去二维数组中查看相应的位置是雷还是空地,从而做相应的处理。

1)假如点击到了雷,那么就控制游戏结束

2)假如点击到了空地有两种情况

1.点击的空地周围有雷,那么就将雷的个数显示出来

2.假如点击的空地周围没有雷,那么就使用递归的方法去探测周围的点,探测出与其相连的所有周围有雷的点。微信红包扫雷群犯法吗

这个是我实现的效果,下面就是代码啦:

// saolei.cpp : 定义控制台应用程序的入口点。//include"stdafx.h"includeincludeincludedefine Boom 10inta[10][10]={0};COORDTempPos[100]={0};intnSign=0;/************************************函数名 : WriteWchar函数作用: 在控制台相应的坐标上显示一串字符返回值 : void参数 : int x 横坐标参数 : int y 纵坐标参数 : char szString[] 要显示的字符串说明 :************************************/voidWriteWchar(intx,inty,charszString[]){HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);COORDpos={x*2,y};SetConsoleCursorPosition(hOut,pos);printf("%s",szString);}/************************************函数名 : DrawNumber函数作用: 在相应的坐标上,根据传入的数字,打印相应的数字字符返回值 : void参数 : COORD pos 要打印的位置参数 : int nNumber 要打印的数字说明 :************************************/voidDrawNumber(COORDpos,intnNumber){switch(nNumber){case1:WriteWchar(pos.X,pos.Y,"①");break;case2:WriteWchar(pos.X,pos.Y,"②");break;case3:WriteWchar(pos.X,pos.Y,"③");break;case4:WriteWchar(pos.X,pos.Y,"④");break;case5:WriteWchar(pos.X,pos.Y,"⑤");break;case6:WriteWchar(pos.X,pos.Y,"⑥");break;case7:WriteWchar(pos.X,pos.Y,"⑦");break;case8:WriteWchar(pos.X,pos.Y,"⑧");break;default:break;}}/************************************函数名 : GetNumber函数作用: 获取一个点的四周有几颗雷返回值 : int参数 : COORD pos 要探测的点的坐标说明 :************************************/intGetNumber(COORDpos){intnCount=0;for(inti=pos.X-1;i<=pos.X+1;i++)for(intj=pos.Y-1;j<=pos.Y+1;j++){if(a[j][i]==Boom){nCount++;}}returnnCount;}/************************************函数名 : Drawmap函数作用: 打印一下地图返回值 : void说明 :************************************/voidDrawmap(){for(inti=0;i<10;i++){for(intj=0;j<10;j++){WriteWchar(j,i,"■");}}}/************************************函数名 : Init函数作用: 随机生成10个地雷,然后存到数组中返回值 : void说明 :************************************/voidInit(){srand(time(NULL));for(inti=0;i<10;i++){intTemp_x=rand()%10;intTemp_y=rand()%10;//判断这个地方是不是已经生成一个雷了,如果没有,赋值为雷if(a[Temp_x][Temp_y]!=Boom){a[Temp_x][Temp_y]=Boom;}//如果是雷,就相当于本次生成没有发生过。。。。。else{i--;}}Drawmap();}/************************************函数名 : IsClose函数作用: 判断是不是已经探测过的点,由于使用的8方向递归的探测,这样避免重复返回值 : bool参数 : COORD posTemp说明 :************************************/boolIsClose(COORDposTemp){for(inti=0;i{if(TempPos[i].X==posTemp.X&&TempPos[i].Y==posTemp.Y)returntrue;}returnfalse;}/************************************函数名 : IsKongdi函数作用: 判断一个点是空地,还是雷,如果是空地,需要做其他处理返回值 : void参数 : COORD pos说明 :************************************/boolIsKongdi(COORDpos){intnNumber=0;//1 如果是雷,就直接返回一个false说明要挂了if(a[pos.Y][pos.X]==Boom){returnfalse;}//2 如果不是雷,那么就做后续处理else{//2.1先判断一下周围有几颗雷nNumber=GetNumber(pos);if(nNumber!=0){//有几颗雷,就打印这个数字DrawNumber(pos,nNumber);returntrue;}else{//如果没有雷,那就先画空地出来,然后向周围扩散去探测其他点WriteWchar(pos.X,pos.Y," ");}}//2.2点到了空地,但是周围没有雷的情况的处理,继续去探测周围8个点for(inti=-1;i<=1;i++)for(intj=-1;j<=1;j++){COORDposTemp={pos.X+i,pos.Y+j};//是不是越界了if(i==0&&j==0||posTemp.X==-1||posTemp.Y==-1||posTemp.X==10||posTemp.Y==10)continue;//这个点是不是已经探测过了if(IsClose(posTemp))continue;//这个点没有探测过,就将其加入到数组中,然后使其在以后的探测中,存入TempPos[nSign++]=posTemp;IsKongdi(posTemp);}returntrue;}/************************************函数名 : GetMousePosition函数作用: 获取鼠标点击的位置,假如没有获取到,就返回(-1,-1)返回值 : COORD 鼠标点击的坐标说明 :************************************/COORDGetMousePosition(){HANDLEhIn=GetStdHandle(STD_INPUT_HANDLE);INPUT_RECORDstcInput={0};DWORDbuffer;COORDpos={-1,-1};ReadConsoleInput(hIn,&stcInput,1,&buffer);if(stcInput.EventType==MOUSE_EVENT){MOUSE_EVENT_RECORDstcMouseEnent=stcInput.Event.MouseEvent;if(stcMouseEnent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED){pos=stcMouseEnent.dwMousePosition;pos.X/=2;}}returnpos;}int_tmain(intargc,_TCHAR*argv[]){Init();COORDpos;//开始游戏while(1){//获取鼠标点击位置pos=GetMousePosition();if(pos.X!=-1){//如果鼠标点击的位置被探测过了,就开始下一次循环if(IsClose(pos)){continue;}TempPos[nSign++]=pos;boolbIskongdi=IsKongdi(pos);//点到雷了,就直接退出游戏了。if(false==bIskongdi){system("cls");WriteWchar(20,10,"you lose");getchar();break;}//检测是不是赢了,赢的条件就是没有被探测的点的个数和雷的个数相等if(nSign==90){system("cls");WriteWchar(20,10,"you win");}}}return0;}

项目不是很长,但是注释我写的还算明白,估计大家都可以看得懂,希望对于新手们有一定的帮助,谢谢大家的支持!!!

看到这里你是不是又学到了很多新知识呢~

如果你很想学编程,小编推荐我的C语言/C++编程学习基地【点击进入】!

都是学编程小伙伴们,带你入个门还是简简单单啦,一起学习,一起加油~

还有许多学习资料和视频,相信你会喜欢的!

涉及:游戏开发、常用软件开发、编程基础知识、课程设计、黑客等等......

20元微信抢红包群号

微信扫雷红包群怎么玩

... 
上一篇 : (微信扫雷群)C语言扫雷小游戏源代码(精)红包二维码
下一篇 : (支付宝扫雷群)我偷偷潜入了租房色情聊天群,这波操作颠覆了我
猜你喜欢的微信抢红包群,支付宝红包群,红包群,红包扫雷群