扫雷小游戏

利用vs 2019和easyx图形库完成扫雷小游戏

需要的工具:
  1. win 10
  2. vs 2019
  3. easyx

C++源码:

#include<iostream>
#include<graphics.h>
#include<time.h>
using namespace std;

int map[15][15];
int Temp_map[15][15];
int Boom_x[15];
int Boom_y[15];
int Boomnum = 15;
IMAGE image;
void Initmap()
{
	for (size_t i = 0; i < 15; i++)
	{
		for (size_t j = 0; j < 15; j++)
		{
			map[i][j] = 0;

			Temp_map[i][j] = 0;

		}
	}
}
void InitBoom()
{
	int x = 0;
	int y = 0;

	srand((unsigned int)time(NULL));

	for (size_t i = 0; i < 15; i++)
	{
		x = rand() % 15;
		y = rand() % 15;
		if (10 == map[x][y])
		{
			x = rand() % 15;
			y = rand() % 15;
		}
		Boom_x[i] = x;
		Boom_y[i] = y;
		map[x][y] = 10;
	}

	for (size_t i = 0; i < 15; i++)
	{
		for (size_t j = 0; j < 15; j++)
		{
			if (10 == map[i][j])
			{
				continue;
			}
			if (i != 0 && j != 0 && 10 == map[i - 1][j - 1])
			{
				map[i][j] += 1;
			}
			if (i != 0 && 10 == map[i - 1][j])
			{
				map[i][j] += 1;
			}
			if (j != 0 && 10 == map[i][j - 1])
			{
				map[i][j] += 1;
			}
			if (i < 14 && 10 == map[i + 1][j])
			{
				map[i][j] += 1;
			}
			if (j < 14 && 10 == map[i][j + 1])
			{
				map[i][j] += 1;
			}
			if (i < 14 && j < 14 && 10 == map[i + 1][j + 1])
			{
				map[i][j] += 1;
			}
			if (i != 0 && j < 14 && 10 == map[i - 1][j + 1])
			{
				map[i][j] += 1;
			}
			if (i < 14 && j != 0 && 10 == map[i + 1][j - 1])
			{
				map[i][j] += 1;
			}
		}
	}
}
void Coutmap()
{
	for (size_t i = 0; i < 15; i++)
	{
		for (size_t j = 0; j < 15; j++)
		{
			cout << map[i][j] << " ";
		}
		cout << endl;
	}
}
void IniteasyxMap()
{
	loadimage(&image, "back.png", 600, 600);
	putimage(0, 0, &image);

	for (size_t i = 0; i < 15; i++)
	{
		for (size_t j = 0; j < 15; j++)
		{
			outtextxy(j * 40 + 11, i * 40 + 11, "*");
		}
	}
}
void MouseEvent()
{
	MOUSEMSG msg = GetMouseMsg();
	setfillcolor(BLACK);
	int L_y = msg.x / 40;
	int L_x = msg.y / 40;

	if (msg.uMsg == WM_LBUTTONDOWN)
	{
		if (map[L_x][L_y] == 9)
		{
			return;
		}

		if (map[L_x][L_y] == 10)
		{
			HWND hwnd = GetHWnd();

			MessageBox(hwnd, "You lose", "Over", 0);
		}
		else
		{
			if (0 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "0");
				map[L_x][L_y] = 11;
			}
			if (1 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "1");
				map[L_x][L_y] = 11;
			}
			if (2 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "2");
				map[L_x][L_y] = 11;
			}
			if (3 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "3");
				map[L_x][L_y] = 11;
			}
			if (4 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "4");
				map[L_x][L_y] = 11;
			}
			if (5 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "5");
				map[L_x][L_y] = 11;
			}
			if (6 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "6");
				map[L_x][L_y] = 11;
			}
			if (7 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "7");
				map[L_x][L_y] = 11;
			}
			if (8 == map[L_x][L_y])
			{
				fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);
				outtextxy(L_y * 40 + 11, L_x * 40 + 11, "8");
				map[L_x][L_y] = 11;
			}
		}
	}

	if (msg.uMsg == WM_RBUTTONDOWN)
	{
		if (map[L_x][L_y] == 11)
		{
			return;
		}
		if (map[L_x][L_y] == 10) 
		{
			Boomnum -= 1;
		}
		if (map[L_x][L_y] == 9)
		{
			if (Temp_map[L_x][L_y] == 10) 
			{
				Boomnum += 1;
			}
			setfillcolor(RGB(192, 192, 192));

			map[L_x][L_y] = Temp_map[L_x][L_y];

			fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);

			outtextxy(L_y * 40 + 11, L_x * 40 + 11, "*");

			return;
		}

		Temp_map[L_x][L_y] = map[L_x][L_y];

		map[L_x][L_y] = 9;

		fillrectangle(L_y * 40, L_x * 40, (L_y + 1) * 40, (L_x + 1) * 40);

		outtextxy(L_y * 40 + 11, L_x * 40 + 11, "!!!");
	}
}
bool JudgeOver()
{
	for (size_t i = 0; i < 15; i++)
	{
		if (map[Boom_x[i]][Boom_y[i]] == 9)
		{
			Boomnum -= 1;
		}
	}

	if (Boomnum == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}
void StartGame()
{
	initgraph(600, 600, 1);
	Initmap();
	InitBoom();
	Coutmap();
	IniteasyxMap();

	while (1)
	{
		MouseEvent();

		if (Boomnum == 0) 
		{
			HWND  hwnd = GetHWnd();

			MessageBox(hwnd,"You win","Over",MB_OK);

			return;
		}
	}
}

int main()
{
	StartGame();

	system("pause");
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

T h a t

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

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

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

打赏作者

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

抵扣说明:

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

余额充值