听说2048游戏实现起来很easy!

所以今天就试了试!确实不太难,要想编的很成功,也不是太容易!有很多细节需要考虑!

下面是我自己设计的代码,估计里面会漏洞百出!希望路过大神能指点一二!

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#define WIN 256 // 可以修改决定游戏输赢的值// 矩阵数组
int num[4][4]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int t[5]={0,0,0,0,0}; // 辅助数组
int move=0;   // 记录移动步数
int score=0;  // 记录得分情况
int max=0;  // max表示游戏输赢,max=WIN时赢
int change=1;
// 产生一个随机位置和随机数
void Srand()
{int i,j;do// 产生一个随机位置,如果产生的位置有数据,就继续随机生成一个新位置{i=((unsigned)rand())%4;j=((unsigned)rand())%4;}while(num[i][j]!=0);if(((unsigned)rand())%4==0){   // 产生一个随机数,如果该数对4取余=0,则填充为4num[i][j]=4;}else{num[i][j]=2;}move++;
}
void Print()
{system("CLS");printf("*~~~~~~~~2048~~~~~~~*\n");printf("*author:  亚威      *\n");printf("*得分: %d  步数: %d  \n",score,move);printf("*~~~~~~~~~~~~~~~~~~~*\n");for(int i=0;i<=3;i++){for(int j=0;j<=3;j++){if(num[i][j]==0)printf("*    ");elseprintf("*%4d",num[i][j]);}printf("*\n*~~~~~~~~~~~~~~~~~~~*\n");}
}// 消除t数组中前面和中间出现的0
void fun()
{int i,j;for(i=0;i<=3;i++){if(t[i]==0){for(j=i+1;j<=3;j++){if(t[j]!=0){change=1;break;}}t[i]=t[j];t[j]=0;}if(j>=3)break;}
}// 合并操作
void hebing()
{for(int i=0;i<=2;i++){if((t[i]!=0)&&(t[i]==t[i+1])){t[i]*=2;score+=t[i];change=1;t[i+1]=0;}if(max<t[i])max=t[i];}
}// 合并相邻且相等的两个数
void add()
{fun();  // 消除前面的和中间的0hebing();  // 合并相邻且相等的两个数fun();  // 再次消0
}
int main()
{int i,j;int gameover=1;// 产生一个随机位置srand((unsigned)time(NULL));max=0;while(gameover&&(max<WIN)){if(change){Srand();  // 产生一个随机位置和随机数}change=0;Print();  // 显示界面char in=getch();  // 读取操作命令switch(in){case 'w':case 'W':for(i=0;i<=3;i++){  // 依次处理第1至第4列for(j=0;j<=3;j++){   // 把第i列的数据依次赋给辅助数组tt[j]=num[j][i];}add();  // 核心:合并相邻且相等的两个数for(j=0;j<=3;j++){   // 把处理后的数据依次放到矩阵对应位置num[j][i]=t[j];}}break;case 's':case 'S':for(i=0;i<=3;i++){  // 依次处理第1至第4列for(j=0;j<=3;j++){   // 把第i列的数据依次赋给辅助数组tt[3-j]=num[j][i];}add();  // 核心:合并相邻且相等的两个数for(j=0;j<=3;j++){   // 把处理后的数据依次放到矩阵对应位置num[j][i]=t[3-j];}}break;case 'a':case 'A':for(i=0;i<=3;i++){  // 依次处理第1至第4列for(j=0;j<=3;j++){   // 把第i列的数据依次赋给辅助数组tt[j]=num[i][j];}add();  // 核心:合并相邻且相等的两个数for(j=0;j<=3;j++){   // 把处理后的数据依次放到矩阵对应位置num[i][j]=t[j];}}break;case 'd':case 'D':for(i=0;i<=3;i++){  // 依次处理第1至第4列for(j=0;j<=3;j++){   // 把第i列的数据依次赋给辅助数组tt[3-j]=num[i][j];}add();  // 核心:合并相邻且相等的两个数for(j=0;j<=3;j++){   // 把处理后的数据依次放到矩阵对应位置num[i][j]=t[3-j];}}break;}gameover=0;for(i=0;i<=3;i++){for(j=0;j<=3;j++){if(num[i][j]==0)gameover=1;}}if((gameover==0)&&(change==0))break;}Print();if(max>=WIN){printf("You Win!\n");printf("你很牛啊!!!\n");}else{printf("Gameover\n");printf("努力啊!!!\n");}system("pause");return 0;
}

2048游戏C语言代码相关推荐

  1. 弹力球C语言课程设计,弹力球游戏c语言代码.docx

    弹力球游戏c语言代码 #include #include #include #include /*定义游戏级别*/#define ELEMENTARY 15 /*初级*/#define INTERME ...

  2. 弹力球c语言代码运行,弹力球游戏c语言代码

    弹力球游戏c语言代码 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 #include #include #include #inc ...

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

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

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

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

  5. 快快吃豆游戏c语言代码,C语言快快吃豆游戏.doc

    C语言快快吃豆游戏 C语言--快快吃豆游戏 使用说明 运行程序时,首先进入到是游戏开始界面,根据提示,按键,决定是否进入游戏.运行效果如图7.1所示. 图7.1 进入游戏界面 按两下任意键,进入到快快 ...

  6. 金山打字游戏c语言代码,一天练习一个小C/C++程序(一) 控制台版“金山打字”游戏...

    今天练习了一个C语言小程序,控制台版的简易"金山打字"小游戏. 效果图: 代码: #include #include #include #include void printfSp ...

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

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

  8. 完整!贪吃蛇游戏c语言代码分享(包括界面,计数,提示)

    最近看到身边有些朋友抱怨,网上的贪吃蛇项目完整源码太少,或者说运行不了,甚至还有花钱购买的情况,作为你们的过来人,学长了解你们期末考试的苦,今天的博客我就不啰嗦,我直接放代码给你们. 所有功能都实现了 ...

  9. 九宫格游戏c语言代码,C++代码实现寻找九宫格游戏所有答案

    今天无意中看到新浪微博上一条关于九宫格游戏的一条消息. 英<每日邮报>报道,芬兰数学家因卡拉花费3个月设计出世界上迄今难度最大九宫格游戏,它只有一个答案. 于是自己写了C++的代码程序去实 ...

最新文章

  1. Spark ListenerBus 和 MetricsSystem 体系分析
  2. linux 网络管理器未运行怎么解决,Ubuntu下提示网络管理器未运行解决方法
  3. 中国批准AMD收购赛灵思!苏妈花350亿美元集齐CPU\GPU\FPGA三大芯片业务
  4. 分布式系统关注点:弹性架构
  5. STC89C52单片机 定时器
  6. Go gin文件上传
  7. getchar、scanf以及缓冲区的概念
  8. Could not resolve all dependencies for configuration ':app:_debugApk'
  9. ON_COMMAND_RANGE用法
  10. 现代控制理论输出y_现代控制理论线性系统入门(三)输入输出变量的稳定性
  11. html网页框架案例代码,HTML网页框架代码
  12. myeclipse安装插件phpeclipse后进行PHP代码编写
  13. 图像的仿射变换原理、Homography、alpha通道以及python实现
  14. 火车头采集的数据库文件*.bd3是什么格式的数据库?
  15. delphi技巧--分离汉字和英文字母
  16. c语言程序烧写步骤,单片机烧写程序步骤
  17. ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately
  18. Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services
  19. Proxifier设置代理上网详细操作
  20. 利用pandas进行简单数据分析-医院销售数据分析案例

热门文章

  1. APUS 朱辉:移动应用出海的大数据建设挑战
  2. 神策数据荣登《中国企业家》“未来之星”榜单
  3. [LeetCode][JavaScript]Invert Binary Tree 反转二叉树
  4. 安装mysql-8.0.13-winx64遇到的问题和亲测有效的安装方法
  5. selenium+chromedriver监测视频流源地址时允许flash自动启用
  6. 浅谈Android中Lifecycle
  7. Tomcat架构解析之3 Connector NIO
  8. flutter笔记1 VScode安装dart code插件踩坑记录
  9. leetcode307. Range Sum Query - Mutable
  10. gradle 构建过程