千家信息网

linux控制台下如何实现2048小游戏

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇"linux控制台下如何实现2048小游戏"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2026年11月04日linux控制台下如何实现2048小游戏

这篇"linux控制台下如何实现2048小游戏"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"linux控制台下如何实现2048小游戏"文章吧。

废话少说,直接奉上代码:

main.c

复制代码 代码如下:

#include"2048.h"
int main()
{
start_game();
return 0;
}

2048.h

复制代码 代码如下:

#ifndef _2048_h_
#define _2048_h_
#include
#include
#include
#include
//#include
//#include

2048.c

复制代码 代码如下:

#include"2048.h"
int start_game()
{
system("clear");
printf("\33[?25l");
print_start();
ran_appear();
print_num();
print_score();
print_getchar();
printf("\33[?25h");
}
int print_getchar()
{
struct termios old,new;
int ch;
tcgetattr(0,&old);
tcgetattr(0,&new);
new.c_lflag = new.c_lflag &~(icanon |echo);
new.c_cc[vtime]=0;
new.c_cc[vmin]=1;
tcsetattr(0,tcsanow,&new);
while(1)
{
if(end_flag==1)
break;
ch=getchar();
if(ch=='\33')
{
ch=getchar();
if(ch=='[')
{
ch=getchar();
switch(ch)
{
case 'a':
mov_up();
is_full();
break;
case 'b':
mov_down();
is_full();
break;
case 'c':
mov_right();
is_full();
break;
case 'd':
mov_left();
is_full();
break;
default:
break;
}
}
}
if(ch=='q')
break;
fflush(null);
}
tcsetattr(0,tcsanow,&old);
}
int print_start()
{
int i,j;
for(i=0;i{
for(j=0;j{
if(start_back0[i][j]=='@')
{
printf("\33[%dm",back);
printf("%c",start_back0[i][j]);
printf("\33[0m");
}
else
if(start_back0[i][j]!=' ')
{
printf("\33[%dm",bold);
printf("%c",start_back0[i][j]);
printf("\33[0m");
}
else
{
printf("%c",start_back0[i][j]);
}
}
printf("\n");
}
}
char *itoc_2048(int data)
{
int x=0;
int i=4;
while(i--)
{
tmp[i]=data+'0';
data=data/10;
}
return tmp;
}
int is_full()
{
int i,j;
int count=0;
for(i=0;ifor(j=0;j{
if(arr[i][j]==0)
count++;
}
if(count==0)
{
for(i=0;ifor(j=0;j{
if(arr[i][j]==arr[i][j+1])
return 0;
if(arr[j][i]==arr[j+1][i])
return 0;
}
end_flag=1;
}
return 1;
}
int put_to(int line, int row)
{
int x,y;
int i=0;
char *p=null;
p=itoc_2048(arr[line][row]);
printf("\33[%d;%dh",3+line*4,2+row*5);
printf(" ");
printf("\33[%d;%dh",3+line*4,2+row*5);
if(arr[line][row]!=0)
for(i=0;i<4;i++)
{
if(p[i]=='0'&&i<1)
printf(" ");
else
if(p[i]!='0')
{
printf("\33[%dm",num_color);
printf("%c",p[i]);
printf("\33[0m");
}
}
else
if(arr[line][row]==0)
printf(" ");
}
int print_num()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
put_to(i,j);
}
print_score()
{
int x,y;
printf("\33[19;9h");
printf("%d",score);
}
int ran_appear()
{
int line,row;
int i=0;
int j=0;
int x,y;
int arr1[16][2]={0};
if(print_appear_flag==1)
return 0;
for(x=0;x<4;x++)
for(y=0;y<4;y++)
{
if(arr[x][y]==0)
{
arr1[i][0]=x;
arr1[i][1]=y;
i++;
}
}
srand(time(null));
j=rand()%i;
if(rand()%2==0)
{
arr[arr1[j][0]][arr1[j][1]]=4;
//arr[arr1[j][0]][arr1[j][1]]=2;
}
else
arr[arr1[j][0]][arr1[j][1]]=2;
}
int mov_left()
{
int count=0;
count=mov_l()+count;
count=sum_2048_l()+count;
if(count==-2)
print_appear_flag=1;
mov_l();
ran_appear();
print_num();
return 0;
}
int mov_right()
{
int count=0;
count=mov_r()+count;
count=sum_2048_r()+count;
if(count==-2)
print_appear_flag=1;
mov_r();
ran_appear();
print_num();
return 0;
}
int mov_up()
{
int count=0;
count=mov_u()+count;
count=sum_2048_u()+count;
if(count==-2)
print_appear_flag=1;
mov_u();
ran_appear();
print_num();
return 0;
}
int mov_down()
{
int count=0;
count=mov_d()+count;
count=sum_2048_d()+count;
if(count==-2)
print_appear_flag=1;
mov_d();
ran_appear();
print_num();
return 0;
}
int swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
int mov_l()
{
int line,row;
int i=3;
int count=0;
while(i--)
{
for(line=0;line<4;line++)
for(row=0;row<3;row++)
{
if(arr[line][row]==0&&arr[line][row+1]!=0)
{
swap(&arr[line][row],&arr[line][row+1]);
count++;
print_appear_flag=0;
}
}
}
if(count==0)
return -1;
return 0;
}
int sum_2048_l()
{
int line,row;
int count=0;
for(row=1;row<4;row++)
for(line=0;line<4;line++)
{
if(arr[line][row]!=0&&arr[line][row-1]==arr[line][row])
{
arr[line][row-1]=arr[line][row]+arr[line][row-1];
arr[line][row]=0;
score=score+arr[line][row-1];
print_score();
count++;
print_appear_flag=0;
}
}
if(count==0)
return -1;
return 0;
}
int mov_r()
{
int line,row;
int i=3;
int count=0;
while(i--)
{
for(line=0;line<4;line++)
for(row=0;row<3;row++)
{
if(arr[line][row]!=0&&arr[line][row+1]==0)
{
swap(&arr[line][row],&arr[line][row+1]);
count++;
print_appear_flag=0;
}
}
}
if(count==0)
return -1;
return 0;
}
int sum_2048_r()
{
int line,row;
int count=0;
for(row=2;row>=0;row--)
for(line=0;line<4;line++)
{
if(arr[line][row]!=0&&arr[line][row+1]==arr[line][row])
{
arr[line][row+1]=arr[line][row]+arr[line][row+1];
arr[line][row]=0;
score=score+arr[line][row+1];
print_score();
count++;
print_appear_flag=0;
}
}
if(count==0)
return -1;
return 0;
}
int mov_u()
{
int line,row;
int i=3;
int count=0;
while(i--)
{
for(line=0;line<3;line++)
for(row=0;row<4;row++)
{
if(arr[line][row]==0&&arr[line+1][row]!=0)
{
swap(&arr[line][row],&arr[line+1][row]);
count++;
print_appear_flag=0;
}
}
}
if(count==0)
return -1;
return 0;
}
int sum_2048_u()
{
int line,row;
int count=0;
for(line=1;line<4;line++)
for(row=0;row<4;row++)
{
if(arr[line][row]!=0&&arr[line-1][row]==arr[line][row])
{
arr[line-1][row]=arr[line][row]+arr[line-1][row];
arr[line][row]=0;
score=score+arr[line-1][row];
print_score();
count++;
print_appear_flag=0;
}
}
if(count==0)
return -1;
return 0;
}
int mov_d()
{
int line,row;
int i=3;
int count=0;
while(i--)
{
for(line=0;line<3;line++)
for(row=0;row<4;row++)
{
if(arr[line][row]!=0&&arr[line+1][row]==0)
{
swap(&arr[line][row],&arr[line+1][row]);
count++;
print_appear_flag=0;
}
}
}
if(count==0)
return -1;
return 0;
}
int sum_2048_d()
{
int line,row;
int count=0;
for(line=2;line>=0;line--)
for(row=0;row<4;row++)
{
if(arr[line][row]!=0&&arr[line+1][row]==arr[line][row])
{
arr[line+1][row]=arr[line][row]+arr[line+1][row];
arr[line][row]=0;
score=score+arr[line+1][row];
print_score();
count++;
print_appear_flag=0;
}
}
if(count==0)
return -1;
return 0;
}

以上就是关于"linux控制台下如何实现2048小游戏"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

代码 内容 小游戏 控制 文章 知识 篇文章 上代 价值 大部分 就是 废话 更多 步骤 知识点 行业 资讯 资讯频道 频道 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 上海睿民互联网科技有限公司 广州万易互联网科技有限公司 嘟嘟瓜互联网科技 互联网科技上市公司 互联网科技公司有哪些 互联网养老 桔豆科技 互联网科技创新企业排名 恒生科技互联网指数分析 互联网科技中介 武汉健翔互联网络科技有限公司 花神(南京)互联网科技有限公司 互联网科技与大数据专业 四川慕妮娅互联网科技有限公司 明优互联网科技有限公司 上海钢联属于互联网科技股吗 科技信息时代互联网发展 安徽九吞吴互联网科技有限公司 优雇互联网科技有限公司 每日互联网科技新闻 互联网科技产业 互联网最新的科技有限公司 艾特科技互联网 小马过河互联网科技 奇士达互联网科技 中国科技互联网公司收入 中国的互联网科技企业的崛起 互联网科技研发水平 互联网高科技行业有哪些企业 长沙易易互联网科技有限公司
0