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

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

首页休闲益智升职吧2048更新时间:2024-04-30

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

游戏介绍:

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

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved