0
点赞
收藏
分享

微信扫一扫

扫雷---C语言小游戏

fbd4ffd0717b 2022-02-16 阅读 60

前言
一、游戏规则介绍
二、基本思路流程介绍
三、代码实现
1.用户交互菜单(Menu函数)
2. Game函数
3.放雷函数(SetMines函数)
4.扫雷展示面板(ShowBoard函数和ShowLine函数)
5.统计周围雷的个数(CountMines函数)
6.mine函数
四、总代码


前言

一、游戏规则介绍

扫雷是一个十分经典的游戏,一张棋盘中有很多个不确定是雷还是安全区域的格子,当点击之后若没有雷则会在该区域显示周围八个格子雷的数目,若有雷则游戏结束。今天我就跟大家分享一下如何用c语言实现初阶版扫雷。

效果展示


 

二、基本思路流程介绍

1.创建一个用户交互菜单
2.创建一个mine棋盘用来埋雷并初始化
3.创建一个show_棋盘用来和用户交互并初始化
4.玩家选择想要扫描的坐标
5.判定游戏是否结束
6.若没有踩雷则在刚扫描的区域上显示周围八个区域的地雷数目并继续游戏
7.继续扫雷
8.判定游戏是否结束

9.若全部扫描完非雷区域则游戏结束


三、代码实现

1.用户交互菜单(Menu函数)

void menu()
{
printf("----------------------------\n");
printf("-----------1.play-----------\n");
printf("-----------0.exit-----------\n");
printf("----------------------------\n");
}

2. Game函数

void game()
{
//扫雷游戏的实现
//mine数组是用来存放布置好的雷的信息
char mine[ROWS][COLS] = { 0 };//'0'
//show数组是用来存放排查出的雷的信息
char show[ROWS][COLS] = { 0 };//'*'

//初始化棋盘
init_board(mine, ROWS, COLS, '0');
init_board(show, ROWS, COLS, '*');
//打印棋盘
//show_board(mine, ROW, COL);
//布置雷
set_mine(mine, ROW, COL);
show_board(show, ROW, COL);
//排查雷
find_mine(mine, show, ROW, COL);
}

3.放雷函数(set_mines函数)

void set_mine(char board[ROWS][COLS], int row, int col)
{
int count = EASY_COUNT;
while (count)
{
int x = rand() % row + 1;
int y = rand() % col + 1;
if (board[x][y] == '0')
{
board[x][y] = '1';
count--;
}
}
}

4.扫雷展示面板(show_board函数)

void show_board(char board[ROWS][COLS], int rows, int cols)
{
printf("--------扫雷-------\n");
int i = 0;
for (i = 0;i <= COL;i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1;i <= ROW;i++)
{
int j = 0;
printf("%d ", i);
for (j = 1;j <= COL;j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("--------扫雷-------\n");
}

5.统计周围雷的个数(get_mine_count函数)

int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
int i = -1;
int j = -1;
char c = 0;
for (i = -1;i <= 1;i++)
{
for (j = -1;j <= 1;j++)
{
c += mine[x + i][y + j];
}
}
return (c - 9 * '0');
}

6.main函数

int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d",
switch (input)
{
case 0:
printf("退出游戏!\n");
break;
case 1:
game();
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}

四、总代码

game.h文件

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10



void init_board(char board[ROWS][COLS], int rows, int cols);


void show_board(char board[ROWS][COLS], int rows, int cols);

void set_mine(char board[ROWS][COLS], int row, int col);

void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"


void init_board(char board[ROWS][COLS], int rows, int cols,char set)
{
int i = 0;
int j = 0;
for (i = 0;i < rows;i++)
{
for (j = 0;j < cols;j++)
{
board[i][j] = set;
}
}
}


void show_board(char board[ROWS][COLS], int rows, int cols)
{
printf("--------扫雷-------\n");
int i = 0;
for (i = 0;i <= COL;i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1;i <= ROW;i++)
{
int j = 0;
printf("%d ", i);
for (j = 1;j <= COL;j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
printf("--------扫雷-------\n");
}




void set_mine(char board[ROWS][COLS], int row, int col)
{
int count = EASY_COUNT;
while (count)
{
int x = rand() % row + 1;
int y = rand() % col + 1;
if (board[x][y] == '0')
{
board[x][y] = '1';
count--;
}
}
}

int get_mine_count(char mine[ROWS][COLS], int x, int y)
{
int i = -1;
int j = -1;
char c = 0;
for (i = -1;i <= 1;i++)
{
for (j = -1;j <= 1;j++)
{
c += mine[x + i][y + j];
}
}
return (c - 9 * '0');
}

void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
int i = 0;
while(i < row*col - EASY_COUNT)
{
int x = 0;
int y = 0;
printf("请输入要排查的坐标:>");
scanf("%d %d",
if (x >= 1 9 1 9)
{
if (mine[x][y] == '1')
{
printf("很遗憾,被炸死了\n");
show_board(mine, ROW, COL);
break;
}
else
{
show[x][y] = get_mine_count(mine, x, y) + '0';
show_board(show, ROW, COL);
i++;
}
}
else
printf("坐标非法,请重新输入!\n");
}
if (i == row * col - EASY_COUNT)
{
printf("恭喜,排雷成功!\n");
}
}

test.c文件
#include "game.h"




void game()
{
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };
init_board(mine, ROWS, COLS,'0');
init_board(show, ROWS, COLS,'*');
//show_board(mine, ROWS, COLS);
show_board(show, ROW, COL);
set_mine(mine, ROW, COL);
//show_board(mine, ROW, COL);
show_board(show, ROW, COL);
find_mine(mine, show, ROW, COL);
}


void menu()
{
printf("----------------------------\n");
printf("-----------1.play-----------\n");
printf("-----------0.exit-----------\n");
printf("----------------------------\n");
}

int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d",
switch (input)
{
case 0:
printf("退出游戏!\n");
break;
case 1:
game();
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (input);
return 0;
}
举报

相关推荐

0 条评论