C语言:扫雷游戏

头文件 game.h:

#ifndef __GAME_H__
#define __GAME_H__


#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<stdio.h>



#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10
void InitBoard(char board[ROWS][COLS], int row, int col,char set);
void SetMine(char board[ROWS][COLS], int row, int col);
void PrintBoard(char board[ROWS][COLS], int row, int col);
void FindMine(char mine[ROWS][COLS],
	char show[ROWS][COLS], int row, int col);
int GetMineCount(char mine[ROWS][COLS], int x, int y);
#endif//__GAME_H __

游戏实现模块 game.c:

#include"game.h"


void InitBoard(char board[ROWS][COLS], int row, int col, char set)
{
	/*int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
	for (j= 0; j < col; j++)
	{
	board[i][j] = set;
	}*/
	memset(board, set, row*col*sizeof(board[0][0]));
}
void SetMine(char board[ROWS][COLS], int row, int col)
{
	//1-row
	//1-col
	int x = 0;
	int y = 0;
	int count = EASY_COUNT;
	while (count)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		if (board[x][y] == '0')
		{
			board[x][y] = '1';
			count--;
		}
	}
}
void PrintBoard(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;
	for (i = 0; i <= col; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}
void FindMine(char mine[ROWS][COLS],
	char show[ROWS][COLS], int row, int col)
{

	//1.输入坐标
	//2.判断坐标是否合法
	//①坐标非法
	//②合法
	//3.判断是否为雷
	//①是雷,游戏结束
	//②不是雷,统计周围雷的个数,并记录
	int win = 0;
	while (win<(row*col - EASY_COUNT))
	{
		int x = 0;
		int y = 0;
		printf("请输入要排查的坐标:>");
		scanf_s("%d%d", &x, &y);
		if (x >= 1 && x <= row&&y >= 1 && y <= col)
		{
			//合法
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了!\n");
				PrintBoard(mine, ROW, COL);
				break;
			}
			else
			{
           //统计周围雷的个数
				int count = GetMineCount(mine,x,y);
				show[x][y] = count+'0';//转换为字符1
				PrintBoard(show, ROW, COL);
			}
		}
		else
		{
			printf("坐标非法,请重新输入!\n");
		}
	}
	//
	if (win >= (row*col - EASY_COUNT))
	{
		printf("恭喜你,排雷成功\n");
		PrintBoard(mine, ROW, COL);
	}
}
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';
}

测试模块 test.h:

#include<stdlib.h>
#include"game.h"


void test()
{
//测试游戏的过程

	char mine[ROWS][COLS];//存放雷的信息
	char show[ROWS][COLS];//存放排查到的雷的信息
	InitBoard(mine, ROWS, COLS,'0');
	InitBoard(show, ROWS, COLS,'*');
	//布置雷
	SetMine(mine, ROW, COL);
	PrintBoard(show, ROW, COL);
	PrintBoard(mine, ROW, COL);
	//排雷
	FindMine(mine,show,ROW,COL);
}
int main()
{
	srand((unsigned int)time(NULL));
	test();
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/81135474