游戏先容:
《2048》一款益智小游戏,游戏的规则十分大略,是一款大略易上手的数字小游戏。游戏的规则很大略,你须要掌握所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成为他们的和,每次操作之后会随机天生一个2或者4,终极得到一个“2048”的方块就算胜利了!
玩法大略,随意马虎上手!
以是这也成为了我们编程学习者C措辞练习的一个非常好的小项目,如果你没有玩过的话那么可以先去玩一下的,会玩的话对付项目逻辑的理解也是非常有帮助的!
接下来就让我们一起来看看吧!

插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;
效果图展示:
配套讲解教程: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 (5INTERVAL+MAX_GRIDGRID_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~3int c = rand() % MAX_GRID; //0~3if (map[r][c] == 0){map[r][c] = createNum();i++;}}}void gameDraw(){//绘制界面,设置背景颜色 187,173,160 三原色 set background colorsetbkcolor(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,yint x = kGRID_WIDTH + INTERVAL(k + 1);int y = iGRID_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(){//不要掌握台窗口,我要图形窗口 easyxinitgraph(WIN_SIZE,WIN_SIZE,SHOWCONSOLE);//第一个参数是宽度,二个高度gameInit();while (1){gameDraw();keyControl();}return 0;}
未完成的数字部分代码,大家也可以自己先去想想试试,每一次的思考便是你进步的过程!
如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我互换,我来帮你!
那么本日的分享就到这里了,后续会更新更多精彩项目或者知识内容的,大家要好好学C措辞C++哟~
写在末了:对付准备学习C/C++编程的小伙伴,如果你想更好地提升你的编程核心能力(内功)不妨从现在开始!
编程学习书天职享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目条记,根本入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习发展比自己琢磨更快哦!
对付C/C++感兴趣可以关注小编在后台私信我:【编程互换】一起来学习哦!
可以领取一些C/C++的项目学习视频资料哦!
已经设置好了关键词自动回答,自动领取就好了!