2048游戏C语言代码
如果程序里面有错误,希望大家能够批评指正!
#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语言代码的更多相关文章
- 2048游戏 - C语言不引入图形库简单实现
声明:本程序绝大部分属于原创,交互部分参考了博客园 Judge Young的原创文章 游戏2048源代码 - C语言控制台界面版, 作者Judge Young的算法思想非常值得参考,感谢作者的分享 附 ...
- [python] python实现2048游戏,及代码解析。
我初学python,有不对之处望大家指教.转载请征得同意. 我在网络上也找了一些2048游戏代码的讲解,但都不是特别详细.所以我希望能够尽量详细的讲解.同时,有的地方我也不懂,希望大家能帮助补充.我会 ...
- R语言写2048游戏
2048 是一款益智游戏,只需要用方向键让两两相同的数字碰撞就会诞生一个翻倍的数字,初始数字由 2 或者 4 构成,直到游戏界面全部被填满,游戏结束. 编程时并未查看原作者代码,不喜勿喷. 程序结构如 ...
- C++学习(三十九)(C语言部分)之 游戏项目(2048游戏)
/***************************项目 2048**********************c语言编写 图形库制作时间:2019.04.03 准备工具: vs2013 图形库 i ...
- 最少javascript代码完成一个2048游戏
原生javascript代码写的2048游戏.建议在谷歌浏览器下跑.'WASD'控制方向.演示地址请移步:http://runjs.cn/detail/bp8baf8b 直接贴代码~ html: &l ...
- 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符
Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...
- powershell字符界面的,powershell加WPF界面的,2048游戏
------[序言]------ 1 2048游戏,有段时间很火,我在地铁上看有人玩过.没错,坐地铁很无聊,人家玩我就一直盯着看. 2 我在电脑上找了一个,试玩了以下,没几次格子就满了.我就气呼呼的放 ...
- iOS雪花动画、音频图、新闻界面框架、2048游戏、二维码条形码扫码生成等源码
iOS精选源码 粒子雪花与烟花的动画 iOS 2048游戏 JHSoundWaveView - 简单地声波图.音波图 一个可快速集成的新闻详情界面框架,类似今日头条,腾讯新闻 二维码/条形码扫描及扫描 ...
- Android项目开发实战-2048游戏
<2048>是一款比较流行的数字游戏,最早于2014年3月20日发行.原版2048首先在GitHub上发布,原作者是Gabriele Cirulli,后被移植到各个平台.这款游戏是基于&l ...
随机推荐
- H5 学习笔记(一、关于position定位)
主要是relative与absolute的用法: 1.relative 依据left right top bottom 等属性在正常文档流中脱离位置,即相对于他的正常文档流位置进行移动.两个都为rel ...
- 1. Two Sum I & II & III
1. Given an array of integers, return indices of the two numbers such that they add up to a specific ...
- Maven学习链接
别人的资料很多且写的很详细,我这里先收藏,等学习到一定阶段且有时间再整理自己的积累. 1.eclipse安装maven插件方法: http://blog.csdn.net/kittyboy0001/a ...
- <c:forEach>循环list,一个表格两列数据
参考: http://zhidao.baidu.com/link?url=apG5dUmW7RjB5eOYKSWOWdKd7nxFpkDO4n3i8R6MWYKl7E2JC1OCtPILF4G4EUO ...
- session放入缓存(redis)、DB
为什么要把SESSION保存在缓存 就php来说,语言本身支持的session是以文件的方式保存到磁盘文件中,保存在指定的文件夹中,保存的路径可以在配置文件中设置或者在程序中使用函数session_s ...
- Shell中的空格和引号
空格对于linux的shell是一种很典型的分隔符,所以给变量赋值的时候中间不能够有空格.而单引号和双引号,都是为了解决中间有空格的问题.比如string1=this is a string,这样执行 ...
- C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结
前言 公司最近开发需要将数据保存到.csv文件(逗号分隔值 文件)中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Sep ...
- OC语言中BOOL 和 bool 区别
1.类型不同 BOOL为int型: bool为布尔型: 2.长度不同 bool只有一个字节: BOOL长度视实际环境来定,一般可认为是4个字节: 3.取值不同 bool取值false和true,是0和 ...
- PHP数学函数
Abs: 取得绝对值. Acos: 取得反余弦值. Asin: 取得反正弦值. Atan: 取得反正切值. Atan2: 计算二数的反正切值. base_convert: 转换数字的进位方式. Bin ...
- maven pom.xml
什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的u ...