C语言---二维数组实现扫雷

目录

1:game.c源文件------游戏的简单框架

2:function.c源文件------具体实现game.c文件中的语句代码,如此处的自定义函数GameStart()       等。

      game.c------头文件的包含,符号的定义和函数的声明

3:最后来看一看代码运行效果


  1:game.c源文件------游戏的简单框架

#include"game.h"

//主函数入口
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
        //菜单
		Menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			//开始游戏,进入GameStart()函数
			GameStart();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
		}
	} while (input);
	return 0;
}

2:function.c源文件------具体实现game.c文件中的语句代码,如此处的自定义函数GameStart()等。

下面为进入游戏后的代码执行逻辑

game.c------头文件的包含,符号的定义和函数的声明

#pragma once
#define _CRT_SECURE_NO_WARNINGS
//面板布局
#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2
//雷的数量
#define Mine 10



//头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//选择菜单
void Menu(void);
//开始游戏,进入GameStart()函数
void GameStart(void);
//     {

//面板初始化
void InitBoard(char mineboard[ROWS][COLS], int rows, int cols, char tmp);
//埋雷
void SetMine(char mineboard[ROWS][COLS]);
//输出展示
void DisplayBoard(char show[ROWS][COLS], int row, int col);
//找雷
void FindMine(char mineboard[ROWS][COLS], char showboard[ROWS][COLS]);

//     }

 逐一实现上述函数

#include"game.h"

//菜单
void Menu(void)
{
	printf("-----------------------\n");
	printf("--------1:Play---------\n");
	printf("--------0:Exit---------\n");
	printf("-----------------------\n");
}

//面板初始化
void InitBoard(char mineboard[ROWS][COLS], int rows, int cols, char tmp)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			mineboard[i][j] = tmp;
		}
	}
}

//埋雷
void SetMine(char mineboard[ROWS][COLS])
{
	int count = Mine;
	while (count)
	{
		//'1'表示有雷,'0'表示无雷
		int x = rand() % ROW + 1;
		int y = rand() % COL + 1;
		if (mineboard[x][y] == '0')
		{
			mineboard[x][y] = '1';
			count--;
		}
	}
}

//输出展示
void DisplayBoard(char show[ROWS][COLS], int row, int col)
{
	system("cls");
	int i = 0;
	int j = 0;
	printf("--------扫雷-------\n");
	for (j = 0; j <= col; j++)
	{
		printf("%d ", j);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", show[i][j]);
		}
		printf("\n");
	}
	printf("-------------------\n");
}

//找雷
void FindMine(char mineboard[ROWS][COLS], char showboard[ROWS][COLS])
{
	int x = 0;
	int y = 0;
	int count = ROW * COL - Mine;
	while (count)
	{
		printf("请输入你要排查的坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
		{
			if (showboard[x][y] != '*')
			{
				printf("此处已排查,请重新输入!\n");
			}
			else
			{
				if (mineboard[x][y] == '1')
				{
					DisplayBoard(mineboard, ROW, COL);
					printf("真不幸,你踩到雷了!\n");
					system("pause");
					system("cls");
					return;
				}
				else
				{
					showboard[x][y] = (mineboard[x - 1][y - 1] + mineboard[x][y - 1] + mineboard[x + 1][y - 1]
						+ mineboard[x - 1][y] + mineboard[x + 1][y] + mineboard[x - 1][y + 1]
						+ mineboard[x][y + 1] + mineboard[x + 1][y + 1] - 8 * '0') + '0';
					DisplayBoard(showboard, ROW, COL);
					count--;
				}
			}
		}
		else
		{
			printf("错误输入,请重新输入!\n");
		}
	}
		DisplayBoard(mineboard, ROW, COL);		
		printf("恭喜你,已经成功排除了所有雷!\n");
		system("pause");
		system('cls');
}

void GameStart(void)
{
	//创建面板
	char MineBoard[ROWS][COLS];//后台操作
	char ShowBoard[ROWS][COLS];//输出展示

	//面板初始化
	InitBoard(MineBoard, ROWS, COLS, '0');
	InitBoard(ShowBoard, ROWS, COLS, '*');

	//埋雷
	SetMine(MineBoard);

	//输出展示
	//DisplayBoard(MineBoard, ROW, COL);
	DisplayBoard(ShowBoard, ROW, COL);

	//开始找雷
	FindMine(MineBoard, ShowBoard);
}

3:最后来看一看代码运行效果

 如果我的分享对你有帮助,那就是对我最大鼓励!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一般清意味……

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值