返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ 情怀游戏扫雷的实现流程详解
  • 867
分享到

C++ 情怀游戏扫雷的实现流程详解

2024-04-02 19:04:59 867人浏览 安东尼
摘要

扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。 不久,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一

扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。 不久,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。 1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在windows3.1系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。

这款游戏的玩法是在一个9*9(初级),16*16(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。

我们今天就来自己写《扫雷》 这个项目并不是很难,今天就和大家从头到尾详细的讲一遍,大家一定要好好看好好学!

行吧,开始了

我们今天用的是Cpp来写,但不是用Windows来创建窗口,而是用他的远房表亲EasyX图形库来创建窗口,因为用图形库会简单很多,刚学C的也可以听懂,而且C/C++不分家,没有什么问题,OK,我们现在开始写代码,今天我就把头文件也分享出来了,主要是教大家如何去调用图形库。(注:没有EasyX图形库的可以去官网下载,也可以进群直接下载) 首先是我们的头文件以及一些宏定义


#include<stdio.h>
#include<graphics.h>//包含图形库头文件
#define ROW 9 //行
#define COL 9 //列  共81个格子
#define MINE_NUM  18//雷的数量
#define IMG_SIZE 40

初始化函数,也是我们的老朋友了


void GameInit()
{
	//1,创建窗口 一行有九张图片每张图片40px,
	initgraph(IMG_SIZE*ROW, IMG_SIZE*COL,SHOWCONSOLE);
	//加载图片(赋值) load加载 第一个参数,存储图片的变量 错误:字符集问题
	for (int i = 0; i < 12; i++)
	{
		char file[20] = "";
		sprintf(file, "./image/%d.jpg", i);
		loadimage(&img[i], file, IMG_SIZE, IMG_SIZE);
	}
	//布雷
	for (int i = 0; i < MINE_NUM; )
	{
		//排除辅助区
		int row = rand() % ROW+1;//0-8  1-9
		int col = rand() % COL+1;
		if (mine[row][col] == 0)
		{
			mine[row][col] = 9;
			i++;
		}
	}
	//雷所在的九宫格,要加1(雷除外)
	for (int i = 1; i < ROW+1; i++)
	{
		for (int k = 1; k < COL+1; k++)
		{
			if (mine[i][k] == 9)
			{
				//遍历雷的九宫格 细心
				for (int a = i - 1; a <= i + 1; a++)
				{
					for (int b = k - 1; b <= k + 1; b++)
					{
						//非雷的格子加1
						if (mine[a][b] != 9)
						{
							mine[a][b]++;
						}
					}
				}
			}
		}
	}
	//加密 开始时全部为掩码图
	for (int i = 1; i < ROW + 1; i++)
	{
		for (int k = 1; k < COL + 1; k++)
		{
			mine[i][k] += 20;
		}
	}
 
}

鼠标信息处理函数


void MouseEvent()
{
	//检测是否有鼠标消息
	if (MouseHit())
	{
		//获取鼠标消息,坐标,左键还是右键
		MOUSEMSG msg = GetMouseMsg();
		//把坐标转化成数组下标
		openr = msg.y / IMG_SIZE+1;
		openc = msg.x / IMG_SIZE+1;
		//判断是左键还是右键
		switch (msg.uMsg)
		{
		case WM_LBUTTONDOWN:
			//如果格子没有打开,就打开格子,否则不做处理
			if (mine[openr][openc] > 9)
			{
				mine[openr][openc] -= 20;
				OpenNull(openr,openc);
				num++;
			}
			break;
		case WM_RBUTTONDOWN:
			//标记
			if (mine[openr][openc] > 9 && mine[openr][openc] <= 29)
			{
				mine[openr][openc] += 20;
			}
			else
			{
				mine[openr][openc] -= 20;
			}
			break;
		}
	}
}

进行递归操作,判断鼠标点击的地方


//递归打开所有空白,以及空白周围的数字
void OpenNull(int row,int col)
{
	//点击的是空白才能打开
	if (mine[row][col] == 0)
	{
		for (int i = row - 1; i <= row + 1; i++)
		{
			for (size_t k = col-1; k <= col+1; k++)
			{
				//如果为空或者不是雷就打开
				if ((mine[i][k] == 20 || mine[i][k] != 29)&& mine[i][k]>9)
				{
					mine[i][k] -= 20;
					num++;
					OpenNull(i, k);
				}
			}
		}
	}
}

游戏的输赢判断函数,注意理清逻辑


void Jude()
{
	//判断输
	if (mine[openr][openc] == 9)
	{
		int isok = MessageBox(GetHWnd(), "是否继续!", "点到雷了", MB_OKCANCEL);
		if (isok == IDOK)
		{
			mine[openr][openc] += 20;
		}
		else
		{
			exit(666);
		}
	}
	//判断赢
	if (num == ROW*COL - MINE_NUM)
	{
		int isok = MessageBox(GetHWnd(), "是否继续!", "点到雷了", MB_OKCANCEL);
		if (isok == IDOK)
		{
			num = 0;
			GameInit();
		}
		else
		{
			exit(666);
		}
	}
}

最后就是我们的主函数了


int main()
{
	GameInit();
	show();
	//循环处理游戏逻辑
	while (1)
	{
		MouseEvent();
		GameDraw();
		Jude();
	}
	
	getchar();
	return 0;
}

经典游戏《扫雷》完成,OK,简单总结一下,代码很简单,逻辑也不难,重要是大家一定要自己动手去做,这是毋庸置疑的,编程没有捷径,只有不断的学习熟练,加强自己的能力,有条件的话找个老师的话效果会更好,我也特意找了一个朋友叫他把一些关于《扫雷》的教学视频发给我,大家可以去我的主页上查看,我也希望下面的视频可以更好的帮助同学们掌握这个项目,好了,希望大家可以在这里得到自己想要的知识以及快乐吧,也希望大家可以给UP主一个关注,非常感谢大家了!!!

点击下方链接观看详细视频讲解
C/c++游戏《扫雷》详细教程
https://www.bilibili.com/video/BV1oF411a7MQ/

到此这篇关于C++ 情怀游戏扫雷的实现流程详解的文章就介绍到这了,更多相关C语言 扫雷内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ 情怀游戏扫雷的实现流程详解

本文链接: https://lsjlt.com/news/157796.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++ 情怀游戏扫雷的实现流程详解
    扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。 不久,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一...
    99+
    2024-04-02
  • C++ 情怀游戏贪吃蛇的实现流程详解
    还记我们童年时的贪吃蛇吗,用“砖头”诺基亚玩的更是经典中的经典,贪食蛇操作简单,可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候,而是开始。那个时候蛇身很短,看上去难度不大,却最...
    99+
    2024-04-02
  • C语言实现扫雷游戏详细流程
    目录前言头文件部分主函数部分(源文件)函数定义(原文件)1.菜单打印2.初始化棋盘3.打印棋盘4.生成地雷5.数雷并赋值给trueboard6.排查雷区7.展开8.判断输赢前言 嘿!...
    99+
    2024-04-02
  • C#实现扫雷游戏
    目录一、实验目的:二、实验要求:三、实验内容:四、实验源代码:五、实验结果:六、总结本文实例为大家分享了C#实现扫雷游戏的具体代码,供大家参考,具体内容如下 一、实验目的: 1、掌握...
    99+
    2024-04-02
  • C语言实现经典扫雷游戏流程
    目录扫雷小游戏简介一、分析与实现1.设计棋盘2.放置雷以及排雷二、扫雷小游戏演示三、源码总结扫雷小游戏简介 想必很多人小时候电脑没网的时候都玩儿过这个经典的小游戏,也都被它折磨过。其...
    99+
    2024-04-02
  • C语言实现扫雷小游戏详解
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏。当用户选择退出时,程序运行结束,当用户选择玩游戏时,将...
    99+
    2024-04-02
  • C语言实现简易扫雷游戏详解
    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 一、想要达到的游戏功能: 大家如果想编写一个游戏,应具备以下的步骤: 1:了解游戏的规则 2:&nbs...
    99+
    2024-04-02
  • C语言编程实现扫雷游戏
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 在我们熟知的扫雷中,我们点击小方块,小方块要么出现数字,要么遇到地雷。我打算,使用数组的方式来完成扫雷游戏...
    99+
    2024-04-02
  • C++实现趣味扫雷游戏
    本文实例为大家分享了C++实现趣味扫雷游戏的具体代码,供大家参考,具体内容如下 流程设计 1.初始化阵列。 2.输入坐标点。 3.选择:挖掘,标记,取消标记,重启,退出游戏。 如果选...
    99+
    2024-04-02
  • C#如何实现扫雷游戏
    今天小编给大家分享一下C#如何实现扫雷游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、实验目的:掌握c#窗体和控件的常...
    99+
    2023-07-02
  • C语言实现扫雷游戏(含注释详解)
    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 前言 一、游戏规则介绍 扫雷是一个十分经典的游戏,一张棋盘中有很多个不确定是雷还是安全区域的格子,当点击之...
    99+
    2024-04-02
  • C语言实现扫雷游戏详解(附源码)
    目录1.游戏的功能 2.游戏实现的基本思路2.1实现菜单给玩家选择2.2初始化棋盘2.3数组大小的问题2.4对棋盘赋值2.5打印棋盘2.6布置雷2.7排查雷3.代码基本实现...
    99+
    2024-04-02
  • C语言扫雷排雷小游戏实现全程
    目录test.cgame.hgame.c详解游戏代码的实现1初化扫雷区2打印扫雷区3 设置雷4 排雷4.1展开一片的功能4.2雷标记功能的实现游戏过程test.c 在这个文件中,我们...
    99+
    2024-04-02
  • 用C语言实现扫雷游戏
    用C语言实现扫雷游戏,因为代码会比较多,所以采用多文件的方式,使代码看起来更好。 一.main.c 在主调函数中首先要提供一个给用户选择的界面,在这里我们假定选择1为开始游戏,0为退...
    99+
    2024-04-02
  • C++控制台实现扫雷游戏
    本文实例为大家分享了C++控制台实现扫雷游戏的具体代码,供大家参考,具体内容如下 花了一下午写出来的控制台扫雷,主要通过修改和打印数组来实现。 主要的问题点: 1.在显示地图的过程中...
    99+
    2024-04-02
  • C++实现简易版扫雷游戏
    目录一、菜单栏二、创建棋盘数组三、初始化棋盘四、打印棋盘五、布置雷六、排查雷七、全部代码总结一、菜单栏 1.先用printf函数制作一个简易版的菜单,并附上选项提示,玩游戏或者退出游...
    99+
    2024-04-02
  • C语言编程怎么实现扫雷游戏
    这篇文章主要讲解了“C语言编程怎么实现扫雷游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言编程怎么实现扫雷游戏”吧!在我们熟知的扫雷中,我们点击小方块,小方块要么出现数字,要么遇到地...
    99+
    2023-06-20
  • 用C语言实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 1. 规则 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷...
    99+
    2024-04-02
  • C语言递归实现扫雷游戏
    前言 首先要实现扫雷原理上同三子棋,都是通过一个二维数组来实现游戏主题功能那么这里有几个值得注意的点 1、初级扫雷我们知道是九乘九数组实现,那么在这里我们创建的是11乘11的数组,目...
    99+
    2024-04-02
  • C语言实现扫雷经典游戏
    C语言实现扫雷游戏,供大家参考,具体内容如下 实现扫雷游戏 与三子棋游戏类似,为了便于后期对于代码的阅读、理解与地图大小和地雷的数量变更,先用#define定义一个标识符表示一个常量...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作