C语言项目实战:《2048》零基础项目!208 行源代码示例

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

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

C语言项目实战:《2048》零基础项目!208 行源代码示例

游戏介绍:

《2048》一款益智小游戏,游戏的规则十分简单,是一款简单易上手的数字小游戏。游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成为他们的和,每次操作之后会随机生成一个2或者4,最终得到一个“2048”的方块就算胜利了!

玩法简单,容易上手!所以这也成为了我们编程学习者C语言练习的一个非常好的小项目,如果你没有玩过的话那么可以先去玩一下的,会玩的话对于项目逻辑的理解也是非常有帮助的!接下来就让我们一起来看看吧!

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

C语言项目实战:《2048》零基础项目!208 行源代码示例

效果图展示:

C语言项目实战:《2048》零基础项目!208 行源代码示例

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

源代码示例:

#include<stdio.h>#include<time.h>#include<math.h>#include<conio.h>#include<graphics.h>//需要安装之后,才有这个头文件#define MAX_GRID 4		//每行格子数#define GRID_WIDTH 100	//格子宽度#define INTERVAL 15		//间隔#define WIN_SIZE (5*INTERVAL+MAX_GRID*GRID_WIDTH)//窗口大小enum Color //枚举格子颜色{	zero = RGB(205, 193, 180), //0的颜色	twoTo1 = RGB(238, 228, 218), //2的颜色	twoTo2 = RGB(237, 224, 200), //4的颜色	twoTo3 = RGB(242, 177, 121), //8的颜色	twoTo4 = RGB(245, 149, 99), //16的颜色	twoTo5 = RGB(246, 124, 95), //32的颜色	twoTo6 = RGB(246, 94, 59), //64的颜色	twoTo7 = RGB(242, 177, 121), //128的颜色	twoTo8 = RGB(237, 204, 97), //256的颜色	twoTo9 = RGB(255, 0, 128), //512的颜色	twoTo10 = RGB(145, 0, 72), //1024的颜色	twoTo11 = RGB(242, 17, 158), //2048的颜色	back = RGB(187, 173, 160), //背景颜色};Color arr[13] = { zero, twoTo1, twoTo2, twoTo3, twoTo4, twoTo5, twoTo6, twoTo7, twoTo8, twoTo9, twoTo10, twoTo11, back };//数据 二维数组int map[MAX_GRID][MAX_GRID];int createNum(){	int num = 0;	if (rand() % 10 == 0)	{		num = 4;	}	else	{		num = 2;	}	return num;}void gameInit(){	srand((unsigned)time(NULL));	//随机在空白的位置产生两个整数	for (int i = 0; i < 5; )	{		//随机数 rand() 随机获得一个整数   0~上万		int r = rand() % MAX_GRID; //0~3		int c = rand() % MAX_GRID; //0~3		if (map[r][c] == 0)		{			map[r][c] = createNum();			i++;		}			}}void gameDraw(){	//绘制界面,设置背景颜色 187,173,160 三原色 set background color	setbkcolor(RGB(187, 173, 160));	//设置颜色之后需要,清屏(原本的颜色是黑色的,设置的颜色,被覆盖了)	cleardevice();//清楚绘图设备	for (int i = 0; i < MAX_GRID; i++)//->y	{		for (int k = 0; k < MAX_GRID; k++)//->x		{			//00 01 02 03 			//10 11 12 13			//求出每一个格子的x,y			int x = k*GRID_WIDTH + INTERVAL*(k + 1);			int y = i*GRID_WIDTH + INTERVAL*(i + 1);			//4->2			//32->5			//2^n=map[i][k];  ->log2map[i][k]=n;			int index = (int)log2((float)map[i][k]);			setfillcolor(arr[index]);			//画矩形:空心矩形,填充矩形,实心矩形,圆角矩形			//solidrectangle(x, y, x + GRID_WIDTH, y + GRID_WIDTH);			solidroundrect(x, y, x + GRID_WIDTH, y + GRID_WIDTH, 15, 15);			if (map[i][k] != 0)			{				//绘制数字				//printf("%d", map[i][k]);//输出到控制台窗口				//设置文字大小				settextstyle(50, 0, "黑体");				settextcolor(RGB(163, 73, 164));				setbkmode(TRANSPARENT);//设置文字背景为透明				//把数字转成字符串 格式化字符串				char str[10] = "";				sprintf(str, "%d", map[i][k]);				//为了文字居中在格子中间				int textx = textwidth(str) / 2;				int texty = textheight(str) / 2;				int win = GRID_WIDTH / 2;		//格子宽度一半				outtextxy(x + win - textx, y + win - texty, str);			}		}	}}void moveup(){	for (int i = 0; i < MAX_GRID; i++)	{		int temp = 0;		for (int begin = 1; begin < MAX_GRID; begin++)		{			if (map[begin][0] != 0)			{				if (map[temp][i] == 0)				{					map[temp][i] = map[begin][i];					map[begin][i] = 0;				}				else if (map[temp][i] == map[begin][i])				{					map[temp][i] += map[begin][i];					map[begin][i] = 0;					temp++;				}				else				{					map[temp+1][i] = map[begin][i];					if (temp + 1 != begin)					{						map[begin][i] = 0;					}					temp++;				}			}		}	}}void moveDown(){	for (int i = 0; i < MAX_GRID; i++)	{		int temp = MAX_GRID-1;		for (int begin = MAX_GRID-2; begin >=0; begin--)		{			if (map[begin][0] != 0)			{				if (map[temp][i] == 0)				{					map[temp][i] = map[begin][i];					map[begin][i] = 0;				}				else if (map[temp][i] == map[begin][i])				{					map[temp][i] += map[begin][i];					map[begin][i] = 0;					temp--;				}				else				{					map[temp - 1][i] = map[begin][i];					if (temp - 1 != begin)					{						map[begin][i] = 0;					}					temp--;				}			}		}	}}//获取键盘按键 _getch(),它不需要按回车确认输入void keyControl(){	switch (_getch())	{	case 'w':	case 'W':	case 72:		moveup();		break;	case 's':	case 'S':	case 80:		moveDown();		break;	case 'a':	case 'A':	case 75:		break;	case 'd':	case 'D':	case 77:		break;	}	printf("key\n");}int main(){	//不要控制台窗口,我要图形窗口 easyx	initgraph(WIN_SIZE,WIN_SIZE,SHOWCONSOLE);//第一个参数是宽度,二个高度	gameInit();	while (1)	{		gameDraw();		keyControl();	}	return 0;}

未完成的数字部分代码,大家也可以自己先去想想试试,每一次的思考就是你进步的过程!

如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!

那么今天的分享就到这里了,后续会更新更多精彩项目或者知识内容的,大家要好好学C语言C++哟~

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

编程学习书籍分享:

C语言项目实战:《2048》零基础项目!208 行源代码示例

编程学习视频分享:

C语言项目实战:《2048》零基础项目!208 行源代码示例

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

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

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/109152.html

(0)

相关推荐

  • 宝宝名字:用“口”起一个情商高的好名字。每个人都能说话,都能被人喜欢。

    生活中,我们不难发现,有的人无论走到哪里,都让人如沐春风,产生亲近感。而有的人,一张嘴就令人尴尬,退避三舍。这就是情商高低所表现出来的语言差异。在生活中,一举一动,一言一行,都能体现一个人的情商,尤其是“言”。而口,人所以言食也。给宝宝起一个带“口”的名字,有助于孩子的情商培养。今天小编就给大家带来一些这样的好名字。

    生活 2021年11月26日
  • 这才是干掉ifelse的正确姿势(如何巧用设计模式干掉if-else)

    责任链模式顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。复制代码需求在公司流程处理业务中,有不同的处理流程节点,在不同的节点需要发送不同的短信,用来通知下一个节点的处置人。 1发起->2审核->3处置->4结果审核->完成,每个环节还可以有退回到上一个节点的功能,而且不同的地区还可能有其他的流程节点。一开始产品只提出审核和处置两个节点需要发送短信,因此一开始的代码是这样写的。

    科技 2021年12月19日
  • 英特尔10代处理与8代处理器,第11代英特尔处理器

    可以说是这几年最好的英特尔处理器了,混合架构的设计,Intel 7制程工艺,IPC的提升,首发支持DDR5内存、PCIe 5.0标准,更好的功耗控制,这次真没有挤牙膏,牙膏管这次真的挤爆了。期待了这么久英特尔12代酷睿处理器没有让人失望,对得起大众的这份期望。从行业来说,英特尔12代酷睿处理器将PC处理器带入了混合架构时代,连同Win11的系统调度、主板厂商的更新,更强的性能带来的游戏体验,影响是全方位的。

    科技 2021年10月29日
  • 简单2步修改提高小米MIUI系统的流畅性并且去除广告,已测试可行

    起因于昨天发布的一则微头条,一开始以为关闭了广告和反馈小米系统变流畅是错觉,后来网友反馈基本都是广告确实关闭了,而且系统也确实流畅了,这种好事必须分享给广大小米用户,系统版本不一致,可能关闭位置不一致,以我使用的MIUI12.5为例,演示下流程。

    科技 2021年11月18日
  • 外卖送迟被拒收,美团让女子承担340,对方:没吃,为啥要承担

    外卖已经成为很多人生活中一部分,确实带来很大便利。但是由于外卖牵扯环节多,稍有不慎会出现差错,导致客户没有得到很好体验,引发客户与平台或者商家的纠纷。 杭州的秦女士通过美团平台帮客...

    科技 2021年11月2日
  • Facebook吹哨人呼吁扎克伯格辞职:请做点好事吧

    财联社(上海,编辑 周玲)讯,Facebook“吹哨人”弗朗西斯·豪根(Frances Haugen)周一表示,为了公司的未来发展和完全性问题,希望Facebook首席执行官马克·扎克伯格能做点好事——辞去公司CEO一职。

    科技 2021年11月2日