C语言实现简易扫雷

话不多说直接上代码

main.c

#include"MineClearance.h"
int main() 
{
	int a = 0;
	char board[rows][cols] = { NULL };
	char showboard[rows][cols] = { NULL };

	srand((unsigned int)time(NULL));
	do 
	{
		Menu();
		printf("请输入数字开始游戏=》");
		scanf("%d", &a);
		switch (a)
		{
		case 1:
			Game(board,showboard);
			break;
		case 2:
			printf("游戏退出\n");
			break;
		default:
			printf("输入有误,请重新输入");
			break;
		}
	} while (0);
	return 0;
}

MineClearance.h

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define rows 11
#define cols 11



void Menu();
void Print_(int rrr);
void Game(char board[rows][cols], char showboard[rows][cols]);
void PrintBoard(char board[rows][cols]);
void PutMine(char board[rows][cols]);

void MineRoundAdd(char board[rows][cols]);
void mineroundadd(char* mine);

int FindMine(char board[rows][cols], char showboard[rows][cols]);

MineClearance.c

#include"MineClearance.h"
void Menu() 
{
	printf("-------------------\n");
	printf("--- 1.Play Game ---\n");
	printf("--- 2.Exit --------\n");
	printf("-------------------\n");
}
void Print_(int rrr)
{
	int a = 0;
	for (a = 0; a <= rrr+1; a++)
	{
		if (a == 0)
		{
			printf("|");
		}
		else
		{
			printf("---|");
		}
	}
}
void PrintBoard(char board[rows][cols])
{
	int i = 0;
	for (i=-1;i<rows-2;i++) 
	{
		Print_(rows-2);
		printf("\n");
		int j = 0;
		for (j=-1;j<cols-2;j++) 
		{
			if (j == -1 && i != -1)
			{
				printf("| %d ", i + 1);
			}
			if (i == -1) 
			{
				printf("| %d ",j+1);

			}
			if (i!=(-1)&&j!=(-1))
			{
				if (board[i+1][j+1]==NULL) 
				{
					printf("| - ");
				}
				else
				{
					printf("| %c ", board[i+1][j+1]);
				}
			}
		}
		printf("|\n");
	}
	Print_(rows-2);
	printf("\n");
}
void ShowBoard(char board[rows][cols])
{
	int i = 0;
	for (i = -1; i < rows - 2; i++)
	{
		Print_(rows - 2);
		printf("\n");
		int j = 0;
		for (j = -1; j < cols - 2; j++)
		{
			if (j == -1 && i != -1)
			{
				printf("| %d ", i + 1);
			}
			if (i == -1)
			{
				printf("| %d ", j + 1);

			}
			if (i != (-1) && j != (-1))
			{
				if (board[i + 1][j + 1] == NULL)
				{
					printf("| - ");
				}
				else
				{
					printf("| %c ", board[i + 1][j + 1]);
				}
			}
		}
		printf("|\n");
	}
	Print_(rows - 2);
	printf("\n");
}
void PutMine(char board[rows][cols])
{
	int count = 0;
	for (count = 0; count < 10; count++)
	{
		int row = (rand() % 9) + 1;
		int col = (rand() % 9) + 1;

		if (board[row][col]!='*') 
		{
			board[row][col] = '*';
		}
	}
}
void MineRoundAdd(char board[rows][cols]) 
{
	int i = 0;
	for (i=0;i<rows;i++) 
	{
		int j = 0;
		for (j=0;j<cols;j++) 
		{
			if (board[i][j]=='*')
			{
				mineroundadd(&board[i][j]);
			}
		}
	}
}
void mineroundadd(char* mine) 
{
	if (*(mine-1)==NULL)
	{
		*(mine - 1) = 48;
	}
	if (*(mine + 1) == NULL)
	{
		*(mine + 1) = 48;
	}
	if (*((mine - rows) - 1) == NULL)
	{
		*((mine - rows) - 1) = 48;
	}
	if (*(mine - rows) == NULL)
	{
		*(mine - rows) = 48;
	}
	if (*((mine - rows) + 1) == NULL)
	{
		*((mine - rows) + 1) = 48;
	}

	if (*((mine + rows) - 1) == NULL)
	{
		*((mine + rows) - 1) = 48;
	}
	if (*(mine + rows) == NULL)
	{
		*(mine + rows) = 48;
	}
	if (*((mine + rows) + 1) == NULL)
	{
		*((mine + rows) + 1) = 48;
	}
	if (*(mine - 1) != 42)
	{
		*(mine - 1) += 1;
	}
	
	if (*(mine + 1) != 42)
	{
		*(mine + 1) += 1;
	}
	
	if (*((mine - rows) - 1) != 42)
	{
		*((mine - rows) - 1) += 1;
	}
	if (*(mine - rows) != 42) 
	{
		*(mine - rows) += 1;
	}
	if (*((mine - rows) + 1) != 42)
	{
		*((mine - rows) + 1) += 1;
	}
	if (*((mine + rows) - 1) != 42)
	{
		*((mine + rows) - 1) += 1;
	}
	if (*(mine + rows) != 42)
	{
		*(mine + rows) += 1;
	}
	if (*((mine + rows) + 1) != 42)
	{
		*((mine + rows) + 1) += 1;
	}
}
int FindMine(char board[rows][cols], char showboard[rows][cols])
{
	int PlayerRow = 0;
	int PlayerCol = 0;
	printf("输入坐标,进行排雷 =》");
	scanf("%d %d", &PlayerRow, &PlayerCol);
	if (board[PlayerRow][PlayerCol]=='*')
	{
		printf("踩雷咯,Game Over\n");
		PrintBoard(board);
		return 0;
	}
	else
	{
		if (board[PlayerRow][PlayerCol]==NULL)
		{
			showboard[PlayerRow][PlayerCol] = 32;
		}
		else
		{
			showboard[PlayerRow][PlayerCol] = board[PlayerRow][PlayerCol];
		}
		return 1;
	}
}

void Game(char board[rows][cols],char showboard[rows][cols])
{
	printf("游戏开始\n");
	PutMine(board);
	MineRoundAdd(board);	
	PrintBoard(showboard);
	while (FindMine(board, showboard))
	{
		ShowBoard(showboard);
	}
	


}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麗o麗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值