前言:
想到做过就贴出来系列…
前后左右的移动道理相同。

代码:

//2048
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void move_up(int a[][4])
{int i,j,k,n;int flag=0;for(j=0;j<4;j++) //列 {   flag=0;for(i=1;i<4;i++)  //行 {n=4;while(n--){if(a[i-1][j]==0){for(k=i;k<4;k++){a[k-1][j]=a[k][j];a[k][j]=0;}}}}//相加部分,从上第二个元素开始向下执行 for(i=1;i<4;i++){n=4;if(flag==0)if(a[i-1][j]==a[i][j]){a[i-1][j]*=2;a[i][j]=0;flag=1;}while(n--){if(a[i-1][j]==0)for(k=i;k<4;k++){a[k-1][j]=a[k][j];a[k][j]=0;}}} }
}
void move_down(int a[][4])
{int i,j,k,n;int flag=0;for(j=0;j<4;j++) //列 {   flag=0;for(i=3;i>=1;i--)  //行 {n=4;while(n--){if(a[i][j]==0){for(k=i;k>=1;k--){a[k][j]=a[k-1][j];a[k-1][j]=0;}}}}for(i=2;i>=0;i--){n=4;if(flag==0)if(a[i+1][j]==a[i][j]){a[i+1][j]*=2;a[i][j]=0;flag=1;}while(n--){if(a[i][j]==0)for(k=i;k>=1;k--){a[k][j]=a[k-1][j];a[k-1][j]=0;}}} }
}
void move_left(int a[][4])
{int i,j,k,n;int flag=0;for(i=0;i<4;i++) //行 {   flag=0;for(j=1;j<4;j++)  //列 {n=4;while(n--){if(a[i][j-1]==0){for(k=j;k<4;k++){a[i][k-1]=a[i][k];a[i][k]=0;}}}}for(j=1;j<4;j++){n=4;if(flag==0)if(a[i][j-1]==a[i][j]){a[i][j-1]*=2;a[i][j]=0;flag=1;}while(n--){if(a[i][j-1]==0)for(k=j;k<4;k++){a[i][k-1]=a[i][k];a[i][k]=0;}}} }
}
void move_right(int a[][4])
{int i,j,k,n;int flag=0;for(i=0;i<4;i++) //行{    flag=0;for(j=3;j>=1;j--)  // 列 {n=4;while(n--){if(a[i][j]==0){for(k=j;k>=1;k--){a[i][k]=a[i][k-1];a[i][k-1]=0;}}}}for(j=2;j>=0;j--){n=4;if(flag==0)if(a[i][j+1]==a[i][j]){a[i][j+1]*=2;a[i][j]=0;flag=1;}while(n--){if(a[i][j]==0)for(k=j;k>=1;k--){a[i][k]=a[i][k-1];a[i][k-1]=0;}}} }
}
void output(int a[][4])
{int i,j;  char c;printf("\t2048\n");printf("+");  for(j=0;j<4;j++)  {  printf("-----");  }  printf("+\n");  for(i=0;i<4;i++)  {  printf("|");  for(j=0;j<4;j++)  {  if(a[i][j]==0)  {  c='.';  printf("%5c",c);  }  else  {  printf("%5d",a[i][j]);  }  }  printf("|\n\n");  }  printf("+");  for(j=0;j<4;j++)  {  printf("-----");  }  printf("+\n");
}
void rand_value(int a[][4]) //检索为0的元素并赋值随机数
{int i,j;int r,c;srand(time(NULL));A:{r=rand()%4;c=rand()%4;          if(a[r][c]==0)a[r][c]=rand()%4?2:4;else{goto A;}}output(a);
}
int isEnd(int a[][4])
{int i,j,cnt1=0,cnt2=0,cnt=0;for(i=0;i<4;i++)  //判断是否所有元素非空 for(j=0;j<4;j++){if(a[i][j]==2048){printf("Good Job!");return 0; }if(a[i][j]!=0) cnt++;}if(cnt==16){for(j=0;j<4;j++)  //判断相邻行是否不等 {for(i=1;i<4;i++)if(a[i][j]!=a[i-1][j])cnt1++; }for(i=0;i<4;i++) //判断相邻列是否不等 {for(j=1;j<4;j++)if(a[i][j]!=a[i][j-1])cnt2++;}cnt1+=cnt2;if(cnt1==24){system("cls");printf("Game Over!");return 0;    }       }return 1;
}
int main()
{int a[4][4]={0};int i,j,flag=1;char ch;rand_value(a);while((ch=getch())&&flag){switch(ch){case 'w':move_up(a);system("cls");rand_value(a);flag=isEnd(a);break;case 's':move_down(a);system("cls");rand_value(a);flag=isEnd(a);break; case 'a':move_left(a);system("cls");rand_value(a);flag=isEnd(a);break;case 'd':move_right(a);system("cls");rand_value(a);flag=isEnd(a);break;}}return 0;
} 

C语言2048源代码相关推荐

  1. 输出 Hello World 混乱C语言的源代码

    下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C 的编译器g 才能编程通过. lns=" ...

  2. c语言程序2048_C语言2048小游戏演示和说明

    2048游戏是风靡一时的小游戏,我们提供的2048小游戏不依赖 TC 环境,不依赖任何第三方库,可以在 VS.CodeBlocks.DEV C++ 等常见 IDE中编译通过.我们提供给大家的 2048 ...

  3. iar环境下c语言编程,c语言_源代码-iar环境配置.pdf

    c语言_源代码-iar环境配置 欢迎光临我的博客:/mikehendry 其实,IAR 编译环境的配置是相当重要的,没配置正确或者不符合自己的习惯的话,使用起来就会很麻烦.下面 我根据网上的经验和资料 ...

  4. c语言2048代码linux,C语言2048小游戏课设(附源码).doc

    PAGE PAGE 1 C语言2048小游戏课设 项目说明 本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行.(书生) 项目运行截 ...

  5. c语言hypot函数,hypot ( )【C语言库函数源代码】

    [C语言库函数源代码] [本程序在Dev C++ 4.9.9.2 下编译通过] /* hypot函数对于给定的直角三角形的两个直角边, 求其斜边的长度. */ //一般的常规算法: doublemy_ ...

  6. 51单片机c语言程序控制,51单片机C语言程序设计源代码

    <51单片机C语言程序设计源代码>由会员分享,可在线阅读,更多相关<51单片机C语言程序设计源代码(281页珍藏版)>请在人人文库网上搜索. 1.51 SCM c语言教程示例2 ...

  7. pow ( )【C语言库函数源代码】

    [C语言库函数源代码] [本程序在Dev C++ 4.9.9.2 下编译通过] double my_pow(double x, double y) { register double ret, val ...

  8. fabs ( )【C语言库函数源代码】

    [C语言库函数源代码] [本程序在Dev C++ 4.9.9.2 下编译通过] float my_fabs01 (float fnumber) { float ret; __asm__ ( " ...

  9. c语言象棋教程下载,C语言程序源代码中国象棋.doc-资源下载在线文库www.lddoc.cn...

    C语言程序源代码---中国象棋.doc includegraphics.hincludeconio.hincludestring.hincludebios.hincludestdlib.hinclud ...

最新文章

  1. Batch Normalization——加速深度神经网络收敛利器
  2. 拼接字符串时去掉最后一个多余逗号
  3. 把企业分“三只鸟”的发展好比“三个策略”
  4. 2021-06-29
  5. 预备AI工程师升级必备:大厂常见图像分类面试题
  6. Android中调用webservice的工具类
  7. Swagger天天用,但它背后的实现原理很多人都不知道!
  8. MFC消息映射与消息传递内幕
  9. 判断是否为数组的 JavaScript 方法总结
  10. 《编译系统透视:图解编译原理》
  11. 062 函数进阶小结
  12. 计算机网络物理结构两大部分组成,计算机网络的组成部分 -华强电子网
  13. Linux配置NTP服务器
  14. AMOS分析技术:二阶验证性因子分析
  15. 教孩子学习乘法和除法,我算是绞尽脑汁了
  16. 我的世界在自建的服务器中装mod,《我的世界》中国版服务器MOD添加教程
  17. C++11标准模板(STL)- 算法(std::nth_element)
  18. linux su无效_Linux下su命令无反应的解决办法
  19. 使用git merge --squash,让commit变得优雅
  20. Linux中更新pycharm即删除旧的pycharm,装新的pycharm

热门文章

  1. 这可能是我见过最好的NumPy图解教程!
  2. 用Python爬虫下载整本小说
  3. 美国某城市16年公务员工资集描述性分析
  4. Apple Safari 16.5 发布- macOS 专属浏览器 (独立安装包下载)
  5. 好妈妈胜过好老师-划清和孩子的界限
  6. Linux 之父 LinusTorvalds 喊话:Rust 即将出现在 Linux 内核中
  7. Steemit 会颠覆 Quora/知乎 甚至 Facebook 吗?
  8. imx6 手动进入recovery
  9. Harris3D调参记录
  10. QImage的构造函数的使用