C语言如何实现2048游戏

这篇文章主要介绍了C语言如何实现2048游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

实现的效果如图

先来讲一下我的思路吧

1.首先肯定是要一个4X4的二维数组来存放数字存放0、2、4……2.游戏开始与过程中需要随机出现2或者4,所以需要调用time.h这个库3.游戏开始时,假如当获取字符为‘w'则先用循环判定这个数字的下方有无和它相等的数字。如无则跳过,如有相加。然后在判定是否可以向上移动

下面是我的代码

(我本来是还要写一个撤回的函数 可惜写出来却不能运行。求大神指教)

#include
//#include
#include
#include
#include
int_back[4][4]={};
voiddraw();//绘图
voidplay();
voidinit();//初始化数字
void_up();//向上移动
void_down();//向下移动
void_left();//像左移动
void_right();//向右移动
voidadd_number();//增加一个数字
inta[4][4]={0};
intemtpy;
//空格的数量
voiddraw()
{
inti,j;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
_back[i][j]=a[i][j];
PIMAGEimg;
img=newimage();
switch(a[i][j])
{
case0:
{
getimage(img,"2048\\0.png");
putimage(j*180,i*180,img);
break;
}
case2:
{
getimage(img,"2048\\2.png");
putimage(j*180,i*180,img);
break;
}
case4:
{
getimage(img,"2048\\4.png");
putimage(j*180,i*180,img);
break;
}
case8:
{
getimage(img,"2048\\8.png");
putimage(j*180,i*180,img);
break;
}
case16:
{
getimage(img,"2048\\16.png");
putimage(j*180,i*180,img);
break;
}
case32:
{
getimage(img,"2048\\32.png");
putimage(j*180,i*180,img);
break;
}
case64:
{
getimage(img,"2048\\64.png");
putimage(j*180,i*180,img);
break;
}
case128:
{
getimage(img,"2048\\128.png");
putimage(j*180,i*180,img);
break;
}
case256:
{
getimage(img,"2048\\256.png");
putimage(j*180,i*180,img);
break;
}
case512:
{
getimage(img,"2048\\512.png");
putimage(j*180,i*180,img);
break;
}
case1024:
{
getimage(img,"2048\\1024.png");
putimage(j*180,i*180,img);
break;
}
case2048:
{
getimage(img,"2048\\2048.png");
putimage(j*180,i*180,img);
break;
}
}
}
}

}
voidinit()
{
intx,y;
srand(time(0));
x=rand()%4;
y=rand()%4;
a[x][y]=2;
emtpy=15;

}
void_up()
{
intx,y,i;

for(y=0;y<4;++y){//从上向下合并相同的方块
for(x=0;x<4;++x){
if(a[x][y]==0)
;
else{
for(i=x+1;i<4;++i){
if(a[i][y]==0)
;
elseif(a[x][y]==a[i][y]){
a[x][y]+=a[i][y];
a[i][y]=0;
++emtpy;
x=i;
break;

}
else{

break;
}
}
}
}
}

for(y=0;y<4;++y)//向上移动箱子
for(x=0;x<4;++x)
{
if(a[x][y]==0)
;
else{
for(i=x;(i>0)&&(a[i-1][y]==0);--i){
a[i-1][y]=a[i][y];
a[i][y]=0;
}
}
}
}
void_down(){
intx,y,i;

for(y=0;y<4;++y)//向下合并相同的方格
for(x=3;x>=0;--x){
if(a[x][y]==0)
;
else{
for(i=x-1;i>=0;--i){
if(a[i][y]==0)
;
elseif(a[x][y]==a[i][y]){
a[x][y]+=a[i][y];
a[i][y]=0;
++emtpy;
x=i;
break;
}
else
break;
}
}
}

for(y=0;y<4;++y)//向下移动方格
for(x=3;x>=0;--x){
if(a[x][y]==0)
;
else{
for(i=x;(i<3)&&(a[i+1][y]==0);++i){
a[i+1][y]=a[i][y];
a[i][y]=0;
}
}
}
}
void_left()
{
intx,y,i;

for(x=0;x<4;++x)//向左合并相同的方格
for(y=0;y<4;++y){
if(a[x][y]==0)
;
else{
for(i=y+1;i<4;++i){
if(a[x][i]==0)
;
elseif(a[x][y]==a[x][i]){
a[x][y]+=a[x][i];
a[x][i]=0;
emtpy++;
y=i;
break;
}
else
break;
}
}
}

for(x=0;x<4;++x)//向左移动方格
for(y=0;y<4;++y){
if(a[x][y]==0)
;
else{
for(i=y;(i>0)&&(a[x][i-1]==0);--i){
a[x][i-1]=a[x][i];
a[x][i]=0;
}
}
}
}
void_right(){
intx,y,i;

for(x=0;x<4;++x)//向右合并相同的方格
for(y=3;y>=0;--y){
if(a[x][y]==0)
;
else{
for(i=y-1;i>=0;--i){
if(a[x][i]==0)
;
elseif(a[x][y]==a[x][i]){
a[x][y]+=a[x][i];
a[x][i]=0;
++emtpy;
y=i;
break;
}
else
break;
}
}
}

for(x=0;x<4;++x)//向右移动方格
for(y=3;y>=0;--y){
if(a[x][y]==0)
;
else{
for(i=y;(i<3)&&(a[x][i+1]==0);++i){
a[x][i+1]=a[x][i];
a[x][i]=0;
}
}
}
}
voidadd_number()
{
srand(time(0));
if(emtpy>0)
{
intx,y,temp;
do
{
x=rand()%4;
y=rand()%4;
}while(a[x][y]!=0);
temp=rand();
inti=temp%2;
if(i==1)
{
a[x][y]=2;
emtpy--;

}
else
{
a[x][y]=4;
emtpy--;
}

}
}
voidplay()
{
charc=getch();
switch(c)
{
case'w':
case'W':
{
_up();
add_number();
draw();

break;

}
case's':
case'S':
{
_down();
add_number();
draw();
break;

}
case'a':
case'A':
{
_left();
add_number();
draw();
break;



}case'd':
case'D':
{
_right();
add_number();
draw();
break;

}
case'q':
case'Q':
{
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
{
a[i][j]=_back[i][j];
draw();
}
}
}
}

}
intmain()
{
init();
inti,j;
initgraph(724,724);//初始化
PIMAGEimg;
img=newimage();
getimage(img,"2048/背景.jpg");
putimage(0,0,img);
draw();
for(;is_run();delay_fps(30))
{
for(inti=0;i<4;i++)
{
for(intj=0;j<4;j++)
{
_back[i][j]=a[i][j];
}
}
play();
}
}

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现2048游戏”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!

发布于 2021-05-30 14:07:31
分享
海报
171
上一篇:C语言如何实现小学生计算机辅助教学系统下一篇:C语言如何实现AT指令ASCII码的拼接处理
目录

    忘记密码?

    图形验证码