扫雷小游戏

#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string.h>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <deque>
#include <queue>
#include <map>
#include <set>
#include <windows.h>
#define MaxMine 2
#define ROW 11
#define COL 11
using namespace std;
const int N = 15;
int mine[N][N];
char show[N][N];
void init()
{
	int x, y;
	int count = MaxMine;
	srand((unsigned)time(NULL));
	while (count)
	{
		x = rand() % (ROW - 2) + 1;
		y = rand() % (COL - 2) + 1;
		if (mine[x][y] == 0)
		{
			mine[x][y] = -1;
			count--;
		}
	}
	for (int i = 1; i < ROW - 1; i++)
		for (int j = 1; j < COL - 1; j++)
		{
			if (mine[i][j] != -1)
			{
				if (mine[i - 1][j - 1] == -1)
					mine[i][j]++;
				if (mine[i - 1][j] == -1)
					mine[i][j]++;
				if (mine[i - 1][j + 1] == -1)
					mine[i][j]++;
				if (mine[i][j - 1] == -1)
					mine[i][j]++;
				if (mine[i][j + 1] == -1)
					mine[i][j]++;
				if (mine[i + 1][j - 1] == -1)
					mine[i][j]++;
				if (mine[i + 1][j] == -1)
					mine[i][j]++;
				if (mine[i + 1][j + 1] == -1)
					mine[i][j]++;
			}
		}
	for (int i = 1; i < ROW - 1; i++)
		for (int j = 1; j < COL - 1; j++)
			show[i][j] = '*';
}
void color(int m)
{
	HANDLE consolehend;
	consolehend = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(consolehend, m);
}
void display_board()
{
	int i, j;
	printf("  ");
	color(2);
	for (i = 1; i < COL - 1; i++)
		printf(" %d", i);
	printf("\n");
	for (i = 1; i < ROW - 1; i++)
	{
		color(2);
		printf("%d ", i);
		for (j = 1; j < COL - 1; j++)
		{
			color(8);
			if (show[i][j] == '*')
				printf("■");
			else if (show[i][j] == 'o')
				printf("●");
			else if (show[i][j] == '0')
				printf("  ");
			else if (show[i][j] >= '1' && show[i][j] <= '8')
			{
				int q = show[i][j] - '0';
				color(q);
				printf(" %d", q);
			}
		}
		printf("\n");
	}
}
void get_empty(int x, int y)
{
	if (x < 1 || x>9 || y < 1 || y>9)
		return;
	if (show[x][y] != '*')
		return;
	show[x][y] = mine[x][y] + '0';
	if (mine[x][y] != 0)
		return;
	get_empty(x + 1, y);
	get_empty(x - 1, y);
	get_empty(x, y + 1);
	get_empty(x, y - 1);
}
void mine_sweep(int x, int y)
{
	if (mine[x][y] == -1)
		show[x][y] = 'o';
	else if (mine[x][y] >= 1 && mine[x][y] <= 8)
		show[x][y] = mine[x][y] + '0';
	else if (mine[x][y] == 0)
		get_empty(x, y);
} 
int main()
{
	init();
	display_board();
	printf("输入行列信息,空格间隔:");
	int a, b;
	int res = 0;
	while (~scanf("%d%d", &a, &b))
	{
		if (mine[a][b] == -1)
		{
			res = 1;
			mine_sweep(a, b);
			display_board();
			break;
		}
		mine_sweep(a, b);
		display_board();
		int sum = 0;
		for (int i = 1; i < ROW - 1; i++)
			for (int j = 1; j < COL - 1; j++)
				if (show[i][j] == '*')
					sum++;
		if (sum == MaxMine)
		{
			res = 2;
			display_board();
			break;
		}
		color(7);
		printf("输入行列信息,空格间隔:");
	}
	color(7);
	if (res == 1) printf("你输了!");
	else if (res == 2) printf("你赢了!");
	return 0;
}

MaxMine代表雷数,可以任意修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值