“扫雷”C语言实现(感染效果)
game.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
enum Option
{//棋盘大小rows = 9,cols = 9,Rows = rows + 2,Cols = cols + 2,//难度,相当于布置几个雷Difficulty = 10
};void menu();
void InitBoard(char Board[Rows][Cols],int Row,int Col, char a);
void SetMine(char Board[Rows][Cols],int Row,int Col);
void Display(char Board[Rows][Cols], int Row, int Col);
void Playgame(char Board[Rows][Cols], char ShowBoard[Rows][Cols]);
int Countmine(char Board[Rows][Cols], char ShowBoard[Rows][Cols], int Row, int Col);
void Openmine(char Board[Rows][Cols], char ShowBoard[Rows][Cols], int Row, int Col);

test.c

#include"game.h"void game()
{//创建游戏棋盘char MineBoard[Rows][Cols] = { 0 };//这个是给玩家看的棋盘//给玩家看的棋盘肯定与原棋盘不一样//什么能看、什么不能看char ShowBoard[Rows][Cols] = { 0 };//初始化棋盘InitBoard(MineBoard, Rows, Cols,'0');InitBoard(ShowBoard, Rows, Cols, '*');///展示棋盘//Display(MineBoard, Rows, Cols);//这个不能展示给玩家哦Display(ShowBoard, Rows, Cols);printf("\n");//随机放置炸弹SetMine(MineBoard, Rows, Cols);//printf("\n");//Display(MineBoard, Rows, Cols);//查看是否设置成功  //准备工作完成,玩家正式开始游戏Playgame(MineBoard, ShowBoard);
}void test()
{menu();int input;printf("请输入:>");scanf_s("%d", &input);switch (input-1){case 0:game();break;case 1:printf("正在退出游戏");break;default:printf("输入错误,请输入1或2");break;}
}int main(){srand((unsigned)time(NULL));test();return 0;}

game.c

#include"game.h"void menu()
{printf("*************************\n");printf("*******1.play************\n");printf("*******2.exit************\n");printf("*************************\n");
}
void InitBoard(char Board[Rows][Cols], int Row, int Col,char a) //
{int i , j ;for (i = 0;i < Row; i++){for (j = 0;j < Col; j++){Board[i][j] = a;}}
}
void SetMine(char Board[Rows][Cols], int Row, int Col)//
{int flag = 0;while (flag< Difficulty){ int x = rand() % 9+1;int y = rand() % 9+1;if (Board[x][y] == '0'){Board[x][y] = '1';flag++;}}
}void Display(char Board[Rows][Cols], int Row, int Col)
{int i = 0, j = 0;for (i = 0; i < Rows-1; i++){printf("\n");for (j = 0; j < Cols-1; j++){if (i == 0 && j != 0){printf("%d", j);}else if (j == 0 && i != 0){printf("%d", i);}else if (j == 0 && i == 0){printf("0");}else if (0<j< Rows-1 && 0 < i < Cols - 1)printf("%c", Board[i][j]);}}printf("\n");
}
void Openmine(char Board[Rows][Cols], char ShowBoard[Rows][Cols], int Row, int Col)
{int c = 0;c =Countmine(Board, ShowBoard, Row, Col);if (c == 0){ShowBoard[Row][Col] = '0';if (Row - 1 > 0 && ShowBoard[Row-1][Col] == '*'){Openmine(Board, ShowBoard, Row - 1, Col);}if (Row + 1 < Rows - 1 && ShowBoard[Row+1][Col] == '*'){Openmine(Board, ShowBoard, Row + 1, Col);}if (Col - 1 > 0 && ShowBoard[Row][Col-1] == '*'){Openmine(Board, ShowBoard, Row, Col - 1);}if (Col + 1 < Cols - 1 && ShowBoard[Row][Col+1] == '*'){Openmine(Board, ShowBoard, Row, Col + 1);}if (Row - 1 > 0 && Col - 1 > 0 && ShowBoard[Row-1][Col-1] == '*'){Openmine(Board, ShowBoard, Row - 1, Col - 1);}if (Row - 1 > 0 && Col + 1 < Cols - 1 && ShowBoard[Row-1][Col+1] == '*'){Openmine(Board, ShowBoard, Row - 1, Col+ 1);}if (Col - 1 > 0 && Row + 1 > 0 && ShowBoard[Row+1][Col-1] == '*'){Openmine(Board, ShowBoard, Row + 1, Col - 1);}if (Col + 1 <Cols-1 && Row + 1 < Rows-1 && ShowBoard[Row+1][Col+1] == '*'){Openmine(Board, ShowBoard, Row+1, Col + 1);}}else//{ShowBoard[Row][Col] = c + '0';}
}int Countmine(char Board[Rows][Cols], char ShowBoard[Rows][Cols], int Row, int Col )//
{ int c = Board[Row - 1][Col - 1] + Board[Row - 1][Col + 1]+ Board[Row - 1][Col]+ Board[Row][Col - 1]+ Board[Row][Col + 1]+ Board[Row + 1][Col - 1]+ Board[Row + 1][Col]+ Board[Row + 1][Col + 1] - 8 * '0';return c;
}void Playgame(char Board[Rows][Cols], char ShowBoard[Rows][Cols])
{int x = 0, y = 0;while (1){printf("开始游戏!请输入您选择的坐标位置:>\n");scanf_s("%d%d", &x, &y);if (x > 0 && x <= 9 && y <= 9 && y > 0){if (Board[x][y] == '0'){Openmine(Board, ShowBoard, x, y);//利用递归实现炸开效果Display(ShowBoard, Rows, Cols);//检查有没有胜利int flag = 0;for (int i = 1; i < Rows - 1; i++){for (int j = 1; j < Cols - 1; j++){if (ShowBoard[i][j] == '*'){++flag;}}}if (flag == Difficulty){printf("你已找出所有炸弹,游戏胜利!");break;}}else{printf("炸弹bomb!游戏结束\n");Display(Board, Rows, Cols);break;}}else{printf("输入错误,请重新输入1~9的数字");}}
}

“扫雷”C语言实现(含炸开效果)相关推荐

  1. 【Unity】实现类似皇室战争使用“火球”将敌人“炸开”效果

    今天做了一个皇室战争使用"火球"攻击敌人的效果,当然是简易版的.也是跟上一篇博文有联系. 玩过皇室战争的人都知道这张卡片,当火球爆炸的时候会将敌人"炸开",也就 ...

  2. 【threejs效果:模型炸开】以钢铁侠obj模型为例

    1 效果如下: 2 基本原理 首先加载一个obj模型:然后遍历obj模型的所有children mesh:按一定比例改变每个子mesh的中心点位置即可: 爆炸代码: function modelExp ...

  3. cad中explode是什么意思_为什么CAD图块炸开后多了很多图形?

    一周内已经有两个人问这样的问题了:图中只有几个图块,结果炸开后多了好多东西,满屏都是图,炸开前后的效果如下图所示. 这个问题其实之前讲过,只是讲解的角度不同.原因很简单:图块里原来就有这么多东西,只是 ...

  4. SPSS Statistics 17.0多国语言(含中文)完整注册版

    使用全新的SPSS超强统计软体来分析资料,让您操作轻松,并做出具丰富特色的报表. SPSS视窗系列能帮助您发现那些以前使用试算表及资料库时所无法注意到资料里的重要趋势.另外还能够在难以解决的问题上,帮 ...

  5. 基于C#的ArcEngine二次开发46:编辑内容回撤与炸开multipart feature

    目录 1 支持撤销操作 1.1 方法接口介绍 1.1.1 StartOperation() 1.1.2 StopOperation 1.2 代码实现 2 炸开复合要素(explode multipar ...

  6. 解决CAD中炸开(explode))命令无效的方法

    2019独角兽企业重金招聘Python工程师标准>>> 如果在CAD使用过程中,不能炸开图块了,先试一试能否炸开别的实体(如多行文本.填充图案等),如果能,说明是你所选择的实体本身不 ...

  7. cad中explode是什么意思_CAD中分解(炸开explode)命令无效

    如果在CAD使用过程中,不能炸开图块了,先试一试能否炸开别的实体(如多行文本.填充图案等),如果能,说明是你所选择的实体本身不能被炸开:如果不能,可能是感染了一个基于AutoLISP语言的病毒程序ac ...

  8. 数据挖掘SPSS Clementine 12.0.3 多国语言(含中文)破解版

    数据挖掘SPSS Clementine 12.0.3 多国语言(含中文)破解版 2013-01-11 13:05 2111人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 数据挖掘(3) 作者 ...

  9. DL之BigGAN:利用BigGAN算法实现超强炸天效果——画风的确skr、skr、skr,太特么的skr了

    DL之BigGAN:利用BigGAN算法实现超强炸天效果--画风的确skr.skr.skr,太特么的skr了 导读     本博主刚刚利用代码进行测试,结果的确吊(不)炸(可)天(思议)!BigGAN ...

最新文章

  1. 单片机at指令解析 开源_分享Github上几个开源单片机硬件驱动库
  2. mysql被格式化恢复数据_三种常见数据库文件恢复方法介绍
  3. MySQL Workbench 导出数据库脚本(图文)
  4. Oracle-BPM安装详解
  5. PaddleOCR服务器端部署C++ cpu或者gpu进行预测
  6. 【日期工具类】DateUtils
  7. 如何挑选蓝牙耳机,蓝牙参数说明
  8. 【C语言】求球的表面积和体积
  9. Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding
  10. 【资源共享】Office软件合集
  11. 2022江苏省安全员A证考题及答案
  12. Django单元测试类和测试数据回滚
  13. 青春不只风花雪月更当豪迈向上
  14. 一个光棍的呐喊!-太经典了
  15. 罗格数据:生命周期动态模拟技术及其在税收领域应用初探 | 会员专栏
  16. 【转】国家天文大地网
  17. 华为云正式推出区块链服务!区块链技术将在数字经济时代大放异彩
  18. 电子计算机体积,世界上体积最大的计算机
  19. 基于java安全管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  20. 视频号、抖音、快手狙击付费直播

热门文章

  1. 新一代电子书汇总介绍,想入手了
  2. matlab 电抗器,基于matlab的磁控电抗器的建模与仿真
  3. 支付后但是显示未支付,再次支付如果又支付成功了怎么办? 后端代码逻辑是什么?【杭州多测师_王sir】【杭州多测师】...
  4. python +tkinter 打造网易云音乐下载播放器
  5. 【Java代码】两个数组拼接成一个数组
  6. MySQL数据库导入BIN格式定长文件
  7. 2022千乐微云技术学习任务计划
  8. Chrom浏览器安装Axure扩展插件
  9. VMware虚拟机与主机之间建立共享文件夹
  10. 探究ES suggest search