iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >使用C语言怎么制作一个扫雷游戏
  • 345
分享到

使用C语言怎么制作一个扫雷游戏

2023-06-14 14:06:46 345人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底

本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

C语言是什么

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器。

需要的功能

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

注意事项

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

代码的实现

分文件

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

使用C语言怎么制作一个扫雷游戏

对两个数组初始化

//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.打印和布置

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

使用C语言怎么制作一个扫雷游戏

2.safe函数的检查

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

使用C语言怎么制作一个扫雷游戏

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

使用C语言怎么制作一个扫雷游戏

4.展开功能

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

使用C语言怎么制作一个扫雷游戏

以上就是使用C语言怎么制作一个扫雷游戏,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网其他教程频道。

--结束END--

本文标题: 使用C语言怎么制作一个扫雷游戏

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

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

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

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

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作