当前位置: 首页 > news >正文

C语言数组和函数的实践———扫雷游戏

扫雷游戏的代码实现

game.h部分

//头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9//宏定义是为了方便以后修改棋盘的行和列
#define COL 9
#define ROWS ROW+2//排查边缘行的雷时需向外延伸一行,共2个边缘行
#define COLS COL+2//排查边缘列的雷时需向外延伸一行,共2个边缘列
#define  EASY_COUNT 10
//函数声明//初始化棋盘
void InitBoard(char board[ROWS][COLS], int r, int c, char set);
//打印棋盘信息
void DisplayBoard(char board[ROWS][COLS] ,int r,int c);
//布置雷
void SetMine(char mine[ROWS][COLS],int  r,int c );
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c);

game.c部分

#include"game.h"//调用自定义头文件,可以使用头文件里面的文件
void InitBoard(char board[ROWS][COLS], int r, int c,char set)//传参
{int i = 0;for (i = 0;i < r;i++){int j = 0;for (j = 0;j < c;j++) {board[i][j] = set;}}
}
void DisplayBoard(char board[ROWS][COLS], int r, int c)//打印棋盘
{int i = 0;printf("- - - - - -扫雷- - - - - -\n");//打印列号for (i = 0;i <= c;i++){printf("%d ", i);}printf("\n");for (i = 1;i <= r;i++){int j = 0;printf("%d ", i);for (j = 1;j <= r;j++){printf("%c ", board[i][j]);}printf("\n");}
}
void SetMine(char mine[ROWS][COLS], int r, int c)//布置雷
{int count = EASY_COUNT;while (count){//生成随机坐标//x的范围1~9,y的范围是1~9int x = rand() % r + 1;//调用函数(该函数包含在<stdlib.h>库中),随机生成数%行数+1,使得这个数在范围内int y = rand() % c + 1;if (mine[x][y] == '0'){mine[x][y] = '1';//布置雷count--;}}
}
static int GetMineCount(char mine[ROWS][COLS],int x,int y)//返回一个数,这个数是玩家所选位置周围雷的个数
{
//方法一:return mine[x][y + 1] + mine[x + 1][y + 1] + mine[x - 1][y] + mine[x - 1][y - 1] +mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 8 * '0';//方法二:
/*int i = 0;
int j = 0;
int c = 0;
for (i = -1;i <=1;i++)
{for (j = -1;j <= 1;j++){if (mine[x + i][y + j] == '1')c++;}
}
return c;*/
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int r, int c)//排查雷
{int x = 0;int y = 0;int win = 0;while (win<r*c-EASY_COUNT) {printf("请输入要排查的坐标:");scanf("%d %d", &x, &y);//先判断坐标是否合法if (x >= 1 && x <= r && y >= 1 && y <= c){//再判断是否为雷if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");DisplayBoard(mine, r, c);//失败后呈现所有雷的棋盘break;}else{//先看此位置是否被排除过if (show[x][y] =='*'){//统计mine数组中,x,y坐标周围有几个雷int c = GetMineCount(mine, x, y);show[x][y] = c + '0';DisplayBoard(show, ROW, COL);win++;}else{printf("该坐标已经被排查过,请重新输入坐标\n");}}}else{printf("输入的坐标非法,请重新输入\n");}}if (win == r * c - EASY_COUNT){printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);}
}

test.c部分

#include"game.h"void menu()
{printf("*********************************\n");printf("************   1.play  **********\n");printf("************   0.exit  **********\n");printf("*********************************\n");
}
void game()
{char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息//棋盘初始化//mine全为‘0’,表示还没有设置雷,所有位置都不是雷//show全为‘*’,表示所有位置都没有被排查InitBoard(mine,ROWS,COLS,'0');//这里的字符一会儿会被传参过去InitBoard(show, ROWS, COLS,'*');SetMine(mine, ROW, COL);//布置雷//DisplayBoard(mine, ROW, COL);//布置的雷不想被看到,注释掉就不会打印DisplayBoard(show, ROW, COL);//打印棋盘FindMine(mine,show,ROW,COL);//排查雷}
int main()//程序由此开始
{int input = 0;srand((unsigned int)time(NULL));//初始化随机数do{menu();//调用自定义函数打印菜单printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();//玩游戏的逻辑,开始游戏的话调用此函数break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}
http://www.xdnf.cn/news/313219.html

相关文章:

  • 调用DeepSeek的API
  • 文献综述怎么写?高效阅读、智能整理,告别文献焦虑!
  • 感知器准则感知器神经元模型——等价
  • 电动双向金属硬密封蝶阀:四大领域流体控制的终极解决方案 -耀圣
  • Vue 项目中使用 EJS 模板动态注入环境变量
  • Vue3.5 企业级管理系统实战(十七):角色管理
  • String、StringBuilder、StringBuffer的区别
  • 0506--01-DA
  • TDengine 车联网案例
  • 2025.5.6总结
  • python setup.py install --user和pip install -e .的区别
  • HHsuite3 的 HHblits 和 HHsearch比较
  • android设备运行bcc程序报错
  • 5.6刷题并查集
  • Python-map从基础到进阶
  • SpringBoot Starter简介-笔记
  • https://juejin.cn/editor/drafts/7262346366541070395
  • RNN 与 CNN:深度学习中的两大经典模型技术解析
  • [HOT 100] 2646. 最小化旅行的价格总和
  • C语言| 递归实现斐波那契数列
  • 基站综合测试仪核心功能详解:从射频参数到5G协议测试实战指南
  • day008-文件属性专题
  • 爱普生VG7050EFN压控晶振在小基站的应用优势
  • linux -shell原理与运用
  • 人工智能任务24-AI学习中的模型训练中稀疏化参数与稀疏损失函数,以及实战项目应用
  • TruPlasma Match匹配器软件通快霍廷格TruPlasma Match100613 (G2)1024/13 (G2) RF Matchbox
  • 功率因数校正(PFC):原理、调节及关键波形分析
  • 大学之大:伯明翰大学2025.5.6
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据类型转换操作
  • langchain4j接入ollama本地大模型