介绍
这篇文章主要介绍如何使用c++实现扫雷经典小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
主要是dfs实现打开一片的操作,数字带有颜色,很真实。
窗户扫雷中鼠标左右键同时按也实现了,即试探。
先上图,详见下面代码:
代码中有详细注释,编译无任何错误警告。
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++实现扫雷经典小游戏