2048小游戏4X4C语言

不好意思,不知道怎样添加附件,原本想将写的源代码(.c)文件上传的。

找了半天没有找到,只能将源程序写到一个文件中,粘贴到这里。

有感兴趣的朋友们,可以拷贝下面的代码运行一下,格式需要自己调整。

也可以访问百度云盘http://pan.baidu.com/s/1hsa675M下载源文件。

/*2048*/

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>

void print(void);/*显示游戏界面*/
int add(void);/*对中间变量数组进行处理*/

int code[4][4] =
{
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
};/*游戏中的16个格子*/
int temp[5];/*中间变量*/
int move = 0;/*移动次数*/
int score = 0;/*分数*/

int main(void)
{
int gameover = 0;/*判断游戏是否结束,1结束,0继续*/
int i,j;
int change = 1;/*判断格子中的数是否改变,0不变*/
char input;
srand((unsigned)time(NULL));/*设置随机数的起点*/
while(gameover == 0)
{
if(change >= 1)/*仅当数发生改变时添加新数*/
{
do
{
i=((unsigned)rand()) % 4;
j=((unsigned)rand()) % 4;
}while(code[i][j] != 0);
if(((unsigned)rand()) % 4 == 0)
{
code[i][j]=4;
}
else
{
code[i][j]=2;/*随机选一个空格填上2或4*/
}
move++;/*增加次数*/
}
print();/*显示*/
input = getch();/*输入方向*/
change = 0;
switch(input)
{
case ‘0‘:/*退出*/
printf("Are you sure to exit?(y/n)");
input=getchar();
if(input==‘y‘||input==‘Y‘)
exit(0);
break;

case ‘W‘:

case ‘w‘:/*上*/
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
temp[i]=code[i][j];/*把一列数移到中间变量*/
}
temp[4]=0;
change += add();
for(i=0;i<=3;i++)
{
code[i][j]=temp[i];/*把处理好的中间变量移回来*/
}
}
break;

case ‘A‘:

case ‘a‘:/*左*/
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
temp[j]=code[i][j];/*把一行数移到中间变量*/
}
temp[4]=0;
change += add();
for(j=0;j<=3;j++)
{
code[i][j]=temp[j];/*把处理好的中间变量移回来*/
}
}
break;

case ‘S‘:

case ‘s‘:/*下*/
for(j=0;j<=3;j++)
{
for(i=0;i<=3;i++)
{
temp[i]=code[3-i][j];/*把一列数移到中间变量*/
}
temp[4]=0;
change += add();
for(i=0;i<=3;i++)
{
code[3-i][j]=temp[i];/*把处理好的中间变量移回来*/
}
}
break;

case ‘D‘:

case ‘d‘:/*右*/
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
temp[j]=code[i][3-j];/*把一行数移到中间变量*/
}
temp[4]=0;
change += add();
for(j=0;j<=3;j++)
{
code[i][3-j]=temp[j];/*把处理好的中间变量移回来*/
}
}
break;
}
gameover=1;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(code[i][j]==0)
gameover=0;/*所有格子都填满则游戏结束*/
}
printf("Game over!\n");
getch();

return 0;
}

void print(void)/*显示游戏界面*/
{
int i,j;
system("CLS");/*清屏*/
printf("2048\n");
printf("W--UP A--LEFT S--DOWN D--RIGHT 0--EXIT\n");
printf("Score:%d Move:%d\n",score,move);
printf("Made by lanshanxiao\n");
printf("|-----------------------|\n");/*显示横向分隔线*/
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
if(code[i][j]==0)
{
printf("| ");/*0显示空格*/
}
else
{
printf("|%5d",code[i][j]);/*显示数字和分隔线*/
}
}
printf("|\n|-----------------------|\n");/*显示横向分隔线*/
}
}

int add(void)/*对中间变量数组进行处理*/
{
int i;
int t=0;
int change=0;/*判断数组是否有改变,0不变,1变化*/
do
{
for(i=0;i<=3;i++)
{
if(temp[i]==0)
{
if(temp[i]!=temp[i+1])
change=1;/*当一个0后面不是0时数组改变*/
temp[i]=temp[i+1];
temp[i+1]=0;
}
}/*去掉中间的0*/
t++;
}while(t<=3);/*重复多次*/
for(i=1;i<=3;i++)
{
if(temp[i]==temp[i-1])
{
if(temp[i]!=0)
{
change=1;/*当两个非零相同的数相加时数组改变*/
score=score+temp[i];/*加分*/
}
temp[i-1]=temp[i-1]*2;
temp[i]=0;
}
}/*把两个相邻的相同的数加起来*/

return change;
}

时间: 2024-12-13 10:54:14

2048小游戏4X4C语言的相关文章

2048小游戏(C语言版)

1 #include <climits> 2 #include <cstdio> 3 #include <cstring> 4 #include <stack> 5 #include <string> 6 #include <map> 7 #include <vector> 8 #include <cmath> 9 10 11 /* 12 玩法说明:编译运行后,输入一个整数n,表示自己想玩的游戏中是n*n的表格

如何在CentOS上安装一个2048小游戏

如何在centos上安装一个2048小游戏 最近在学习CentOS系统,就琢磨着玩点什么,然后我看到有人在玩2048小游戏,所有我就在想,为啥不装一个2048小游戏搞一下嘞,于是乎,我就开始工作啦 由于我个人的编程能力不强,所以我就在网上找到了一个C语言版的2048游戏小程序,我把它放到我的百度网盘上,可以供大家下载(链接:http://pan.baidu.com/s/1jIutb3g 密码:mu9z),然后我们把这个程序给复制到CentOS系统下,在进行下一步的工作.我们可以在CentOS上安

Swift实战之2048小游戏

上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完善,就这么整理一下过程中一些值得记录的点吧. 用的Swift版本是2.0,原书中的Swift版本会低一些,所以实践起来有些地方语法并不一样. 一.开始页面   在程序的第一张页面(Main.storyboard)上,只放了一个“开始游戏”按钮,点击按钮,弹出一个提示对话框,确认后,进入游戏页面. 1

C# 开发2048小游戏

这应该是几个月前,闲的手痒,敲了一上午代码搞出来的,随之就把它丢弃了,当时让别人玩过,提过几条更改建议,但是时至今日,我也没有进行过优化和更改(本人只会作案,不会收场,嘎嘎),下面的建议要给代码爱好的童鞋完成了. 更改建议: a.当数字超过四位数时,显示的时候有部分被它的容器TextBox遮挡了,能不能把显示的数值变小点?答案是可以的.代码里有一段通过矩阵数据填充TextBox值的操作,可以在填充时,判断下数值长度,然后修改TextBox的文字大小. b.玩游戏的时候,使用方向键移动时,焦点可能

canvas随笔之2048小游戏

HTML: <!DOCTYPE HTML> <html> <head> <title>2048小游戏</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, u

2048小游戏-JS实现(BUG调试中)

刚刚学习JS的菜鸟,游戏没有实现滑动效果.希望有前辈能指点一下······ 定义的主要方法: 1.fuzhi()生成一对随机数,然后根据这对随机数取得一个随机单元格,先判断其是否为空,不为空,对其进行赋值为2的操作:为空,则再次调用fuzhi(). 2.secai()遍历表格,根据单元格的数值改变单元格的背景颜色. 3.score()遍历单元格,计算实时总得分. 4.keyDown()主要方法,根据用户按上下左右键来进行不同的数值相加.消除动作.这一段代码写得很冗余····· 1 <!DOCTY

2048小游戏用例图

用例图主要用来描述"用户.需求.系统功能单元"之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. 下面是我们2048小游戏的用例图:

2048小游戏(变态版哦)

近日,由于博主同学暑假有个作业是写个2048小游戏,我一听挺好玩的..然后就开始了.. 首先,2048在移动过程中的规则其实也没有特别难,但是感觉也不是一句话就能说完的.(不过玩的多--感觉总是有的) 废话不多说,其实博主同学提供了pdf描述了2048的算法. 各位筒子入坑前请先过几眼这个规则,以及其算法(当然我觉得算法第二点有点问题,后述) 那么在游戏的编写前,可以先对细枝末节做一些准备. 1.出现数字2/4的概率 int getRand() { int i = rand() % 10; if

用控制台写类窗体2048小游戏

原文地址:用控制台写类窗体2048小游戏作者:余文 2048是一个很简单的小游戏,这是我自己实现的一个版本. 这个版本有两个特色 这是一个高仿窗体程序的控制台程序. 通过使用指针将四个方向的移动简化成了一个方向的移动. 当初刚出来2048小游戏的时候,玩的不亦乐乎.之后根据游戏规则自己花了一下午时间用控制台写了一个玩,没有参考源码. 当时只实现了游戏的移动逻辑和胜负判定逻辑,界面很简单,但已经可以玩玩了. 这是当初刚写完发空间说说得瑟的时候. 今年5月有段时候比较闲,对程序做了较大更新. 实时显