C语言代码实现扫雷游戏

 更新时间:2020年02月10日 14:19:08   作者:Listen-Y  
这篇文章主要为大家详细介绍了C语言代码实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下

该游戏我们也是利用数组完成,设置俩个数组一个mine数组,一个show数组。

mine数组存放雷,show数组显示棋盘并且显示该位置是否有雷或者显示该位置周围有几个雷。

数组大小有讲究,我们宏定义变量 ROW COL 为9 定义ROWS COLS为11,我们显示的是9X9的棋盘,也是将雷设置在9X9的位置内,但是我们设置数组是设置11X11,因为这样方便我们遍历9X9棋盘四边位置上某位置四周雷的数目,不然的话会发生越界错误。

对于雷的符号,我们设置空位置为 0,有雷的位置为1,这样易于我们统计某一位置周围有多少雷的数目。

重点在于扫雷函数,玩家输入x y位置,我们判断该位置是否有雷,否的话判断该位置周围有多少雷并在存于show数组display给玩家。并且我们输入一个位置当该位置不是雷的时候,计数器count++;若果该计数器count==col*row-EAXY_COUNT;我们就判断玩家赢。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define EASY_COUNT 10

//函数声明
void ChushiBoard(char board[ROWS][COLS],int rows,int cols,char set);
void Dayinboard(char board[ROWS][COLS], int row, int col);
void BuzhiBoard(char mine[ROWS][COLS], int row, int col);
void CaoleiBoard(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

void menu()
{
 printf("*****************************************\n");
 printf("*****************************************\n");
 printf("**** 输入1开始游戏 输入0退出游戏 *****\n");
 printf("*****************************************\n");
 printf("*****************************************\n\n\n");
}

void game()
{
 char mine[ROWS][COLS];//存放雷
 char show[ROWS][COLS];//显示排查出来的雷
 //初始化
 ChushiBoard(mine, ROWS, COLS,'0');//'0'
 ChushiBoard(show, ROWS, COLS,'*');//'*'
 //布置雷
 BuzhiBoard(mine,ROW,COL);
 //Dayinboard(mine, ROW, COL);
 //打印棋盘
 Dayinboard(show, ROW, COL);
 //扫雷
 CaoleiBoard(mine,show,ROW,COL);
}



void test()
{
 int input = 0;
 do
 {
 menu();
 printf("请输入:>");
 scanf("%d", &input);
 switch (input)
 {
 case 1:
 game();
 break;
 case 0:
 printf("退出游戏\n\n");
 break;
 default:
 printf("输入错误,重新输入\n\n");
 break;
 }
 } while (input);
}


int main()
{
 test();
 system("pause");
 return 0;
}


void ChushiBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < rows; i++)
 {
 for (j = 0; j < cols; j++)
 {
 board[i][j] = set;
 }
 }
}

void Dayinboard(char board[ROWS][COLS], int row, int col)
{
 int i = 0;
 int j = 0;
 printf("------------------------------\n");
 for (i = 0; i <= col; i++)
 {
 printf(" %d ", i);
 }
 printf("\n");
 for (i = 1; i <= row; i++)
 {
 printf(" %d ", i);
 for (j = 1; j <= col; j++)
 {
 printf(" %c ", board[i][j]);
 }
 printf("\n");
 }
 printf("------------------------------\n");
}


void BuzhiBoard(char mine[ROWS][COLS], int row, int col)
{
 int count = EASY_COUNT;
 while (count)
 {
 int x = rand()%row+1;
 int y = rand()%col+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 - 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] +
 mine[x][y + 1] +
 mine[x - 1][y + 1] - 8 * '0';
}



void CaoleiBoard(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int x = 0;
 int y = 0;
 int win = 0;
 while (win<row*col-EASY_COUNT)
 {
 printf("请输入要排查的坐标(格式:X空格X回车):>");
 scanf("%d%d", &x, &y);
 if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
 {
 if (mine[x][y] == '1')
 {
 printf(" 很遗憾,你被炸死了!!!\n");
 Dayinboard(mine, row, col);
 break;
 }
 else
 {
 int count = GetMineCount(mine,x,y);
 show[x][y] = count+'0';
 Dayinboard(show, row, col);
 win++;
 }

 }
 else
 {
 printf("输入的坐标非法\n");
 }
 }
 if (win == row*col - EASY_COUNT)
 {
 printf(" 恭喜你,你排雷成功了!!!\n");
 }
}

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • c++报错问题解决方案lvalue required as left operand of assignment

    c++报错问题解决方案lvalue required as left opera

    这篇文章主要介绍了c++报错:lvalue required as left operand of assignment,出现此错误原因,是因为,等号左边是不可被修改的表达式或常量,而表达式或常量不能作为左值,需要的朋友可以参考下
    2023-01-01
  • C语言代码实现三子棋小游戏

    C语言代码实现三子棋小游戏

    这篇文章主要为大家详细介绍了C语言代码实现三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 使用matlab绘制七夕表白玫瑰花束

    使用matlab绘制七夕表白玫瑰花束

    又是一年七夕节要到了,每年一次直男审美MATLAB绘图大赛开始了,于是今年对我之前写的老代码进行了点优化组合,整了个花球变花束,感兴趣的小伙伴可以动手试一试
    2023-08-08
  • C语言示例讲解结构体的声明与初始化方法

    C语言示例讲解结构体的声明与初始化方法

    结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。本文将通过示例为大家详细讲讲C语言中结构体的使用,需要的可以参考一下
    2022-07-07
  • 利用C语言实现简单三子棋游戏

    利用C语言实现简单三子棋游戏

    这篇文章主要为大家详细介绍了利用C语言实现简单三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了,这里就为大家分享一下方法
    2021-01-01
  • C++ 超详细讲解stack与queue的使用

    C++ 超详细讲解stack与queue的使用

    C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,也就是说实现了一个先进后出(FILO)的数据结构,许多程序都使用了 queue 容器。queue 容器可以用来表示超市的结账队列或服务器上等待执行的数据库事务队列
    2022-03-03
  • c/c++静态库之间相互调用的实战案例

    c/c++静态库之间相互调用的实战案例

    C++调用C的函数比较简单,直接使用extern "C" {}告诉编译器用C的规则去编译C代码就可以了,下面这篇文章主要给大家介绍了关于c/c++静态库之间相互调用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 一文解析C语言中动态内存管理

    一文解析C语言中动态内存管理

    这篇文章主要为大家详细介绍了C语言中动态内存管理的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C++ Cartographer源码中关于传感器的数据传递实现

    C++ Cartographer源码中关于传感器的数据传递实现

    这篇文章主要介绍了C++ Cartographer源码中关于传感器的数据传递实现,前面已经谈到了Cartographer中添加轨迹的方法和传感器的数据流动走向。发现在此调用了LaunchSubscribers这个函数来订阅相关传感器数据
    2023-03-03

最新评论