0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用C语言实现2048项目

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2021-11-21 16:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

游戏介绍:

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

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

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

源代码示例:

#include#include#include#include#include//需要安装之后,才有这个头文件#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
");}int main(){  //不要控制台窗口,我要图形窗口 easyx  initgraph(WIN_SIZE,WIN_SIZE,SHOWCONSOLE);//第一个参数是宽度,二个高度  gameInit();
  while (1)  {    gameDraw();    keyControl();  }  return 0;}

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

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

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

责任编辑:haq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144602
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73140

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

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    VSCode + ESP-IDF环境下给ESP32-S3项目添加头文件

    VSCode + ESP-IDF环境下给ESP32-S3项目添加头文件
    的头像 发表于 11-28 07:27 697次阅读

    请问如何用C语言列举当前所有网口?

    何用C语言列举当前所有网口?
    发表于 11-25 07:23

    海微科技智能仓库2.0项目正式启动

    11月4日,海微智能仓库2.0项目启动会在海微智造举行。项目通过数字化仓库顶层设计与自动化技术的深度融合,实现了仓库从 “人力密集”到“智能无人”的跨越。
    的头像 发表于 11-07 15:15 184次阅读

    运行自己编写的C语言项目的E203软件仿真环境的搭建

    、mywork.verilog等新的文件,并将mywork.verilog文件复制到E203项目目录下的riscv-toolsriscv-testsisagenerated目录下。 4、进入E203项目目录
    发表于 10-20 06:44

    rt-thread studio中创建不了gd32项目是怎么回事?

    为什么在rt-thread studio中创建一个gd32项目时候,他打开的那个选型芯片型号是,安装好了,没有确认键啊,只有退出sdk管理器,然后就卡在那里了,创建不了gd32的项目
    发表于 09-15 06:56

    湃睿科技助力金源自动化PLM2.0项目圆满验收

    近日,惠州金源智能机器人有限公司(曾用名:惠州金源精密自动化设备有限公司,亿纬锂能全资子公司)PLM2.0项目顺利通过验收。这一里程碑式的成果,标志着金源自动化在数字化研发领域完成了从“数据整合”到“全流程协同”的跨越式升级,为企业智能化转型注入强劲动力。
    的头像 发表于 08-19 16:13 613次阅读
    湃睿科技助力金源自动化PLM2.0<b class='flag-5'>项目</b>圆满验收

    STM32项目分享:矿井环境监测系统

    01—项目简介1.功能详解STM32矿井环境监测系统功能如下:STM32F103C8T6单片机作为主控制器DS18B20测量环境温度
    的头像 发表于 08-16 10:03 703次阅读
    STM32<b class='flag-5'>项目</b>分享:矿井环境监测系统

    STM32项目分享:智能语音台灯(机智云)

    01—项目简介1.功能详解STM32智能语音台灯(机智云)功能如下:STM32F103C8T6单片机作为主控单元按键切换模式,支持自
    的头像 发表于 07-24 18:03 1055次阅读
    STM32<b class='flag-5'>项目</b>分享:智能语音台灯(机智云)

    NRF24L01项目资料(2.4G通信)实例项目下载

    NRF24L01项目资料(2.4G通信)实例项目,推荐下载!
    发表于 06-03 20:46

    STM32项目分享:智能鞋柜

    01—项目简介1.功能详解STM32智能鞋柜功能如下:DHT11检测鞋柜温湿度,温度低于阈值开启加热,湿度高于阈值开启加热和通风;P
    的头像 发表于 05-27 18:04 701次阅读
    STM32<b class='flag-5'>项目</b>分享:智能鞋柜

    单片机C语言实例(350+例)

    350+单片机C语言实例! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-22 21:47

    STM32项目分享:STM32智能语音台灯

    项目简介1.功能详解STM32智能语音台灯功能如下:1.STM32F103C8T6单片机系统板作为主控单元2.按键切换模式,支
    的头像 发表于 03-15 10:02 2345次阅读
    STM32<b class='flag-5'>项目</b>分享:STM32智能语音台灯

    限时免积分下载:增量式与位置式PID算法的C语言实现分享

    前面咱们有分享对PID算法离散化和增量式PID算法原理进行来探索,之后又使用Matlab进行了仿真实验,对PID三个参数又有了更深入的认识,接下来我们来使用C语言进行PID算法实现,并且结合控制电机的
    发表于 03-05 18:32

    粤芯半导体三期通线,162.5亿项目背后的产业链新机遇

    总投资162.5亿元,粤芯半导体三期项目成功通线,产值预计40亿元。这一项目不仅在国内晶圆制造领域带来突破,更为大湾区半导体产业链的完善注入了新动能,标志着区域内从设计到制造再到封装的全链条逐渐成型。
    的头像 发表于 01-04 09:49 1470次阅读

    基于FPGA实现图像直方图设计

    直方图统计的原理 直方图统计从数学上来说,是对图像中的像素点进行统计。图像直方图统计常用于统计灰度图像,表示图像中各个灰度级出现的次数或者概率。统计直方图的实现采用C/C++或者其他高级语言实
    的头像 发表于 12-24 10:24 1198次阅读
    基于FPGA<b class='flag-5'>实现</b>图像直方图设计