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

#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. ElasticSearch 5.0.1 java API操作

    今天来说下使用ES 5.0.1的API来进行编码. 开始之前,简单说下5.0.1跟之前的几个变化.之前的ES自身是不支持delete-by-query的,也就是通过查询来删除,可以达到批量的效果,是因 ...

  2. MVC5 + EF6 完整入门教程三:EF来了

    期待已久的EF终于来了 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...

  3. CASthesis 模板编译的问题

    使用CASthesis模板(https://github.com/xiaoyao9933/UCASthesis,介绍里说这个版本是在ThuThesis的基础上修改的),自带的说明如下. 使用须知 == ...

  4. sqlserver行列转换问题(网上搜集)

    (列->行) 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如 ...

  5. iOS检测版本更新

    有时候为了需求,我们需要检测app版本更新今天在这里整合下 //获取当前版本号 NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDi ...

  6. web前端,移动开发规范概述

    以下规范建议,均是Alloyteam在日常开发过程中总结提炼出的经验,规范具备较好的项目实践,强烈推荐使用 字体设置 使用无衬线字体 body { font-family: "Helveti ...

  7. DeviceIoControl 应用层如何和驱动层通信?

    调用的方法之一的DeviceIoControl 驱动层提供设备名 例如filedisk 在驱动层 首先先是注册列表 用winObj查看 filedisk的驱动对象 但是 这八个对象时怎么生成的呢? 我 ...

  8. POJ 2229 Sumsets

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 11892   Accepted: 4782 Descrip ...

  9. Liunx下安装jdk

    Liunx下安装jdk 1.首先进入ROOT权限  命令 sudo su  输入密码进入 root 权限 2.看下当前liunx 是否存在jdk 环境 ,输入命令 javac,如果存在则会显示对应jd ...

  10. java读取大文件

    1  多线程 2  java内存映射读取大文件