C语言实现小游戏之扫雷(上)

简介: C语言实现小游戏之扫雷

前言

相信大家都曾玩过一个经典的小游戏——扫雷,在学习了C语言有关于数组、循环语句、选择语句等知识后,我决定用C语言实现一个简易版的扫雷游戏,接下来我将在本篇文章中向大家介绍我的思路以及具体的实现过程。

一、主要实现功能

1.可控制棋盘的大小和雷的数量;

2.判断输入的坐标是否正确;

3.可以在棋盘中随机放置雷;

4.显示非雷坐标周围雷的个数;

5.展开功能(若所排查坐标周围没有雷,则展开一片,直到遇到雷或者棋盘边界等条件)

6.判断游戏的输赢

二、程序流程(思路)

玩家输入坐标,系统判断是否为雷:

如果是雷,则玩家被炸死,游戏结束;

如果不是雷,又分为两种情况:

该位置周围有雷,则显示周围雷的数量;

该位置周围没有雷,则展开一片。

如果所有非雷位置被玩家全部找到,则玩家胜利,游戏结束。

主程序流程

游戏部分流程

三、源代码及运行截图

为了方便大家的学习和交流,我将这个小游戏的源代码放置在下方,同时还有我的运行截图。

源代码

初始化棋盘

//初始化布置雷的棋盘和展示给玩家的棋盘
void init_mine()
{
  int i = 0;
  int j = 0;
  for (i = 0; i < ROW; i++)
  {
    for (j = 0; j < COL; j++)
    {
      real_mine[i][j] = '0';
    }
  }
  for (i = 0; i < ROW - 2; i++)
  {
    for (j = 0; j < COL - 2; j++)
    {
      show_mine[i][j] = '*';
    }
  }

放置雷

//放置雷
void set_mine()
{
  int row = 0;
  int col = 0;
  int mine = MINE;
  while (mine--)
  {
    row = (rand() % (ROW - 2)+1);//产生随机的行数
    col = (rand() % (COL - 2)+1);//产生随机的列数
    if (real_mine[row][col] != '1')
    {
      real_mine[row][col] = '1';
    }
    else
    {
      mine++;
    }
  }
}

打印放置雷的棋盘

//打印放置雷的棋盘
void print_mine() 
{
  int i = 0;
  int j = 0;
  for (i = 0; i < ROW; i++)
  {
    for (j = 0; j < COL; j++)
    {
      printf("%c ", real_mine[i][j]);
    }
    printf("\n");
  }
}

打印展示给玩家的棋盘

//打印展示给玩家的棋盘
void print_show()
{
  int i = 0;
  int j = 0;
  printf("%2d ",0);
  for (j = 0; j < COL - 2; j++)
  {
    printf("%d ", j+1);
  }
  printf("\n");
  for (i = 0; i < ROW - 2; i++)
  {
    printf("%2d ", i+1);
    for (j = 0; j < COL - 2; j++)
    {
      printf("%c ", show_mine[i][j]);
    }
    printf("\n");
  }
}

统计周围雷的个数

//统计周围雷的个数
int count_mine(int n,int m)
{
  int i = 0;
  int j = 0;
  int count = 0;
  for (i = n - 1; i <= n + 1; i++)
  {
    for (j = m - 1; j <= m + 1; j++)
    {
      if (real_mine[i][j] == '1')
      {
        count++;
      }
    }
  }
  return count;
}

判断输入的坐标是否已经被查询过

//判断输入的坐标是否已经被查询过
int has_queried(int n, int m)
{
  if (show_mine[n - 1][m - 1] != '*')
  {
    return 0;
  }
  else
  {
    return 1;
  }
}

展开一片(展开该坐标周围的坐标,一直到限制条件)

//展开一片(展开该坐标周围的坐标,一直到限制条件)
void open_mine(int n, int m)
{
  int i = 0;
  int j = 0;
  //结束标志:
  //1.坐标是雷
  //2.坐标越界
  //3.坐标已被查找
  if (n <= (ROW - 2) && n >= 1 && m <= (ROW - 2) && m >= 1 && show_mine[n - 1][m - 1] == '*' && real_mine[n][m] == '0')
  {
    real_mine[n][m] = '2';//将查找过的坐标进行标记
    if (!count_mine(n, m))
    {
      show_mine[n - 1][m - 1] = ' ';//把周围没有雷的坐标显示为空白
      for (i = n - 1; i <= n + 1; i++)
      {
        for (j = m - 1; j <= m + 1; j++)
        {
          open_mine(i, j);
        }
      }
    }
    else
    {
      show_mine[n - 1][m - 1] = count_mine(n, m) + '0';//加0x30或者加‘0’都可以将数值转为字符
    }
  }
}


相关文章
|
1月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
96 0
|
1月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
2月前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
58 1
C语言——实现贪吃蛇小游戏
|
2月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
43 1
C 语言——实现扫雷小游戏
|
1月前
|
C语言 定位技术 API
【C语言】实践:贪吃蛇小游戏(附源码)(二)
【C语言】实践:贪吃蛇小游戏(附源码)
【C语言】实践:贪吃蛇小游戏(附源码)(二)
|
1月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
1月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
1月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
35 0
|
1月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
39 0
|
1月前
|
C语言
【C语言】实践:贪吃蛇小游戏(附源码)(三)
【C语言】实践:贪吃蛇小游戏(附源码)