如何使用c++实现扫雷经典小游戏

  介绍

这篇文章主要介绍如何使用c++实现扫雷经典小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

主要是dfs实现打开一片的操作,数字带有颜色,很真实。
窗户扫雷中鼠标左右键同时按也实现了,即试探。

先上图,详见下面代码:

如何使用c++实现扫雷经典小游戏

代码中有详细注释,编译无任何错误警告。
p。有错误请评论指出,谢谢啦~
另外我觉得代码比较臃肿,有什么可以优化的也请提出~

# include   # include   # include   # include   # include   # include   # include   using  namespace 性传播疾病;      # define  MAXN  35   # define  MIDX  10   # define  MIDY  40岁   # define  CG  25   # define  CK  80年      int  G、K, Lnum Wnum;//G为地图高,K为地图,Lnum为地图中的雷数,Wnum为剩余的小旗数   纽约int  nx;//现在光标所在的位置   bool  QR=0,失去=0,is_flag_true [MAXN] [MAXN];//QR为确认模式是否打开,失去为是否输,第三个是这个位置上的旗是否放对   char 地图[MAXN] [MAXN], tmap [MAXN] [MAXN];//第一个是只有雷和空地的地图,第二个是玩家能看到的地图   int  map1 [MAXN] [MAXN], mapc [MAXN] [MAXN];//map1为数字的地图,其中0代表空地,1为雷,1 - 8为周围雷的个数//mapc为当前格子的颜色   int 坳[10]={240249242252241244243240248};//坳(我)表示窗户扫雷中我的颜色,坳[0]为空格的颜色   int  d[10][4]={{0},{0,1},{1, 0},{0,1},{1, 0},{1},{1},{1},{1 1}};//8个方向   bool  ZB;//作弊是否打开/*各种函数*/void 颜色(int);//颜色   void  gto (int, int);//光标位置   void 使();//制作随机地图   void  print();//打印地图等   bool 检查(int, int);//判断坐标是否合法   bool  is_win();//判断是否赢   bool  is_lose();//是否输   void  dfs (int, int);//用深搜来打开方块   void 圣(int, int);//试探,即windows扫雷中的左右键同时按   void 旗帜(int, int);//小旗   void  bj (int, int);//标记   void  swt();//确认模式   再次void ();//重新开始   void  zb();//作弊模式   void  mainmain();//主函数   void  print_real_map();//打印最终的地图   void 开始();//各种操作      int  main ()   {   ,mainmain ();   }         void 颜色(int ) {SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE), a);}   int  void  gto (int  x, y)   {   ,COORD  pos pos.X=y; pos.Y=x;   ,SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), pos);   }      void 使()   {   ,(int  i=1; i<=G;我+ +)   ,(int  j=1; j<=K; j + +)   地图才能[我][j]=& # 39; # & # 39;;//初始化   ,(int  i=1; i<=Lnum;我+ +)   ,{   ,int  x=rand () % G + 1, y=rand () % K + 1;   ,而(map [x] [y]==& # 39; o # 39;)   x=才能rand () % G + 1, y=rand () % K + 1;   ,地图[x] [y]=& # 39; o # 39;;   ,}//随机放雷   ,(int  i=1; i<=G;我+ +)   ,(int  j=1; j<=K; j + +)   ,{   如果才能(map[我][j]==& # 39; o # 39;) map1[我][j]=1, mapc[我][j]=240;//如果是雷   其他的才能   {才能   ,,(int  k=1; k<=8; k + +)   ,,如果(map[我+ d [k] [0]] [j + d [k] [1]]==& # 39; o # 39;)   ,,map1[我][j] + +,//计算周围雷的个数   mapc才能[我][j]=坳(map1[我][j]];//根据格子上的数设置颜色   ,,}   ,}   ,(int  i=1; i<=G;我+ +)   ,(int  j=1; j<=K; j + +)   如果才能(mapc[我][j]==0)//空地   mapc才能[我][j]=240;   }   void  print ()   {   ,系统(“cls");   ,gto (0, MIDY-4);,颜色(233);,printf(“扫雷“);   ,颜色(240);   ,gto (1、MIDY);   ,(int  i=2; i<=G + 1,我+ +)   ,{   ,gto (0);   ,(int  j=1; j<=K; j + +)   ,,printf (“#”), tmap(张)[j]=& # 39; # & # 39;;//初始化玩家所看到的地图   ,}      ,gto (2,0);   纽约,nx=2=0;   ,颜色(15);   ,printf (“@");      ,颜色(15);   ,gto (2、2 * K + 5); printf(“- - - - - -规则——产生绯闻;);   ,gto (3、2 * K + 5); printf (“wasd:选择位置“);   ,gto (4,2 * K + 5); printf(“空格:打开“);   ,gto (5, 2 * K + 5); printf(“1键:试探周围8个方块,如果其中有雷则不会打开,无“);   ,gto (6 2 * K + 5); printf(“,雷或旗帜标对了则会将周围无雷的位置打开,“);   ,gto (7、2 * K + 5); printf(“,如果试探时周围有标错的旗帜,则会游戏失败“);   ,gto (8、2 * K + 5); printf(“,必须额外确认一次,以便查看周围被试探的区域“);   ,gto (9、2 * K + 5); printf(“2键:放置/取消小旗(F)“);   ,gto (10、2 * K + 5); printf(“3键:放置/取消标记(?)“);   ,gto (11、2 * K + 5); printf(“4键:打开/关闭确认模式,即每次操作需再按一次确认“);   ,gto (12、2 * K + 5); printf(“5键:打开/关闭作弊模式,即显示原本地图“);   ,gto (13、2 * K + 5); printf(“0键:重新开始“);//打印规则      ,gto (G + 4,0); printf(“- - - - - -操作提示——\ n");   ,printf(“请选择方块进行操作“);      ,gto (1、2 * K + 10),颜色(12);printf(“剩余小旗数:% d", Wnum=Lnum);   }      int  bool 检查(int  x, y) {return  y>=0,, y

如何使用c++实现扫雷经典小游戏