C语言实现扫雷【经典】下

简介: C语言实现扫雷【经典】下

2.4 布置雷

在game.h文件中先定义全局变量EASY_COUNT,控制雷的数量


#define EASY_COUNT 10


在布置雷时,要先生成随机坐标,然后判断该坐标是否可以放雷


  • 用rand函数产生随机值
  • 每一个格子只能存放一个雷,前面初始化棋盘时,已经将所有的格子(11x11)全初始化为’0’,所以在布置雷,只能在为’0’的格子中存放
//game.c
void SetMine(char board[ROWS][COLS], int row, int col)
{
  //布置雷
  //生成随机的坐标,布置雷
  int count = 10;
  while (count)
  {
    int x = rand() % row + 1;//为了控制随机值大小,防止越界,范围:1-9
    int y = rand() % col + 1;
    if (board[x][y] == '0')
    {
      board[x][y] = '1';
      count--;
    }
  }
}

🍤 调用头文件:


//game.h
#include<stdlib.h>
#include<time.h>

2.5 排除雷

玩游戏选择坐标时,会有三种结果:


1. 选择存放了雷的坐标,游戏结束


玩家先输入坐标,该坐标行列大小在定义的范围内,然后判断是否是存放了雷的坐标。


在之前我们已经初始化了所有位置都是‘0’,只有随机存放了雷的位置,会变为‘1’,而当输入的坐标的内容为‘1’时,即玩家踩雷了,游戏结束。


2. 选择了安全的坐标,且显示周围8个坐标的雷的数量


如果输入的坐标的内容为‘0’,则计算出周围8个位置的雷的数量,并打印在此坐标上。


在这里,我们用GetMineCount函数单独计算,返回雷的数量


假设已知坐标x,y,其他周围的坐标就可以表示为:

000a1705775b404d48a3ba48d41cd7e0_706652b3c3e64d328426f283669d7e04.png


🍤 代码实现:


//game.c
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');
}

🍩游戏胜利的实现


定义一个变量win,在每次选择非雷的坐标后累加1,当win=棋盘总个数(9x9)-存放了雷的个数,即win==row* col - EASY_COUNT,也就排除了所有的雷,游戏胜利。


3. 坐标选择错误


当我们选择的行列坐标超出设定的范围,就提示玩家输入错误,重新输入。


printf("坐标非法,重新输入!\n");


2.5.1 代码实现

//game.c
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
  int x = 0, y = 0;
  int win = 0;
  while (win<row*col-EASY_COUNT)
  {
    printf("请输入要排查的坐标,如:1 2:>");
    scanf("%d %d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= col)
    {
      if (mine[x][y] == '1')
      {
        printf("很遗憾,你被炸死了");
        DisplayBoard(mine, ROW, COL);
        break;
      }
      else
      {
        int count=GetMineCount(mine, x, y);//统计周围8个位置的雷的数量
        show[x][y] = count + '0';
        DisplayBoard(show, ROW, COL);
        win++;
      }
    }
    else
    {
      printf("坐标非法,重新输入!\n");
    }
  }
  if(win == row* col - EASY_COUNT)
  {
    printf("恭喜你,排雷成功…^-^…");
    DisplayBoard(mine, ROW, COL);
  }
}


3. 总结


3.1 game.h文件所有内容

#include<stdlib.h>
#include<time.h>
#include<windows.h>//声明Sleep函数
#define EASY_COUNT 10
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
//初始化棋盘
void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void SetMine(char board[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

3.2 game()游戏函数整体

//test.c
void game()
{
  char mine[ROWS][COLS];//存放布置好的雷
  char show[ROWS][COLS];//存放排查出的雷的信息
  //初始化棋盘
  //1.mine数组最开始全‘0’、
  //show数组最开始全‘*’
  InitBoard(mine,ROWS,COLS,'0');
  InitBoard(show,ROWS,COLS,'*');
  //打印棋盘
  DisplayBoard(show, ROW, COL);
  //1.布置雷
  SetMine(mine,ROW,COL);
  //2.排查雷
  FindMine(mine, show, ROW, COL);
}

🍩注: 每一个.c文件最前面,需要用 #include "game.h" 进行声明


f026a33d2986aae38b0107c161a3cb45_bf16a39b076049c89dac19f404a11e42-00003_auth_key=4842865137-0-0-5f445ac4f5131cf41e7d8b688f6fa287.jpg


相关文章
|
2月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
117 0
|
4月前
|
机器学习/深度学习 C语言
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
【8月更文挑战第5天】本篇文章用C语言采用多文件编写实现了一个基础的扫雷游戏(附源码),并讲解了关于函数递归的基础概念及其相对应的习题练习(附源码)
46 1
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
|
3月前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
55 1
C 语言——实现扫雷小游戏
|
2月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
2月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
39 0
|
2月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
43 0
|
2月前
|
存储 编译器 C语言
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
【C语言篇】数组和函数的实践:扫雷游戏(附源码)
39 0
|
4月前
|
C语言
扫雷(C语言)
扫雷(C语言)
47 4
|
5月前
|
存储 编译器 C语言
|
6月前
|
C语言
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
42 1