(1)游戏简介:

2048是一款程序员对于数字敏感程度训练的一款游戏,简单易上手。可谓是老少皆宜哇。

(2)规则与玩法 :

随机产生2或4,通过方向键或者w/a/s/d键来实现数字移动,相同数字碰撞会相加,不同数字碰撞会出现一个新的随机值2/4,知道数字铺满游戏界面且没有可碰撞的相同数字,则游戏结束。

(3)代码实现:

是不是感(jio)挺简单,不过对于我这种菜鸡刚开始还是有些问题,不过经过几天的思考和调试也还算是比较顺利的完成了。二维数组、循环、简单的交互就可以实现,废话不多说,直接上代码。

不足之处还请多多指教!

#include<iostream>
#include<cstdio>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
using namespace std;
int mp[4][4],score;
bool map[4][4];
bool cal[4][4];
void DeBug()
{for(int i=0;i<4;++i)//定义二位数组空格子{for(int j=0;j<4;++j)cout<<map[i][j]<<" ";cout<<endl;}cout<<endl;for(int i=0;i<4;++i){for(int j=0;j<4;++j)cout<<mp[i][j]<<" ";cout<<endl;}
}
void print()//4x4网格
{for(int j=0;j<4;++j)printf("----");printf("\n");for(int i=0;i<4;++i){for(int j=0;j<4;++j){printf("|");if(map[i][j]){if(score<mp[i][j])score=mp[i][j];printf("%3d",mp[i][j]);}elseprintf("   ");}printf("|\n");for(int j=0;j<4;++j){printf("----");}printf("\n");}printf("w /W: up  s/S : down  a/A : left  d/D : right\n");printf("按 'r' 开始新游戏\n按 'e' 退出游戏\n");
}
void MoveUp()//上移
{bool flag;for(int i=1;i<4;++i){for(int j=0;j<4;++j){if(!map[i][j])continue;flag=false;int pos=i;for(int k=i-1;k>=0;--k){if(!map[k][j]){pos=k;continue;}if((mp[k][j]==mp[i][j])&&(!cal[k][j])){mp[k][j]+=mp[i][j];cal[k][j]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[pos][j]=mp[i][j];map[i][j]=false;map[pos][j]=true;}}}
}
void MoveDown()//下移
{bool flag;for(int i=2;i>=0;--i){for(int j=0;j<4;++j){if(!map[i][j])continue;flag=false;int pos=i;for(int k=i+1;k<4;++k){if(!map[k][j]){pos=k;continue;}if((mp[k][j]==mp[i][j])&&(!cal[k][j])){mp[k][j]+=mp[i][j];cal[k][j]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[pos][j]=mp[i][j];map[i][j]=false;map[pos][j]=true;}}}
}
void MoveRight()//右移
{bool flag;for(int i=0;i<4;++i){for(int j=2;j>=0;--j){if(!map[i][j])continue;flag=false;int pos=j;for(int k=j+1;k<4;++k){if(!map[i][k]){pos=k;continue;}if((mp[i][k]==mp[i][j])&&(!cal[i][k])){mp[i][k]+=mp[i][j];cal[i][k]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[i][pos]=mp[i][j];map[i][j]=false;map[i][pos]=true;}}}
}
void MoveLeft()//左移
{bool flag;for(int i=0;i<4;++i){for(int j=1;j<4;++j){if(!map[i][j])continue;flag=false;int pos=j;for(int k=j-1;k>=0;--k){if(!map[i][k]){pos=k;continue;}if((mp[i][k]==mp[i][j])&&(!cal[i][k])){mp[i][k]+=mp[i][j];cal[i][k]=true;flag=true;map[i][j]=false;}elsebreak;}if(!flag){mp[i][pos]=mp[i][j];map[i][j]=false;map[i][pos]=true;}}}
}
void Init()
{srand(time(NULL));//产生随机值int x,y,v,now=0;for(int i=0;i<4;++i){for(int j=0;j<4;++j){if(!map[i][j])now++;}}if(now==0)return;int cnt=rand()%now,n=0;bool flag=false;for(int i=0;i<4;++i){flag=false;for(int j=0;j<4;++j)if(!map[i][j]){if(cnt==n){x=i;y=j;flag=true;break;}elsen++;}if(flag)break;}v=rand()%2;if(v)v=4;elsev=2;mp[x][y]=v;map[x][y]=true;
}
bool gameover()
{for(int i=0;i<4;++i){for(int j=0;j<4;++j){if(!map[i][j])return false;if(i>0){if(mp[i-1][j]==mp[i][j])return false;}if(j>0)if(mp[i][j-1]==mp[i][j])return false;}}return true;
}
void Lose()
{char ch;system("cls");printf("*******************\n");printf("****游戏结束 ****\n");printf("**** 您的得分:%3d ****\n",score);printf("*******************\n\n");printf("请按任意键继续...\n");ch=getch();return ;
}
void Win()
{char ch;system("cls");//清屏printf("*******************\n");printf("**** 恭喜您胜利啦 ****\n");printf("*******************\n\n");printf("请按任意键继续...\n");ch=getch();return ;
}
void start()
{system("cls");printf("*************************\n");printf("* 游戏加载中,请稍后... *\n");printf("*************************\n");int x=(int)5e8;bool flag=false;while(x--);memset(mp,0,sizeof(mp));memset(map,false,sizeof(map));score=0;char ch;while(!gameover()){memset(cal,false,sizeof(cal));int cnt=0;system("cls");Init();print();// DeBug();ch=getch();switch (ch){case 'w':case 'W':MoveUp();break;case 's':case 'S':MoveDown();break;case 'a':case 'A':MoveLeft();break;case 'd':case 'D':MoveRight();break;case 'e':exit(0);case 'r':return ;}if(score>=2048){flag=true;break;}}if(flag)Win();elseLose();return ;
}int main()
{char ch;while(1){system("cls");printf("                 欢迎来到@阿龙儿的2048\n\n");printf("按Enter键开始游戏叭\n\n退出请按Esc键\n"); ch=getch();if(ch==13)start();else if(ch==27)break;}return 0;
}

2048的C语言实现相关推荐

  1. 2048游戏c语言linux简易代码,C语言实现2048游戏代码

    本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下 效果图: 使用文本界面的屏幕绘图库 ncurses. 设计思路: 在满足条件情况下消除方块 允许在游戏主界面(16 宫格) ...

  2. 2048游戏c语言实验报告,2048游戏语言实验报告.doc

    2048游戏语言实验报告 成绩评定 教师签名 评定日期 嘉应学院 计算机学院 实验报告 课程名称: C程序设计 开课学期: 2015-2016学年第1学期 班 级: 计算机1505 指导老师: 陈广明 ...

  3. 2048游戏c语言实验报告,2048游戏C语言实验报告.doc

    #include#define M 2048 void up(); //上操作. void down(); //下操作. void right(); //右操作. void left(); //左操作 ...

  4. 2048游戏C语言代码

    听说2048游戏实现起来很easy! 所以今天就试了试!确实不太难,要想编的很成功,也不是太容易!有很多细节需要考虑! 下面是我自己设计的代码,估计里面会漏洞百出!希望路过大神能指点一二! #incl ...

  5. 游戏2048源代码 - C语言控制台界面版

    〇.前言 本文最初是在2014年发表的,当时只是Windows版本的,前段时间有位读者给我发邮件咨询Linux下版本移植问题,于是便花时间支持了Linux下的版本,并修改完善了代码,加入记录最高分的功 ...

  6. 游戏2048(C语言实现)

    游戏2048总结 游戏逻辑: 初始化地图->打印地图->移动,旋转->记录历史->添加随机数->判断是否失败 知识点: 打印 移动:一个方向里有相同大小的两个数且中间没有 ...

  7. 语言还是你不得不服的大哥级别编程语言!

    直到今天,有人在喊C语言过时的语言,还有什么值得学习的,现在看Python,PHP等语言现在都很容易用,谁还在学习老C语言,其实这是真的吗?作者下载了两种语言的源代码作为下载器.由于空间的限制,我们没 ...

  8. C语言从来都没有过时,你大爷终究是你大爷

    直到今天,有人在喊C语言过时的语言,还有什么值得学习的,现在看Python,PHP等语言现在都很容易用,谁还在学习老C语言,其实这是真的吗?作者下载了两种语言的源代码作为下载器.由于空间的限制,我们没 ...

  9. 初学C语言没有项目练手怎么行,这17个小项目收下不谢

    C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程 ...

  10. 学会了C语言你可以独立开发这些项目。。。。

    C语言可以做什么? 从最简单的.最熟悉的说起吧,毕竟我们在学校学习的时候,老师几乎都会让我们去开发: 一.C语言可以实现一些常见的应用 以下几个几乎是我们学习C语言到一定阶段之后必开发的一个小项目了, ...

最新文章

  1. activemq高级客户端选项
  2. .net 插件式开发学习总结
  3. eclipse部署web项目
  4. 洛谷 P3378 【模板】堆
  5. AI,机器学习(模式识别),深度学习的区别与联系
  6. DOS命令大全:More命令详解
  7. html5使用框架页面布局,HTML框架集与布局
  8. 最难忘的一节计算机课,最让我难忘的一节课作文「共5篇」
  9. wincc安装信息服务器,常见WinCC安装问题及注意事项
  10. 11月29日做题截图
  11. 个人用微信,支付宝在网站收款实现
  12. 大数据hadoop集群运算
  13. fastadmin框架进行开发【1】
  14. 计算机程序设计员理论试题答案,计算机程序设计员理论试题库.doc
  15. 出生日期输入输出------C语言
  16. c# 个人笔记 正在学习中....
  17. 华为路由器DHCP,为交换机划分不同网段实验
  18. 无人值守地磅防作弊就是在地磅周围加个摄像头吗?
  19. 银行面试中的着装要求(女生篇)
  20. 【备忘】北风网Java必备JAVA语言基础与OOP入门(骑士飞行棋门禁系统)

热门文章

  1. 计算机专业女生跨专业考研考什么好,计算机专业女生,考研,跨专业,考公务员。...
  2. java中protected的作用域_java作用域public ,private ,protected
  3. 一位IT博士的大学十年
  4. 编码人大脑的5大小吃
  5. android reboot 消息,android reboot 流程
  6. matlab画s域零极点图,信号与系统的S域分析.ppt
  7. 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
  8. AI仿生:人类进化新可能
  9. 2022年3月搜索引擎市场份额排行榜
  10. mysql 导入工具 php_MySQL数据导入导出方法与工具介绍_PHP教程