#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <getch.h>// 创建二维数组
int arr[4][4];
// 是否移动或合并过
bool IS_MOVE_MERGE = true;// 显示界面
void show_view(void)
{// 清理屏幕system("clear");printf("=========2048========\n\n");for(int i=0; i<4; i++){printf("---------------------\n");for(int j=0; j<4; j++){if(arr[i][j])printf("|%4d",arr[i][j]);elseprintf("|    ");}printf("|\n");}printf("---------------------\n");printf("\nR:继续上次游戏\n");printf("\nS:保存并退出游戏\n");printf("\nQ:退出游戏\n\n");}bool is_null(void)
{for(int i=0; i<4; i++){for(int j=0; j<4; j++){if(0 == arr[i][j]){return true;}}}return false;
}// 创建一个数
void creat_num(void)
{// 进入循环前要先保证有空位置while(is_null() && IS_MOVE_MERGE){int x = rand() % 4;int y = rand() % 4;if(0 == arr[x][y]){arr[x][y] = 2;break;}}
}void up(void)
{for(int y=0; y<4; y++){int end = 0;for(int x=1; x<4; x++){for(int m=x; m>end && arr[m][y]; m--){if(arr[m][y] == arr[m-1][y]){arr[m-1][y] *= 2;arr[x][y]= 0;end = m;IS_MOVE_MERGE = true;}else if(0 == arr[m-1][y]){arr[m-1][y] = arr[m][y];arr[m][y] = 0;IS_MOVE_MERGE = true;}}}}
}
void down(void)
{for(int y=0; y<4; y++){int end = 3;for(int x=2; x>=0; x--){for(int m=x; m<end && arr[m][y]; m++){if(arr[m][y] == arr[m+1][y]){arr[m+1][y] *= 2;arr[m][y] = 0;end = m;IS_MOVE_MERGE = true;}else if(0 == arr[m+1][y]){arr[m+1][y] = arr[m][y];arr[m][y] = 0;IS_MOVE_MERGE = true;}}}}
}
void right(void)
{for(int x=0; x<4; x++){int end = 3;for(int y=2; y>=0; y--){for(int m=y; m<end && arr[x][m]; m++){if(arr[x][m] == arr[x][m+1]){arr[x][m+1] *= 2;arr[x][m] = 0;end = m;IS_MOVE_MERGE = true;}else if(0 == arr[x][m+1]){arr[x][m+1] = arr[x][m];arr[x][m] = 0;IS_MOVE_MERGE = true;}}}}
}void left(void)
{for(int x=0; x<4; x++){int end = 0;for(int y=1; y<4; y++){for(int m=y; m>end && arr[x][m]; m--){if(arr[x][m] == arr[x][m-1]){arr[x][m-1] *= 2;arr[x][m] = 0;end = m;IS_MOVE_MERGE = true;}else if(0 == arr[x][m-1]){arr[x][m-1] = arr[x][m];arr[x][m] = 0;IS_MOVE_MERGE = true;}}}}
}// 判断是否结束
bool is_over(void)
{if(is_null()){return false;}for(int x=0; x<4; x++){for(int y=0; y<3; y++){if(arr[x][y] == arr[x][y+1]){return false;}}}for(int x=0; x<3; x++){for(int y=0; y<4; y++){if(arr[x][y] == arr[x+1][y]){return false;}}}return true;
}//保存退出游戏
void save()
{FILE *fwp = fopen("2048.txt","w");for(int i=0;i<4;i++){for(int j = 0;j<4;j++){fprintf(fwp,"%d ",arr[i][j]);}}}//继续上次游戏
void last()
{FILE *frp=fopen("2048.txt","r");for(int i=0;i<4;i++){for(int j = 0;j<4;j++){fscanf(frp,"%d",&arr[i][j]);}
}
}int main()
{// 设置随机数获取位置srand(time(NULL));while(1){// 创建一个数creat_num();// 显示界面show_view();// 判断游戏是否结束if(is_over()){printf("游戏结束!\n");return 0;}// 假定此次不能移动或合并IS_MOVE_MERGE = false;// 获取方向键,并处理switch(getch()){case'r':last(); break;          //继续上次游戏case 183: up(); break;      //upcase 184: down(); break;    //downcase 185: right(); break; //rightcase 186: left(); break; //leftcase's':save();             //保存退出游戏case'q':printf("\n退出游戏\n");exit(0);         //不保存退出游戏}}
}

2048 (C语言)相关推荐

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

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

  2. c语言编2048,c语言编写的2048游戏代码,大家可以参考一下这些

    2048_launcher.c #include #include #include void main() { printf("正在启动中,请稍后!\n"); Sleep(100 ...

  3. C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)

    /***************************项目 2048********************** c语言编写 图形库制作 时间:2019.04.03 准备工具: vs2013 图形库 ...

  4. 用C语言编写2048游戏

    2048_C_code 用C语言编写的2048 1 要实现我们的 2048 小游戏,需要涉及一些数据结构的知识,以及一些 Linux 的系统调用.此外,为了方便在屏幕上使用字符绘图,我们还需要使用一个 ...

  5. 还在为学习Python没有路线发愁吗?

    Python语言本身具有的优势,决定了从事Python学习的开发工程师相较于其他编程语言拥有更多的岗位发展. 这里列出部分阶段的学习路线.大伙儿可以根据自己喜欢的模块自行查看. python语言基础 ...

  6. 小学生 python教程-Python最佳学习路线图

    python语言基础 (1)Python3入门,数据类型,字符串 (2)判断/循环语句,函数,命名空间,作用域 (3)类与对象,继承,多态 (4)tkinter界面编程 (5)文件与异常,数据处理简介 ...

  7. python学习路线-Python学习路线

    Python非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解.编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困惑于晦涩的语法细节上,比起JAVA.C#和C/C++这些编程语 ...

  8. python自学流程-python 学习流程

    python语言基础 (1)Python3入门,数据类型,字符串 (2)判断/循环语句,函数,命名空间,作用域 (3)类与对象,继承,多态 (4)tkinter界面编程 (5)文件与异常,数据处理简介 ...

  9. Python学习入门2:Python学习路线(课程大纲+Python视频教程+下载地址)

    Python学习路线(课程大纲+Python视频教程+下载地址) 目前Python已经成为最受欢迎的程序设计语言之一.Python的设计哲学是"优雅"."明确" ...

最新文章

  1. DDoS攻击与CC攻击的区别
  2. AC日记——简单密码 openjudge 1.7 10
  3. 智慧交通day03-车道线检测实现07:车道曲率和中心点偏离距离计算+代码实现
  4. 信息学奥赛一本通 1223:An Easy Problem | OpenJudge NOI 4.6 1455:An Easy Problem
  5. phpVirtualBox – 用浏览器操作虚拟机
  6. css为什么要用浮动_CSS问题和解决
  7. 如何 Get 机器学习必备的算法技能? | 技术头条
  8. js 中call,apply,bind的区别
  9. 将 iOS 软件移植到 Windows 10 的桥梁将很快打通
  10. 2017计算机应用基础实践,计算机应用基础试题及答案
  11. 陶博士-选股思路-如何应用月线反转
  12. python制作税后工资计算器
  13. JavaScript实现超级玛丽小游戏
  14. UNI-APP APP版本更新方法
  15. 实验记录 | SpeedSeq安装
  16. 技巧分享:wps文件怎么转换成word格式?
  17. mysql查询名字叫小明的_MySQL(命令和查询语句)
  18. 数图互通高校房产管理公用房定额管理需要哪些功能及标准?
  19. android7.1系统集成高德地图
  20. android mupdf 快速开发,android 使用mupdf开源开发pdf详解

热门文章

  1. 如何进行隐私协议测试
  2. 使用QQ邮箱“邮我”组件,给我写信/意见反馈!方便他人快速给你发邮件
  3. Vueb报错[WDS] Errors while compiling. Reload prevented
  4. 怎么在第一个 PDF 文件的中间,插入第二个 PDF 文件的内容?
  5. 数据架构——数据架构
  6. 医疗管理系统-检查组管理
  7. 前窗玻璃膜贴了一周还有气泡_才贴不久就气泡?车膜贴完这些细节要注意
  8. android广告弹窗插屏,cocos2dx android添加广点通广告平台的---插屏广告
  9. Find My产品|苹果Find My技术助力儿童鞋发展
  10. findIndex()