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


相关文章
|
20小时前
c语言学完数组就能做的小游戏--扫雷
c语言学完数组就能做的小游戏--扫雷
|
1天前
|
C语言
C语言初阶⑤(数组)扫雷游戏(分步实现+效果图)
C语言初阶⑤(数组)扫雷游戏(分步实现+效果图)
8 1
|
5天前
|
C语言
C语言扫雷代码(蹦蹦炸弹)(下)
C语言扫雷代码(蹦蹦炸弹)(下)
5 0
|
5天前
|
存储 C语言
关于我在C语言中玩扫雷(上)
关于我在C语言中玩扫雷(上)
5 0
|
6天前
|
C语言
以c语言为基础实现的简易扫雷游戏(游戏代码附在文章最后,如有需要请自取)
以c语言为基础实现的简易扫雷游戏(游戏代码附在文章最后,如有需要请自取)
55 1
|
6天前
|
C语言
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
|
6天前
|
编译器 定位技术 C语言
【C语言实战项目】扫雷游戏
【C语言实战项目】扫雷游戏
28 0
|
6天前
|
存储 Serverless C语言
C语言第十二弹--扫雷
C语言第十二弹--扫雷
|
6天前
|
C语言
C语言 扫雷详解
C语言 扫雷详解
|
6天前
|
存储 定位技术 C语言
基于C语言实现扫雷小游戏
本文介绍了使用C语言实现扫雷小游戏的过程。扫雷是一款经典的单机游戏,玩家需要通过点击方格来揭示数字或地雷,最终清除所有非地雷方格。实现过程中,首先定义了游戏所需的数据结构,如游戏地图、玩家信息等。然后,实现了游戏的初始化、渲染、输入处理等核心功能。在游戏逻辑方面,处理了点击事件、数字计算和胜负判断等。通过不断优化和完善,最终完成了基于C语言的扫雷小游戏实现,为玩家提供了一种简单有趣的游戏体验。
29 0