本篇文章给大家分享的是有关使用C语言怎么实现一个2048游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
具体内容如下
/*2048*/
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
//全局变量
int x[4][4]={0};
int score=0;
int can_move;
int empty()
{
int i,j;
int n=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(x[i][j]==0)
n++;
}
}
return n;
}
int check()
{
int i,j;
int a,b;
if(empty() == 0)
{
a=b=0;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
if(x[i][j]==x[i][j+1])
a=1;
}
}
for(j=0;j<4;j++)
{
for(i=0;i<3;i++)
{
if(x[i][j]==x[i+1][j])
b=1;
}
}
if(a==0 && b==0)
return 0;
else
return 1;
}
else
return 1;
}
int win()
{
int i,j;
int a=0;
if(check())
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(x[i][j]==2048)
a=1;
}
}
}
return a;
}
void add()
{
int i,j;
int n=0;
if(empty() > 0)
{
while(n<16)
{
i=rand()%4;
j=rand()%4;
if(x[i][j] == 0)
{
if(rand()%100 < 80)
{
x[i][j]=2;
}
else
{
x[i][j]=4;
}
break;
}
n++;
}
}
}
void move_up()
{
int i,j,k;
can_move=0;
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
if(x[i][j] == 0)
{
for(k=i+1;k<4;k++)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
can_move=1;
break;
}
}
}
}
for(i=0;i<3;i++)
{
if(x[i][j] == x[i+1][j] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i+1][j]=0;
can_move=1;
score += x[i][j];
}
}
for(i=0;i<4;i++)
{
if(x[i][j] == 0)
{
for(k=i+1;k<4;k++)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}
void move_down()
{
int i,j,k;
can_move=0;
for(j=0;j<4;j++)
{
for(i=3;i>=0;i--)
{
if(x[i][j] == 0)
{
for(k=i-1;k>=0;k--)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
can_move=1;
break;
}
}
}
}
for(i=3;i>0;i--)
{
if(x[i][j] == x[i-1][j] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i-1][j]=0;
can_move=1;
score += x[i][j];
}
}
for(i=3;i>=0;i--)
{
if(x[i][j] == 0)
{
for(k=i-1;k>=0;k--)
{
if(x[k][j] != 0)
{
x[i][j]=x[k][j];
x[k][j]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}
void move_left()
{
int i,j,k;
can_move=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(x[i][j] == 0)
{
for(k=j+1;k<4;k++)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
can_move=1;
break;
}
}
}
}
for(j=0;j<3;j++)
{
if(x[i][j] == x[i][j+1] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i][j+1]=0;
can_move=1;
score += x[i][j];
}
}
for(j=0;j<3;j++)
{
if(x[i][j] == 0)
{
for(k=j+1;k<4;k++)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}
void move_right()
{
int i,j,k;
can_move=0;
for(i=0;i<4;i++)
{
for(j=3;j>=0;j--)
{
if(x[i][j] == 0)
{
for(k=j-1;k>=0;k--)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
can_move=1;
break;
}
}
}
}
for(j=3;j>0;j--)
{
if(x[i][j] == x[i][j-1] && x[i][j] != 0)
{
x[i][j] *= 2;
x[i][j-1]=0;
can_move=1;
score += x[i][j];
}
}
for(j=3;j>=0;j--)
{
if(x[i][j] == 0)
{
for(k=j-1;k>=0;k--)
{
if(x[i][k] != 0)
{
x[i][j]=x[i][k];
x[i][k]=0;
break;
}
}
}
}
}
if(can_move == 1)
{
add();
}
}
void out()
{
int i,j;
system("cls");
for(i=0;i<10;i++)
{
if(i==0)printf("┏━━┳━━┳━━┳━━┓\n┃ ┃ ┃ ┃ ┃\n┃");
else if(i==8)printf("┗━━┻━━┻━━┻━━┛\n");
else if(i==9)printf(" SCORE:%d\n",score);
else if(i%2==0)printf("┣━━╋━━╋━━╋━━┫\n┃ ┃ ┃ ┃ ┃\n┃");
else
{
for(j=0;j<4;j++)
{
if(x[i/2][j]!=0)printf("%4d",x[i/2][j]); else printf(" ");
printf("┃");
}
printf("\n");
}
}
if(win())
{printf("You are win!");}
if(!check())
{printf("Game over!");}
}
int main()
{
unsigned char key;
add();
add();
out();
while(1)
{
key = getch();
switch(key)
{
case 'w': move_up(); break;
case 'a': move_left(); break;
case 's': move_down(); break;
case 'd': move_right(); break;
}
out();
}
return 0;
}
以上就是使用C语言怎么实现一个2048游戏,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。