C语言实现六边形扫雷游戏的示例代码

目录
  • 程序简介
  • 程序运行展示
  • 完整源代码

程序简介

六边形扫雷,寻宝模式,稍稍介绍一下。

他也是要把所有安全的地方点出来。

他没有扫雷模式的消零算法。每一个安全的点都需要单独挖出来,一次显示一个格子。

添加了生命值的概念,也就是说存在一定的容错。

显示的数字有别于扫雷模式。点击宝藏点,会显示周围宝藏点数量,绿色;点击地雷,会显示周围地雷数量,黑色。注意,这个数字不包括自己,显示的范围自然就是 0~6 了。点击地雷会减生命值,生命值归零则结束。

所以雷和宝藏都是有价值的,都是能给准确信息的。

我能给一个参考难度:占总格子数 40%的地雷,占总地雷数 50 %的生命值。

程序运行展示

完整源代码

// 程序:六边形扫雷:寻宝模式
// 编译环境:Visual C++ 2010,EasyX_20211109
// 更多好玩的游戏源码加我Q群:724050348

# include <math.h>
# include <graphics.h>
# include <string>
# include <time.h>

static double pi = acos (-1.0);			// 圆周率 π
static HWND hOut;						// 画布

// 定义一个结构体,按钮
struct Node1
{
	int posx1, posy1, posx2, posy2;		// 坐标
	LPTSTR text;						// 文字
	int mod;							// 状态
};

// 定义一个结构体,六边形格子
struct Node2
{
	int i, j, k;						// 特征值
	int mod_life;						// 翻开
	int mod_mine;						// 雷
	int mod_flag;						// 标记
	int posx, posy;						// 坐标
	int num_mine;						// 周围雷数
	int num_peace;						// 周围空地块
};

// 定义一个类
class Gary
{
public:
	void carry ();						// 主进程
	void initialization ();				// 初始化
	void draw_scene ();					// 绘制界面函数
	void draw_box (int num_box);		// 绘制格子
	void draw_flag (int num_box);		// 绘制标记
	void draw_num (int num_box, int num);	// 绘制数字
	void move ();						// 窗口主视角
	void create ();						// 地雷生成
	void check_over ();					// 结束判定

	int num_button;						// 按钮数量参数
	int exit_carry;						// 主循函数控制参数
	int exit_move;						// 开始界面控制参数
	int exit_game;						// 游戏进行控制参数
	int num_life;						// 生命值
	int num_size;						// 边长
	int num_mine;						// 总雷数
	int num_box;						// 总地块数
	int num_flag;						// 标记数
	COLORREF color_text[2];				// 按钮绘制填充
	Node1 boxm[30];						// 按钮,预制 30 个
	Node2 box[1000];					// 地块
};

// 标记绘制函数
void Gary::draw_flag (int num_box)
{
	setlinestyle (PS_SOLID, 1);
	setlinecolor (BLACK);
	line (box[num_box].posx + 2, box[num_box].posy + 7, box[num_box].posx + 2, box[num_box].posy - 7);
	setfillcolor (LIGHTRED);
	setlinecolor (LIGHTRED);
	fillrectangle (box[num_box].posx - 7 + 2, box[num_box].posy - 7, box[num_box].posx + 2, box[num_box].posy - 1);
}

// 数字绘制函数
void Gary::draw_num (int num_box, int num)
{
	int i;
	// 画六边形,格子处于点击后状态
	setfillcolor (RGB (170, 170, 170));
	setlinecolor (RGB (85, 85, 85));
	POINT pts[6];
	setlinestyle (PS_SOLID, 1);
	for (i = 0; i < 6; i++)
	{
		pts[i].x = long(box[num_box].posx + 14.0 * cos (60.0 * double (i) * pi / 180.0));
		pts[i].y = long(box[num_box].posy + 14.0 * sin (60.0 * double (i) * pi / 180.0));
	}
	fillpolygon (pts, 6);

	// 数字绘制
	TCHAR s[15];
	settextstyle (20, 0, _T ("Consolas"));
	_stprintf_s (s, _T ("%0.1d"), num);
	outtextxy (box[num_box].posx - 5, box[num_box].posy - 10, s);
}

// 场景绘制函数
void Gary::draw_scene ()
{
	TCHAR s[15];
	int i, j;
	setlinecolor (BLACK);
	setfillcolor (WHITE);
	setlinestyle (PS_SOLID, 1);
	// 主界面
	fillrectangle (401, 0, 650, 400);
	// 根据按钮数量绘制
	settextcolor (BLACK);
	for (i = 0; i < num_button; i++)
	{
		setfillcolor (color_text[boxm[i].mod]);
		setbkcolor (color_text[boxm[i].mod]);
		// 边框
		fillrectangle (boxm[i].posx1, boxm[i].posy1, boxm[i].posx2, boxm[i].posy2);
		// 文字
		outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + 4, boxm[i].text);
	}

	// 设置参数
	setbkcolor (WHITE);
	settextcolor (BLACK);
	setlinecolor (BLACK);

	// 变量绘制
	j = 25;
	// 生命值
	i = 1;
	setbkcolor (color_text[boxm[i].mod]);
	_stprintf_s (s, _T ("%0.1d"), num_life);
	outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + j, s);
	// 边长
	i = 2;
	setbkcolor (color_text[boxm[i].mod]);
	_stprintf_s (s, _T ("%0.1d"), num_size);
	outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + j, s);
	// 总地雷数
	i = 3;
	setbkcolor (color_text[boxm[i].mod]);
	_stprintf_s (s, _T ("%0.1d"), num_mine);
	outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + j, s);
	// 格子
	i = 4;
	setbkcolor (color_text[boxm[i].mod]);
	_stprintf_s (s, _T ("%0.1d"), num_box);
	outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + j, s);
	// 标记数
	i = 5;
	setbkcolor (color_text[boxm[i].mod]);
	_stprintf_s (s, _T ("%0.1d"), num_flag);
	outtextxy (boxm[i].posx1 + (boxm[i].posx2 - boxm[i].posx1) / 2 - textwidth (boxm[i].text) / 2, boxm[i].posy1 + j, s);

	FlushBatchDraw ();
}

// 地雷生成函数
void Gary::create ()
{
	int i, j;
	// 设置雷
	for (i = 0; i < num_mine; i++)
	{
		// 随机
		j = rand () % 1000;
		while (box[j].mod_mine == 1 || box[j].mod_life == 1)
		{
			// 随机
			j = rand () % 1000;
		}
		// 是雷
		box[j].mod_mine = 1;
	}
	// 周边雷数统计
	// 遍历
	for (i = 0; i <= 888; i++)
	{
		if (box[i].mod_life == 0)
		{
			// 遍历
			for (j = 0; j <= 999; j++)
			{
				// 排除自己
				if (j != i && box[j].mod_life == 0)
				{
					// 周围六个
					if ((box[j].posx - box[i].posx) * (box[j].posx - box[i].posx) + (box[j].posy - box[i].posy) * (box[j].posy - box[i].posy) <= 900)
					{
						// 是雷
						if (box[j].mod_mine == 1)
						{
							// 周边雷数参数加一
							box[i].num_mine++;
						}
						// 不是雷
						else if (box[j].mod_mine == 0)
						{
							// 周边安全数参数加一
							box[i].num_peace++;
						}
					}
				}
			}
		}
	}
}

// 结束判断函数
void Gary::check_over ()
{
	int i, k;
	k = 0;
	for (i = 0; i <= 888; i++)
	{
		// 每有一个翻开且不是雷的点,则加一
		if (box[i].mod_mine == 0 && box[i].mod_life == 1)
		{
			k++;
		}
	}
	// 全翻开则结束
	if (k == num_box - num_mine)
	{
		// 将所有未翻开雷做上标记
		for (i = 0; i <= 888; i++)
		{
			if (box[i].mod_mine == 1 && box[i].mod_life == 0)
			{
				draw_flag (i);
			}
		}
		// 胜利标志:笑脸
		setfillcolor (WHITE);
		setlinecolor (WHITE);
		fillrectangle (50, 20, 75, 45);
		settextstyle (30, 0, _T ("Wingdings"));
		setbkmode (TRANSPARENT);
		settextcolor (BLACK);
		outtextxy (50, 20, 0x4A);
		setbkmode (OPAQUE);
		settextstyle (20, 0, _T ("Consolas"));
		// 结束变化
		exit_game = 1;
		boxm[1].mod = 0;
		boxm[2].mod = 0;
		boxm[3].mod = 0;
		boxm[6].mod = 0;
		boxm[7].mod = 1;
		num_flag = 0;
		// 绘制
		draw_scene ();
	}
}

// 格子绘制函数
void Gary::draw_box (int num_box)
{
	int i;
	int posx, posy;

	// 六边形绘制
	posx = box[num_box].posx;
	posy = box[num_box].posy;

	POINT pts[6];
	setlinestyle (PS_SOLID, 2);
	// 背景色
	setfillcolor (RGB (255, 255, 255));
	for (i = 0; i < 6; i++)
	{
		pts[i].x = long(posx + 14.0 * cos (60.0 * double (i) * pi / 180.0));
		pts[i].y = long(posy + 14.0 * sin (60.0 * double (i) * pi / 180.0));
	}
	solidpolygon (pts, 6);
	// 灰边
	setlinecolor (RGB (85, 85, 85));
	line (pts[0].x, pts[0].y, pts[1].x, pts[1].y);
	line (pts[5].x, pts[5].y, pts[0].x, pts[0].y);
	line (pts[1].x, pts[1].y, pts[2].x, pts[2].y);
	// 前景色
	setfillcolor (RGB (170, 170, 170));
	for (i = 0; i < 6; i++)
	{
		pts[i].x = long(posx + 12.0 * cos (60.0 * double (i) * pi / 180.0));
		pts[i].y = long(posy + 12.0 * sin (60.0 * double (i) * pi / 180.0));
	}
	solidpolygon (pts, 6);
	FlushBatchDraw ();
}

// 初始化函数
void Gary::initialization ()
{
	int i, j, k, t;
	// 随机初始化
	srand ((unsigned)time (NULL));
	// 颜色初始化
	color_text[0] = WHITE;
	color_text[1] = RGB (170, 170, 170);

	// 按钮的初始化
	num_button = 10;

	// 坐标
	for (i = 0; i < 10; i++)
	{
		boxm[i].posx1 = 410 + 120 * (i % 2);
		boxm[i].posy1 = 25 + 75 * (i / 2);
		boxm[i].posx2 = 520 + 120 * (i % 2);
		boxm[i].posy2 = 75 + 75 * (i / 2);
	}

	// 内容
	boxm[0].text = _T ("寻宝模式");	boxm[1].text = _T ("生命值");
	boxm[2].text = _T ("地图边长");	boxm[3].text = _T ("总地雷数");
	boxm[4].text = _T ("总地块数");	boxm[5].text = _T ("已标记数");
	boxm[6].text = _T ("开始");		boxm[7].text = _T ("重置");
	boxm[8].text = _T ("截图");		boxm[9].text = _T ("退出");

	// 状态
	boxm[0].mod = 1;
	boxm[1].mod = 1;
	boxm[2].mod = 1;
	boxm[3].mod = 1;
	boxm[4].mod = 1;
	boxm[5].mod = 1;
	boxm[6].mod = 1;
	boxm[7].mod = 0;
	boxm[8].mod = 0;
	boxm[9].mod = 0;

	num_box = 3 * num_size * (num_size - 1) + 1;
	num_flag = 0;

	// 绘制参数初始化
	setlinecolor (BLACK);
	setlinestyle (PS_SOLID, 1);
	settextstyle (20, 0, _T ("Consolas"));
	// 第一次绘制
	draw_scene ();

	// 重置
	setfillcolor (WHITE);
	fillrectangle (0, 0, 400, 400);

	// 平静脸
	setfillcolor (WHITE);
	setlinecolor (WHITE);
	fillrectangle (50, 20, 75, 45);
	settextstyle (30, 0, _T ("Wingdings"));
	setbkmode (TRANSPARENT);
	settextcolor (BLACK);
	outtextxy (50, 20, 0x4B);
	setbkmode (OPAQUE);
	settextstyle (20, 0, _T ("Consolas"));

	// 格子初始化
	for (t = 0; t <= 999; t++)
	{
		// 已翻开
		box[t].mod_life = 1;
		// 城墙
		box[t].mod_mine = 2;
		// 坐标,点不到
		box[t].posx = -200;
		box[t].posy = -200;
	}

	// 初始化
	for (i = 0; i < num_size; i++)
	{
		for (j = 0; j < num_size; j++)
		{
			for (k = 0; k < num_size; k++)
			{
				// 特征值至少一个为零
				if (i == 0 || j == 0 || k == 0)
				{
					// 编号
					t = i * 100 + j * 10 + k;
					// 特征值
					box[t].i = i;
					box[t].j = j;
					box[t].k = k;
					// 未翻开
					box[t].mod_life = 0;
					// 不是雷
					box[t].mod_mine = 0;
					// 未标记
					box[t].mod_flag = 0;
					// 坐标
					box[t].posx = 200 + 22 * (j - k);
					box[t].posy = 200 - 25 * i + 13 * (j + k);
					// 周围雷数初始化
					box[t].num_mine = 0;
					box[t].num_peace = 0;
					// 绘制地块
					draw_box (t);
				}
			}
		}
	}
	// 地雷生成函数
	create ();
}

// 窗口主视角函数,获取用户操作
void Gary::move ()
{
	// 鼠标定义
	ExMessage m;
	TCHAR ss[15];
	int i, t;
	exit_move = 0;
	exit_game = 0;
	while (exit_move == 0)
	{
		// 鼠标信息
		if (peekmessage (&m, EM_MOUSE | EM_KEY))
		{
			// 左键单击判断
			if (m.message == WM_LBUTTONDOWN)
			{
				// 判断是否点击了格子
				if (m.x > 0 && m.y > 0 && m.x < 400 && m.y < 400 && exit_game == 0)
				{
					for (t = 0; t <= 888; t++)
					{
						// 成功点击未标记的空格子
						if ((m.x - box[t].posx) * (m.x - box[t].posx) + (m.y - box[t].posy) * (m.y - box[t].posy) <= 144 && box[t].mod_life == 0 && box[t].mod_flag == 0)
						{
							// 点击的格子不是雷
							if (box[t].mod_mine == 0)
							{
								// 绿色,安全,绘制
								settextcolor (LIGHTGREEN);
								draw_num (t, box[t].num_peace);
								// 改为翻开
								box[t].mod_life = 1;
							}
							// 点击的格子雷
							else if (box[t].mod_mine == 1)
							{
								// 扣除生命值
								num_life--;
								// 黑色,危险,绘制
								settextcolor (BLACK);
								draw_num (t, box[t].num_mine);
								// 改为翻开
								box[t].mod_life = 1;
								// 生命值减为零
								if (num_life <= 0)
								{
									// 失败标志:哭脸
									setfillcolor (WHITE);
									setlinecolor (WHITE);
									fillrectangle (50, 20, 75, 45);
									settextstyle (30, 0, _T ("Wingdings"));
									setbkmode (TRANSPARENT);
									settextcolor (BLACK);
									outtextxy (50, 20, 0x4C);
									setbkmode (OPAQUE);
									settextstyle (20, 0, _T ("Consolas"));
									// 失败
									exit_game = 1;
									boxm[1].mod = 0;
									boxm[2].mod = 0;
									boxm[3].mod = 0;
									boxm[6].mod = 0;
									boxm[7].mod = 1;
									num_flag = 0;
								}
								// 绘制
								draw_scene ();
							}
							// 成功结束判断
							check_over ();
							break;
						}
					}
				}

				// 判断是否点击了可点击按钮
				for (i = 0; i < num_button; i++)
				{
					if (m.x > boxm[i].posx1 && m.y > boxm[i].posy1 && m.x < boxm[i].posx2 && m.y < boxm[i].posy2 && boxm[i].mod == 0)
					{
						break;
					}
				}

				// 点击矩形按钮
				switch (i)
				{
				// 生命值:num_life
				case 1:
				{
					// 输入
					InputBox (ss, 10, _T ("输入生命值(1 ~ 999)"));
					_stscanf_s (ss, _T ("%d"), &i);
					if (i > 0 && i <= 999)
					{
						num_life = i;
					}
					else { MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK); }
					// 绘制
					draw_scene ();
					break;
				}
				// 地图边长:num_size
				case 2:
				{
					// 输入
					InputBox (ss, 10, _T ("输入边长(2 ~ 8)"));
					_stscanf_s (ss, _T ("%d"), &i);
					if (i > 1 && i <= 8)
					{
						num_size = i;
						num_box = 3 * num_size * (num_size - 1) + 1;
					}
					else { MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK); }
					// 绘制
					draw_scene ();
					break;
				}
				// 总地雷数:num_mine
				case 3:
				{
					InputBox (ss, 10, _T ("输入地雷数(1 ~ 总格子数)"));
					_stscanf_s (ss, _T ("%d"), &i);
					if (i > 0 && i < num_box)
					{
						num_mine = i;
					}
					else { MessageBox (hOut, _T ("输入错误,不在范围内"), _T ("来自小豆子的提醒"), MB_OK); }
					// 绘制
					draw_scene ();
					break;
				}
				// 开始
				case 6:
				{
					num_box = 3 * num_size * (num_size - 1) + 1;
					if (num_mine < num_box && num_life > 0)
					{
						exit_game = 0;
						// 初始化
						initialization ();
					}
					else
					{
						MessageBox (hOut, _T ("请将雷数修改为小于格子数或将生命值修改为大于零"), _T ("来自小豆子的提醒"), MB_OK);
					}
					break;
				}
				// 重置
				case 7:
				{
					// 结束游戏进程,进入准备阶段
					if (exit_game == 0)
					{
						exit_game = 1;
						boxm[1].mod = 0;
						boxm[2].mod = 0;
						boxm[3].mod = 0;
						boxm[6].mod = 0;
						boxm[7].mod = 1;
						num_flag = 0;
						// 绘制
						draw_scene ();
					}
					break;
				}
				// 截图
				case 8:
				{
					saveimage (_T ("image.png"));
					break;
				}
				// 退出
				case 9:
				{
					exit_game = 1;
					exit_move = 1;
					exit_carry = 1;
					break;
				}
				default:break;
				}
			}
			// 右键,且处于游戏进行状态
			else if (m.message == WM_RBUTTONDOWN && exit_game == 0)
			{
				for (t = 0; t <= 888; t++)
				{
					// 成功点击空格子
					if ((m.x - box[t].posx) * (m.x - box[t].posx) + (m.y - box[t].posy) * (m.y - box[t].posy) <= 144 && box[t].mod_life == 0)
					{
						// 标记状态转换
						box[t].mod_flag = (box[t].mod_flag == 0 ? 1 : 0);
						// 绘制
						draw_box (t);
						// 画小旗子
						if (box[t].mod_flag == 1)
						{
							draw_flag (t);
							num_flag++;
						}
						else
						{
							num_flag--;
						}
						// 绘制
						draw_scene ();
					}
				}
			}
		}
	}
}

// 主进程
void Gary::carry ()
{
	// 窗口定义
	hOut = initgraph (651, 401);
	SetWindowText (hOut, _T ("六边形扫雷:扫雷模式"));
	// 参数初始化
	num_size = 5;
	num_mine = 10;
	num_life = 3;
	// 背景绘制
	setbkcolor (WHITE);
	cleardevice ();
	// 进程控制
	exit_carry = 0;
	while (exit_carry == 0)
	{
		initialization ();
		move ();
	}
	closegraph ();
}

// 主函数
int main (void)
{
	Gary G;
	G.carry ();
	return 0;
}

到此这篇关于C语言实现六边形扫雷游戏的示例代码的文章就介绍到这了,更多相关C语言六边形扫雷游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言实现经典扫雷小游戏完整代码(递归展开 + 选择标记)

    目录 游戏介绍 游戏整体框架 游戏具体功能及实现 1.雷盘的定义 2.雷盘的初始化 3.布置雷 4.排查雷 5.递归式展开一片 6.获取周围雷的个数 7.标记特定位置 8.打印雷盘 游戏完整代码 1.test.c 2.game.h 3.game.c 游戏效果展示 大家好,今天我们将一起用C语言实现一个经典小游戏 – 扫雷,Let is go ! 游戏介绍 扫雷游戏相信大家都玩过,上图就是一个网页版的扫雷,它的规则是玩家选择一个方格,若此方格没有地雷,那么该方格会显示与它相邻的八个方格中雷的个数,

  • C语言实现扫雷小游戏完整算法详解(附完整代码)

    目录 前言 1.算法基本思路 2.算法详解 1.初始化数组与打印数组 2.设置雷 3.排查与标记 4.CountMine函数计算周围雷的个数 5.ExpandMine函数递归展开周围所有安全区域 3.完整代码!!! 总结 前言 扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷. 1.算法基本思路 首先,用一个二维数组存储雷的分布,雷的分布在游戏期间从始至终不变,下文称为mine数组.用另一个二维数组存储排查出的雷的

  • C语言制作扫雷游戏(图形库)

    本文实例为大家分享了C语言制作扫雷游戏的具体代码,供大家参考,具体内容如下 游戏预览: 学习内容: 1.图形库文件的使用2.C++的使用,如类函数3.了解扫雷的规则,严谨的思维逻辑 扫雷的规则: 玩家点击一个地方,如果该地方是雷,则游戏结束:如果是空格,则会显示周围空格和周围8个格子的雷的数量,玩家依照提示逐步挖掘全部的雷,从而结束游戏. 制作步骤: 基本的库函数和常量 #include<stdio.h> #include<stdlib.h> #include<time.h&

  • C语言实现经典扫雷小游戏的示例代码

    目录 一.游戏简介 二.游戏实现 1.初始化棋盘 2.打印棋盘 3.布置雷 4.排查雷 三.源文件 1.game.h 2.game.c 3.Test.c 一.游戏简介 游戏初始界面有两个选择,选项“1”为开始游戏,选项“0”为退出游戏:选择开始游戏之后将会打印出9*9的棋盘,此时系统已经为游戏设置了10个雷,输入坐标之后将会打印出此坐标周围八个位置有几个雷,如果踩到了雷,那么游戏结束,打印出所有雷的位置. 二.游戏实现 1.初始化棋盘 void InitBoard(char board[ROWS

  • C语言实现六边形扫雷游戏的示例代码

    目录 程序简介 程序运行展示 完整源代码 程序简介 六边形扫雷,寻宝模式,稍稍介绍一下. 他也是要把所有安全的地方点出来. 他没有扫雷模式的消零算法.每一个安全的点都需要单独挖出来,一次显示一个格子. 添加了生命值的概念,也就是说存在一定的容错. 显示的数字有别于扫雷模式.点击宝藏点,会显示周围宝藏点数量,绿色:点击地雷,会显示周围地雷数量,黑色.注意,这个数字不包括自己,显示的范围自然就是 0~6 了.点击地雷会减生命值,生命值归零则结束. 所以雷和宝藏都是有价值的,都是能给准确信息的. 我能

  • JAVA实现经典扫雷游戏的示例代码

    目录 前言 主要设计 功能截图 代码实现 总结 前言 windows自带的游戏<扫雷>是陪伴了无数人的经典游戏,本程序参考<扫雷>的规则进行了简化,用java语言实现,采用了swing技术进行了界面化处理,设计思路用了面向对象思想. 主要需求 1.要有难度等级,初级,中级,高级 2.由玩家逐个翻开方块,以找出所有地雷为最终游戏目标.如果玩家翻开的方块有地雷,则游戏结束 3.游戏主区域由很多个方格组成.使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字:方格中数字则表示其

  • 基于C语言实现关机小游戏的示例代码

    目录 关机会写吧 猜数字会写吧 那么合起来 实际效果 关机会写吧 #include <stdlib.h> #include <string.h> #include <stdio.h> int main() { char input[10] = { 0 }; system("shutdown -s -t 60"); again: printf("电脑将于1分钟后关机,输入:我是猪,取消关机!\n"); scanf("%s&

  • 基于C语言实现三子棋游戏的示例代码

    1.创建文件  test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明) game.c 和game.h属于游戏实现 test.c属于游戏测试 test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(头文件添加) 三个文件 2.首先在test.c文件写一个主函数,主函数里面有一个测试函数,测试函数里面写菜单.进入游戏.退出游戏 代码展示: void menu() { printf("*********************

  • C语言实现三子棋游戏的示例代码

    目录 1. 前言 2. 准备工作 3. 使用二维数组存储下棋的数据 4. 初始化棋盘为全空格 5. 打印棋盘 6. 玩家下棋 7. 电脑下棋 8. 判断输赢 9. 效果展示 10. 完整代码 game.h game.c test.c 1. 前言 大家好,我是努力学习游泳的鱼,今天我们会用C语言实现三子棋.所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜.话不多说,我们开始吧. 2. 准备工作 我们可以在一个项目中创建三个文件,分别是: test.c,测试游戏的逻辑. gam

  • C语言实现简单扫雷游戏

    本文实例为大家分享了C语言实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 步骤 1.首先打印游戏选择菜单 2.地图及初始化 1).展示给玩家的地图(show_map) 2).地雷的图(mine_map可知地雷的位置) 3.打印地图 4.用户输入坐标,并检查坐标的合理性 5.判断当前位置是否有地雷,没有则出现数字(表示周围格子中有几个地雷) 6.打印新的地图 7.重复3~6步骤,直到踩雷游戏结束,或胜利. 8重新继续游戏或退出! 代码 主函数及游戏选择菜单 #include<stdio.h>

  • C语言实现简易扫雷游戏

    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 扫雷 楔子: 扫雷游戏是我们小时候无聊时消磨时间的小玩意,虽然更新到Win10系统后经典的扫雷游戏不再了,不过它现在仍以一种抓虫子的游戏形式存在于Windows这个系统平台,不禁感慨游戏还是那个游戏,不过人已经不是那些人了啊. 其实扫雷游戏的实现也主要运用了数组和函数封装与调用的知识,具体请看程序. 以下为程序主体: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>

  • C语言实现简易扫雷游戏详解

    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 一.想要达到的游戏功能: 大家如果想编写一个游戏,应具备以下的步骤: 1:了解游戏的规则 2:   知道游戏应该实现哪些功能 3:根据这些功能构建出游戏的基本框架 4:如何将整个游戏拆分成一个个模块,进行模块化编程 我们拿到一个任务,尤其是编写像扫雷这对于初学者有难度的问题时,应该做到先理清思路,再进行代码编写,现在我们来讲一下扫雷游戏预期实现的功能. 1:要有一个游戏菜单能让玩家选择进入游戏还是退出游戏. 2:程序

  • 基于C语言实现简易扫雷游戏

    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 1.头文件 #define _CRT_SECURE_NO_WARNINGS //包含头文件 #include <stdio.h> #include <stdlib.h> //定义数值 #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 //定义雷的数量 #define mine_num 10 //函数定义 //初始化 voi

  • C语言数组实现扫雷游戏

    本文实例为大家分享了C语言数组实现扫雷游戏的具体代码,供大家参考,具体内容如下 游戏界面展示: 一开始菜单界面: 选择 0 退出程序: 选择 1 开始游戏: 输入要排查雷的坐标: 会根据周围雷的个数,该坐标显示数字. 如果周围没有雷,输入的坐标显示 0 有雷,则显示周围雷的个数 如果输入坐标位置有雷,则被炸死游戏结束~ 代码展示: 一共分三个文件.测试文件 test.c .头文件game.h .游戏功能文件game.c . test.c #define _CRT_SECURE_NO_WARNIN

随机推荐