iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现简单扫雷源码
  • 825
分享到

C语言实现简单扫雷源码

2024-04-02 19:04:59 825人浏览 安东尼
摘要

扫雷是一款大家都熟知的小游戏,今天我们将使用C语言实现一个简易版本的扫雷 需要的功能 1.保证第一次下子时,不被炸死 2.输入的坐标周围没雷,可以直接展开周围的坐标 3.输入的坐标周

扫雷是一款大家都熟知的小游戏,今天我们将使用C语言实现一个简易版本的扫雷

需要的功能

1.保证第一次下子时,不被炸死
2.输入的坐标周围没雷,可以直接展开周围的坐标
3.输入的坐标周围有雷时,应该显示周围有多少个雷

注意事项

1.应该定义两个数组,一个用来向玩家展示排雷的情况,一个来存放雷
2.定义的数组的大小,应该大于扫雷游戏的棋盘的真实大小,防止数组越界
(如:在扫雷的棋盘为99时,我们应该定义1111的数组,防止数组越界)
3.可以将代码分文件实现

代码的实现

分文件

将代码分别写入game.c,game.h,test.c文件里,可以让代码更加有条理
test.c主要写游戏主要框架
game.c实现需要的函数
game.h定义需要的函数

对两个数组初始化


//board-需要初始化的数组
//set-初始化的元素(这里我将'1'设置为雷,'0'代表没有雷;将玩家看到的棋盘初始化为'*')
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
 int i;
 int j;
 for (i = 0; i < rows; i++)
 {
  for (j = 0; j < cols; j++)
  {
   board[i][j] = set;
  }
 }
}

打印功能


//打印
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
 int i;
 int j=1;
 printf("-----------------------------\n");//分割每次打印的棋盘,防止混淆
 for (i = 0; i <= row; 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");

}

布置雷


//布置雷
//count-布置的雷的数量
void SetMineBoard(char board[ROWS][COLS], int row, int col, int count)
{
 while (count)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;
  if (board[x][y] == '0')
  {
   board[x][y] = '1';
   count--;
  }
 }
}

排查雷


//排查雷
//num-雷的数量
void FineMine(int row, int col, int num)
{
 int flag = 1;
 int a = 1;
 while (flag)
 {
  printf("请输入一个坐标:");
  int x;
  int y;
  scanf("%d%d", &x, &y);
  if (a == 1)//第一次输入坐标需要进行判断,防止第一次就踩到了雷
  {
   a--;
      safe(x, y,ROW,COL);//安全函数,保证第一次不会踩到雷
  }

  if (x >= 1 && x <= row&&y >= 1 && y <= col)//坐标合法
  {
   if (mine[x][y] != '1')//如果该位置不是雷,应该搜索周围有多少雷
   {
    int count = GetMineCount(x, y);//查找周围雷的数量
    show[x][y] = count + '0';
    if (show[x][y] == '0')
    {//该位置没有雷时,应该继续展开搜索周围的坐标
     open_mine(x, y);//展开周围坐标功能
     int z = count_show_mine(row, col);
     if (z == num)
     {
      printf("你已经找出全部的雷,游戏胜利\n");
      DisplayBoard(show, ROW, COL);//打印
      break;
     }
    }
    DisplayBoard(show, ROW, COL);//打印
   }
   else
   {
    printf("你踩到雷,游戏结束\n");
    DisplayBoard(mine, ROW, COL);//打印
    flag = 0;
   }
  }
  else
  {
   printf("坐标有误,请重新输入");
  }
 }
}

保证第一次下子时,不被炸死


//保证不会在第一次时踩到雷
void safe(int x, int y, int row, int col)
{
 int q = 1;
 if (mine[x][y] == '1')
 {//如果此处是雷,将雷换到其他地方
  mine[x][y] = '0';
  while (q)
  {
   int a = rand() % row + 1;
   int b = rand() % col + 1;
   if (mine[a][b] == '0'&&a!=x&&b!=y)
   {
    q--;
    mine[a][b] = '1';
   }
  }
 }
}

统计周围有几个雷;


//统计坐标(x,y)周围有几个雷;
int GetMineCount(int x, int y)
{
 return (mine[x - 1][y - 1])
  + (mine[x - 1][y])
  + (mine[x - 1][y + 1])
  + (mine[x][y - 1])
  + (mine[x][y + 1])
  + (mine[x + 1][y - 1])
  + (mine[x + 1][y])
  + (mine[x + 1][y + 1])
  - 8 * '0'; 
}

展开周围坐标


//展开排查周围坐标的情况
void open_mine(int x, int y)//坐标周围展开函数
{
 if (mine[x - 1][y - 1] == '0')
 {
  show[x - 1][y - 1] = GetMineCount(x - 1, y - 1) + '0';//显示该坐标周围雷数
 }
 if (mine[x - 1][y] == '0')
 {
  show[x - 1][y] = GetMineCount(x - 1, y) + '0';//显示该坐标周围雷数
 }
 if (mine[x - 1][y + 1] == '0')
 {
  show[x - 1][y + 1] = GetMineCount(x - 1, y + 1) + '0';//显示该坐标周围雷数
 }
 if (mine[x][y - 1] == '0')
 {
  show[x][y - 1] = GetMineCount(x, y - 1) + '0';//显示该坐标周围雷数
 }
 if (mine[x][y + 1] == '0')
 {
  show[x][y + 1] = GetMineCount(x, y + 1) + '0';//显示该坐标周围雷数
 }
 if (mine[x + 1][y - 1] == '0')
 {
  show[x + 1][y - 1] = GetMineCount(x + 1, y - 1) + '0';//显示该坐标周围雷数
 }
 if (mine[x + 1][y] == '0')
 {
  show[x + 1][y] = GetMineCount(x + 1, y) + '0';//显示该坐标周围雷数
 }
 if (mine[x + 1][y + 1] == '0')
 {
  show[x + 1][y + 1] = GetMineCount(x + 1, y + 1) + '0';//显示该坐标周围雷数
 }
}

判断胜利


//判断剩余未知区域的个数,个数为雷数时玩家赢
int count_show_mine(int row,int col)
{
 int count = 0;
 int i = 0;
 int j = 0;
 for (i = 1; i <= row - 2; i++)
 {
  for (j = 1; j <= col - 2; j++)
  {
   if (show[i][j] == '*')
   {
    count++;
   }
  }
 }
 return count;
}

效果展示

1.打印和布置

第一个数组是玩家在游戏看到的数组,第二个数组是存放雷的数组,在游戏中第二个数组不会被打印

2.safe函数的检查

第一个数组为本来存放雷的数组,可以看到此时(1,7)位置是有雷的,但是,我们在输入(1,7)坐标时,因为safe函数的功能,使得(1,7)位置的雷转移到其他地方

3.由上图可知(2,8)存放的有雷,这时我们输入(2,8)(不是第一次输入),游戏结束

4.展开功能

第一个数组仍然为布置雷后打印出的数组,我们可以看到(3,3)位置及周围都没有雷,所以我们输入(3,3)看到其周围8个位置也被搜索

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

--结束END--

本文标题: C语言实现简单扫雷源码

本文链接: https://www.lsjlt.com/news/123997.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现简单扫雷源码
    扫雷是一款大家都熟知的小游戏,今天我们将使用c语言实现一个简易版本的扫雷 需要的功能 1.保证第一次下子时,不被炸死 2.输入的坐标周围没雷,可以直接展开周围的坐标 3.输入的坐标周...
    99+
    2024-04-02
  • C语言实现简单的扫雷功能
    这是我跟着学习视频完成的第一个小游戏,运用到的知识不多都是数组相关的知识,重要的是思路,在设计的时候要先绘制出大概的框图,要知道游戏的根本,这样会让你写程序的时候更加方便。 下面看代...
    99+
    2024-04-02
  • C语言扫雷游戏的简单实现
    今天来用c语言做一个扫雷功能的简单实现,首先创建一个test.c来用于在写代码的途中测试扫雷代码,game.h来存放实现扫雷函数需要用到的头文件,game.c来存放最终的成品。 首先...
    99+
    2024-04-02
  • 用C语言实现简单扫雷游戏
    前言 本文写的是用C语言实现扫雷,用递归实现周围一圈无雷时,自动继续判断下一圈是否有雷,直到四周有地雷的信息。 最终结果展示 初始游戏界面 四周无地雷继续向外展开,直到出现地雷信息...
    99+
    2024-04-02
  • C语言代码实现简单的扫雷小游戏
    C语言+EASYX实现扫雷,供大家参考,具体内容如下 主要思路就是通过一个二维数组存储不同的数来代表0到8等具体的图片,再配合鼠标的位置和点击情况,来改变数组某一项的值,而显示不同的...
    99+
    2024-04-02
  • 用C语言实现简单扫雷小游戏
    前言 今天学习了制作简易扫雷游戏,代码如下 提示:以下是本篇文章正文内容,下面案例可供参考 一、函数头文件(函数声明) 代码如下(示例): #pragma once #defin...
    99+
    2024-04-02
  • C语言实现扫雷小游戏简单版
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 在vs2019创建新项目,然后添加两个源文件test.c和game.c,接着创建一个头文件game.h。...
    99+
    2024-04-02
  • 用C语言简单实现扫雷小游戏
    本文实例为大家分享了C语言简单实现扫雷小游戏的具体代码,供大家参考,具体内容如下 设计思路 1. 定义两个二维数组,一个存放炸弹信息,一个隐藏信息后向玩家展示。 2. 玩家每一次选择...
    99+
    2024-04-02
  • 基于C语言实现简单扫雷游戏
    在每一个电脑里总有一个固定的小游戏-扫雷,那今天就让我们一起来实现下扫雷。 1.主函数的构建 int main() { int input = 0; do { me...
    99+
    2024-04-02
  • 基于C语言实现简单的扫雷游戏
    目录效果展示开始的界面选择标记地雷或者选择踩坐标在输入坐标处输入0 0结束游戏踩到炸弹,出现炸弹位置胜利代码test.cgame.hgame扫雷.c效果展示 开始的界面 输入0结束...
    99+
    2024-04-02
  • C语言实现一个简单的扫雷游戏
    前言 扫雷跟上一篇文章的三子棋一样,是C语言基础知识的综合运用的实例,对于巩固我们的基础知识非常重要,同时扫雷作为C语言的一个小项目,锻炼我们的编程思维,也是一个不可多得的实践。 提...
    99+
    2024-04-02
  • C语言实现扫雷代码
    本文实例为大家分享了C语言实现扫雷的具体代码,供大家参考,具体内容如下 前言 扫雷实现的基本规划: 1、玩家可以自由选择进入和退出游戏2、玩家通过输入坐标来排雷3、排查雷给出提示4、...
    99+
    2024-04-02
  • C语言如何实现简单扫雷小游戏
    本篇内容主要讲解“C语言如何实现简单扫雷小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现简单扫雷小游戏”吧!前言今天学习了制作简易扫雷游戏,代码如下提示:以下是本篇文章正文内容...
    99+
    2023-06-20
  • C语言版简单扫雷游戏
    本文实例为大家分享了C语言版的简单扫雷游戏,供大家参考,具体内容如下 思想 我们在设计的时候,首先将其分为三个部分,分别为头文件game.h游戏界面及主要实现的功能函数部分test....
    99+
    2024-04-02
  • C语言怎么实现简单的扫雷功能
    本篇内容主要讲解“C语言怎么实现简单的扫雷功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现简单的扫雷功能”吧!下面看代码:test.c#define _CRT_SECU...
    99+
    2023-06-25
  • 怎么用C语言实现简单扫雷游戏
    本篇内容介绍了“怎么用C语言实现简单扫雷游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.主函数的构建int main(){&...
    99+
    2023-06-25
  • C语言实现扫雷游戏详解(附源码)
    目录1.游戏的功能 2.游戏实现的基本思路2.1实现菜单给玩家选择2.2初始化棋盘2.3数组大小的问题2.4对棋盘赋值2.5打印棋盘2.6布置雷2.7排查雷3.代码基本实现...
    99+
    2024-04-02
  • C语言实现简易扫雷程序
    前言 前面写了三子棋的小游戏,感觉不过瘾,今天再来一个扫雷的小游戏。欢迎评论探讨 思路分析 游戏简介 说到扫雷很容易想起很多个方形格子,表面什么也没有,点击其中一个小格子,如果时炸弹...
    99+
    2024-04-02
  • 基于C语言实现简单的扫雷小游戏
    本文实例为大家分享了C语言实现简单的扫雷小游戏的具体代码,供大家参考,具体内容如下 首先来规划一下扫雷游戏实现的几个步骤: 初始化棋盘:二维数组的遍历及赋值 为了后续代码的简洁方便,...
    99+
    2024-04-02
  • C语言简易实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作