女朋友想玩扫雷了该怎么办?(一)

记录一下自己写扫雷的历程
v1.0 图形化界面,但无法自定义难度

1.背景:

  在辛辛苦苦地准备毕业设计的时候~~
  .
  …
  女朋友突然说:“我不想学了!我要玩游戏~”。
  “那你就玩会儿吧”。
  她撒着娇说:“我想玩扫雷,但是我电脑上没有,啷个办嘛?”
  “那要不我给你写一个?但是我还要学…”
   她未等我说完就兴奋地说:“好呀,我等着,我先去玩会儿植物大战僵尸了”。
  .
  …
  旁边传来了 ‘僵尸吃掉了你的脑子’
  …
  我心里暗想“得抓紧写扫雷,不然我就…”

2.准备:

  1. 编程环境:c/c++ 、graphics.h(图形库)、 visual studio
  2. 扫雷图片素材:自己找图片作为素材在这里插入图片描述
  3. 一个好的指导老师(博客,文章,视频等)

3.开始做

3.1 环境准备

visual studio 以及c++这些就不细说了,可自行百度。
graphics.h可以通过下载easyx这个库来得到。
网址链接(很快,340kb左右):https://www.easyx.cn/downloads/
下载好后,运行exe,在你所使用的对应的vs版本下点击安装,弹出“安装成功”即可。

3.2 在visual studio 2017下新建一个win32控制台应用程序。

文件->新建->项目->visualc+±>windows桌面->win32控制台应用程序
自己起一个名字。

3.3 开始撸代码(代码都很简单,细心看就好)

仅贴核心代码,完整代码请到CSDN下载(犒劳一下打工人吧)。

当然以下部分看懂了也写得出来。

3.3.1 游戏main函数部分

主体main函数部分还是比较简单的

int main()
{
	//创建一个大小为ROW*COL的框
	HWND hwnd = initgraph(ROW*SIZE, COL*SIZE, NULL);

	//加载图片 img为IMAGE 类型的数组
	loadimage(&img[0], L"./images/0.jpg", SIZE, SIZE);
	//类似的自己写....
	
	//游戏数据初始化
	GameInit();
	//游戏过程
	while (1) 
	{
		//游戏渲染
		GameDraw();
		//获取每一次点击的结果
		if (PlayGame() == -1) 
		{
			GameDraw();
			MessageBox(hwnd, L"YOU LOSE", L"QAQ", MB_OK);
			break;
		}
		//判定是否雷全部被排完
		if (ROW*COL - NUM == count)
		{
			GameDraw();
			MessageBox(hwnd, L"YOU WIN", L"^O^", MB_OK);
			break;
		}
	}
	//关掉窗口
	closegraph();
	return 0;
}
3.3.2 游戏初始化部分
//初始化函数
void GameInit()
{
	//随机数初始化
	for (int i = 0; i < NUM; )
	{
		int r = rand() % ROW;
		int c = rand() % COL;
		if (mp[r][c] != -1)
		{
			mp[r][c] = -1;
			++i;
		}
	}

	//计算每一个空白格周围雷的格数 遍历实现即可,注意边界
	for (int i = 0; i < ROW; ++i)
	{
		for (int j = 0; j < COL; ++j)
		{
			....
		}
	}
	//简单加密 (就是未翻开时候的值)
	for (int i = 0; i < ROW; ++i)
		for (int j = 0; j < COL; ++j)
			mp[i][j] += 20;
}
3.3.3 游戏渲染
//绘制函数 打印二维数组的所有元素
/*
-1 雷
0-8 正常格子
19-28 未被翻开
>=30 标记
*/
使用到的函数 putimage(x,y,IMAGE);
例如
putimage(i*SIZE, j*SIZE, &img[9]);
3.3.4 点击事件

其中如果点到的格子周围没有雷,那么可以将周围所有的格子都翻开。
很明显这是一个递归过程(OpenZero)

int PlayGame()
{
	//定义一个鼠标消息
	MOUSEMSG msg = { 0 };
	int r, c;

	while (1)
	{
		msg = GetMouseMsg();
		//msg.x msg.y为鼠标坐标可以此来判断
		switch (msg.uMsg)
		{
		case WM_LBUTTONDOWN://左键翻开图片
			.....
		case WM_RBUTTONDOWN://右键标记图片
			....
		}
	}
}

4.完成

最终成果:
在这里插入图片描述

5.后续发展

  将exe发给她后…
  “还不错,我先去玩了~”
  暗想:“终于搞完了,得抓紧做毕设了QAQ”
  我又开始看论文了
  …
  …
  …
  没过多久,她又蹦跳着过来说“我觉得…”
  我 :~~~
  
  
  
  
  

欢迎评论与指正!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值