扫雷游戏(用C语言实现)

简介: 扫雷游戏(用C语言实现)

前言

这是我自己做的第一个小项目---扫雷游戏。后期我会继续制作其他小项目并开源至博客上。

geme.h文件

#define _CRT_SECURE_NO_WARNINGS
#define ROW 9
#define LIN 9
#define ROWS ROW+2
#define LINS LIN+2
#define EASY_COUNT 10
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu();
void game();
void make_map(char arr[ROWS][LINS], int rows, int lines, char set);
void printf_map(char arr[ROWS][LINS], int rows, int lines);
void set_mine(char arr[ROWS][LINS], int row, int lin);
int get_mine_count(char mine[ROWS][LINS], int x, int y);
void find_mine(char mine[ROWS][LINS], char show[ROWS][LINS], int row, int lin);

1. 在创立的头文件中,存放各种函数声明、宏定义、以及引入不同库函数。

2. 使用宏定义时,可以更加方便的修改整个游戏的参数,不需要一个个改变量。

test.c文件

#include "game.h"
 
void menu()//打印菜单函数
{
  printf("**欢迎来到扫雷游戏~**\n");
  printf("******( ̄▽ ̄~)~******\n");
  printf("**********************\n");
  printf("********1.PLAY********\n");
  printf("********0.EXIT********\n");
  printf("**********************\n");
}
 
void game()//游戏主体函数
{
  char mine[ROWS][LINS] = { 0 };//准备布置地雷的数组
  char show[ROWS][LINS] = { 0 };//准备展示地雷的数组
  make_map(mine, ROWS, LINS,'0');//形成布置地雷的数组(全为'0')(失败看到)
  make_map(show, ROWS, LINS, '*');//形成展示地雷的数组(全为'*')(成功看到)
  printf_map(show, ROW, LIN);//打印展示地雷'*'数组
  set_mine(mine, ROW, LIN);//随机生产地雷
  find_mine(mine,show ,ROW, LIN);//搜查九宫格的地雷数量
}
 
int main()
{
  int input = 0;
  srand((unsigned int)time(NULL));//创立随机种子,为生成随机数做准备。
  do
  {
    menu();//先打印菜单函数
    printf("请选择:1或者0\n");
    scanf("%d", &input);//让玩家选择玩不玩
    switch (input)
    {
    case 1:
      printf("进入扫雷\n");
      game();//开始游戏函数
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新选择\n");
      break;
    }
  } while (input);//如果是0则退出,如果1则进入游戏,如果是其他数字则再次循环重新选择。
  return 0;
}

game.c文件

#include "game.h"
 
void make_map(char arr[ROWS][LINS],int rows,int lines,char set)//制作地图函数
{
  int i = 0;
  for (i = 0; i < rows; i++)
  {
    int j = 0;
    for (j = 0; j < lines; j++)
    {
      arr[i][j] = set;
    }
  }
}
 
void printf_map(char arr[ROWS][LINS], int rows, int lines)
{
  int i = 0;
  printf("-------扫雷-------\n");//界面分开线
  printf("0");
  for (i = 1; i <= rows; i++)
  {
    printf(" %d", i);
  } //第一行的行标注数
  printf("\n");
  for (i = 1; i <= rows; i++)
  {
    int j = 0;
    printf("%d", i);//第一列的行标注数
    for (j = 1; j <= lines; j++)
    {
      printf(" %c", arr[i][j]);//这一行全部'*'号
    }
    printf("\n");//实现换行
  }
}
 
void set_mine(char arr[ROWS][LINS], int row, int lin)
{
  int count = EASY_COUNT;//确定地雷的数量
  while (count)
  {
    int x = rand() % row + 1;
    int y = rand() % lin + 1;//保障产生地雷在规定范围之内
    if (arr[x][y] == '0')//避免重复布雷
    {
      arr[x][y] = '1';//'1'代表地雷
      count--;
    }
  }
}
 
int get_mine_count(char mine[ROWS][LINS],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');
}//字符可以以ASCLL编码的形式进行加减。
 
void find_mine(char mine[ROWS][LINS], char show[ROWS][LINS], int row, int lin)
//主要的操作函数
{
  int x = 0, y = 0,win =0;
  while (1)
  {
    printf("请输入你要排查的坐标\n");
    scanf("%d%d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= lin)//确保输入范围正确
    {
      if (mine[x][y] == '1')//中招了
      {
        printf("Game Over\n~( ̄▽ ̄~)~\n");
        printf("地雷图如下所示:\n");
        printf_map(mine, ROW, LIN);//失败后打印'0 1'图
        break;
      }
      else//成功
      {
        int count = get_mine_count(mine, x, y);
        show[x][y] = (count + '0');//在'*'图上展示数字(九宫格地雷数)
        printf_map(show, ROW, LIN);//失败后打印'* num'图
        win++;
      }
    }
    else
    {
      printf("请重新输入!\n");
    }
    if (win == row * lin - EASY_COUNT)
    {
      printf("排雷成功!\n~( ̄▽ ̄~)~\n");
      printf_map(mine, ROW, LIN);
    }
  }
}

致谢

 感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

相关文章
|
21天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
31 1
|
2月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
87 1
|
2月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
2月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
2月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
38 0
|
2月前
|
C语言
C语言扫雷游戏(详解)
C语言扫雷游戏(详解)
40 0
|
2月前
|
程序员 C语言
初识C语言之三子棋游戏
初识C语言之三子棋游戏
36 0
|
2月前
|
C语言
初识C语言3——函数(以猜数字游戏为例)
初识C语言3——函数(以猜数字游戏为例)
71 0
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3
|
3天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
25 6