如果程序里面有错误,希望大家能够批评指正!

#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,则填充为4
num[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("* ");
else
printf("*%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(); // 消除前面的和中间的0
hebing(); // 合并相邻且相等的两个数
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列的数据依次赋给辅助数组t
t[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列的数据依次赋给辅助数组t
t[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列的数据依次赋给辅助数组t
t[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列的数据依次赋给辅助数组t
t[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. 2048游戏 - C语言不引入图形库简单实现

    声明:本程序绝大部分属于原创,交互部分参考了博客园 Judge Young的原创文章 游戏2048源代码 - C语言控制台界面版, 作者Judge Young的算法思想非常值得参考,感谢作者的分享 附 ...

  2. [python] python实现2048游戏,及代码解析。

    我初学python,有不对之处望大家指教.转载请征得同意. 我在网络上也找了一些2048游戏代码的讲解,但都不是特别详细.所以我希望能够尽量详细的讲解.同时,有的地方我也不懂,希望大家能帮助补充.我会 ...

  3. R语言写2048游戏

    2048 是一款益智游戏,只需要用方向键让两两相同的数字碰撞就会诞生一个翻倍的数字,初始数字由 2 或者 4 构成,直到游戏界面全部被填满,游戏结束. 编程时并未查看原作者代码,不喜勿喷. 程序结构如 ...

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

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

  5. 最少javascript代码完成一个2048游戏

    原生javascript代码写的2048游戏.建议在谷歌浏览器下跑.'WASD'控制方向.演示地址请移步:http://runjs.cn/detail/bp8baf8b 直接贴代码~ html: &l ...

  6. 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符

    Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...

  7. powershell字符界面的,powershell加WPF界面的,2048游戏

    ------[序言]------ 1 2048游戏,有段时间很火,我在地铁上看有人玩过.没错,坐地铁很无聊,人家玩我就一直盯着看. 2 我在电脑上找了一个,试玩了以下,没几次格子就满了.我就气呼呼的放 ...

  8. iOS雪花动画、音频图、新闻界面框架、2048游戏、二维码条形码扫码生成等源码

    iOS精选源码 粒子雪花与烟花的动画 iOS 2048游戏 JHSoundWaveView - 简单地声波图.音波图 一个可快速集成的新闻详情界面框架,类似今日头条,腾讯新闻 二维码/条形码扫描及扫描 ...

  9. Android项目开发实战-2048游戏

    <2048>是一款比较流行的数字游戏,最早于2014年3月20日发行.原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台.这款游戏是基于&l ...

随机推荐

  1. 开发一个简单的python计算器

    要求: 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4* ...

  2. 深入浅出Mybatis系列(九)---强大的动态SQL

    上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis ...

  3. uva 10801(最短路)

    题目大意: 有一层不超过100层的大楼, 有n个电梯,它们的速度都不同. 而且每个电梯只能到达指定的那些楼层,而且它们都有各自的速度(即上升一层或下降一层所用的时间). 如果一个人在某层走出电梯,要换 ...

  4. innoDB 存储引擎

    innodb 是在mysql 5.5.8 及之后的版本中成为mysql的默认存储引擎.之前都使用myisam.   innodb 是事务型的存储引擎 支持ACID事务,适用于小事务.   1.表空间类 ...

  5. iOS/OSX学习资源

    https://www.raywenderlich.com/  (Ray视频教学) http://wiki.jikexueyuan.com/project/swift/  (swift中文学习网站)

  6. free

    free是查看内存的命令 1             2                   3                4           5                61      ...

  7. 简化版c语言文法

    <程序> → <外部声明> | <程序的外部声明> <标识符类型> → <无类型> | <字符> | <整型> | ...

  8. (转)redis 3.0的集群部署

    一:关于redis cluster 1:redis cluster的现状 reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/ ...

  9. Flapper Bird的学习笔记(三)

    因为我有一个超屌的梦想,所以就绝不会做一个孬种的追梦人! 完成音效的添加 单例模式 游戏的状态切换 1. 单例模式 首先呢,说一下单例模式.何为单例?单例模式是一种常用的软件设计模式.在它的核心结构中 ...

  10. 设立点击ProgressDialog外的区域对话框不消失

    设置点击ProgressDialog外的区域对话框不消失ProgressDialog mpDialog = new ProgressDialog(OrderTable.this);  mpDialog ...