百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

C语言项目实战:《拼图游戏》零基础项目!250 行源码注释示例

toyiye 2024-08-29 00:33 7 浏览 0 评论

这篇文章主要为大家详细介绍了C语言实现——《拼图游戏项目》,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

游戏介绍:

对刚开始接触拼图的玩家而言,所谓入门级的拼图主要是取决于图案的一些特征。那些图案内容比较丰富的,也就是说,在整幅画面的各个角落里也有内容相对完整的子画面的,且色彩和轮廓反差较大的,这样的拼图玩起来就相对容易一些。因为在拼组的局部,想要寻找合适的零片,可选的零片总能被限制在比较小的范围内

项目技术:

1.二维数组

2.可视化编程

2.1 动态制作

3.切割技术

3.1 实现图片的自动切割

4.鼠标操作

4.1 玩游戏的内容

对逻辑也是有一定的要求,但是这些在我们项目源码里面都会有注释,大家到时候学习的时候千万不要忽略注释,注释可以更好地帮你理解代码,尤其是C语言初学者。

本项目编译环境:VS2019/VS2013;

插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;

效果图展示

配套讲解教程:游戏教程——哔哩哔哩

源代码示例:

#include <graphics.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
/******************************************/
//			全局变量的定义
IMAGE img, blank;			//美女和空的
int array2D[4][4];
int array1D[15] = { 0 };
struct pos
{
	int i;
	int j;
}mypos = {0,0};
struct pos searchPos(int array2D[][4], int i,int j)
{
	for (i = 0; i <= 3; i++)
	{
		for (j = 0; j <= 3; j++)
		{
			if (array2D[i][j] == 15)
			{
				mypos.i = i;
				mypos.j = j;
				return mypos;
			}
		}
	}
	return mypos;
}
/******************************************/
//			绘制开始菜单
void drawMenu()
{
	initgraph(640, 450);
	setbkcolor(WHITE);		//设置窗口颜色为白色
	cleardevice();			//刷新显示
	setfillcolor(LIGHTBLUE);	//设置填充颜色为淡蓝色
	settextstyle(30, 0, "字魂24号-镇魂手书");
	setbkmode(TRANSPARENT);			//透明方式去掉文字背景
	//画矩形
	fillrectangle(240, 100, 380, 150);
	fillrectangle(240, 100+60, 380, 150 + 60);

	//文字输出
	outtextxy(240 + 20, 100 + 13, "开始游戏");
	outtextxy(240 + 20, 100 + 13 + 60, "退出游戏");
	settextcolor(RED);		//设置文字颜色为红色
	outtextxy(130, 280, "顿开教育莫影拼图游戏 v1.0版本");

	MOUSEMSG m;
	//鼠标操作
	while (1)
	{
		m = GetMouseMsg();
		//当鼠标放到矩形区域,画一个矩形
		if (m.x >= 240 && m.x <= 380 && m.y >= 100 && m.y <= 150)
		{
			setlinecolor(RED);
			rectangle(240 - 5, 100 - 5, 380 + 5, 150 + 5);
			if (m.uMsg == WM_LBUTTONDOWN)
			{
				break;
			}
		}
		else if (m.x >= 240 && m.x <= 380 && m.y >= 160 && m.y <= 210)
		{
			setlinecolor(RED);
			rectangle(240 - 5, 160 - 5, 380 + 5, 210 + 5);
			if (m.uMsg == WM_LBUTTONDOWN)
			{
				exit(0);
			}
		}
		else
		{
			setlinecolor(WHITE);
			rectangle(240 - 5, 100 - 5, 380 + 5, 150 + 5);
			rectangle(240 - 5, 160 - 5, 380 + 5, 210 + 5);
		}
	}
	closegraph();
}
/******************************************/
//			加载资源
void loadResource()
{
	srand((unsigned int)time(NULL));
	int length = 15;
	int pos = 0;
		int i, j;
	//1.给一维数组初始化0-15
	for (i = 0; i < 15; i++)
	{
		//0-14
		array1D[i] = i;
	}

	//2.随机出来一个下表
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			//单独处理最后一个位置
			if (i == 3 && j == 3)
			{
				array2D[3][3] = 15;
				break;
			}
			pos = rand() % length;
			array2D[i][j] = array1D[pos];
			for (int k = pos; k < length; k++)
			{
				array1D[k] = array1D[k + 1];
			}
			length--;
		}
		if (i == 3 && j == 3)
		{
			array2D[3][3] = 15;
			break;
		}
	}
	//缩放加载
	loadimage(&img, "Love.jpg", 800, 800);
	loadimage(&blank, "blank.jpg", 200, 200);
}
/******************************************/
//			绘图过程
void drawMap()
{
	//根据打乱顺序的二维数组中的值去拿照片中相应的位置
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			int x = j * 200;
			int y = i * 200;
			switch (array2D[i][j])
			{
			case 0:
			case 1:
			case 2:
			case 3:
				putimage(x, y, 200, 200, &img, array2D[i][j] * 200, 0);
				break;
			case 4:
			case 5:
			case 6:
			case 7:
				putimage(x, y, 200, 200, &img, (array2D[i][j]-4) * 200, 200);
				break;
			case 8:
			case 9:
			case 10:
			case 11:
				putimage(x, y, 200, 200, &img, (array2D[i][j] - 8) * 200, 400);
				break;
			case 12:
			case 13:
			case 14:
				putimage(x, y, 200, 200, &img, (array2D[i][j] - 12) * 200, 600);
				break;
			case 15:
				putimage(x, y, &blank);
				break;
			}
		}
	}
}
/******************************************/
//			游戏过程
void playGame()
{
	MOUSEMSG m;
			//白块在数组那个位置
	int j_Mouse, i_Mouse;	//鼠标点在数组那个位置
	while (1)
	{
		drawMap();			//第一次显示
		//换之前定位 白块在哪里
		int i=0, j=0;
		searchPos(array2D, 3, 3);
		i = mypos.i;
		j = mypos.j;

		m = GetMouseMsg();
		switch (m.uMsg)
		{
		case WM_LBUTTONDOWN:
			j_Mouse = m.x / 200;
			i_Mouse = m.y / 200;
			if (i >= 0 && j < 4&&i<4&&j>=0)
			{
				if (i_Mouse == i + 1&&i+1<=3 && j_Mouse == j)
				{
					array2D[i][j] = array2D[i_Mouse][j_Mouse];
					array2D[i_Mouse][j_Mouse] = 15;
					break;
				}
				if (i_Mouse == i - 1 && i - 1 >=0 && j_Mouse == j)
				{
					array2D[i][j] = array2D[i_Mouse][j_Mouse];
					array2D[i_Mouse][j_Mouse] = 15;
					break;
				}
				if (i_Mouse == i  && j_Mouse == j - 1&&j-1>=0)
				{
					array2D[i][j] = array2D[i_Mouse][j_Mouse];
					array2D[i_Mouse][j_Mouse] = 15;
					break;
				}
				if (i_Mouse == i  && j_Mouse == j + 1&&j+1<=3)
				{
					array2D[i][j] = array2D[i_Mouse][j_Mouse];
					array2D[i_Mouse][j_Mouse] = 15;
					break;
				}
			}
			break;
		}
	}
}
/******************************************/
//			游戏过程
void GameOve()
{
	int flag = 1;
}
int main()
{
	drawMenu();
	loadResource();
	initgraph(800, 800);
	playGame();

	closegraph();
	return 0;
}

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码