Home > Operation and Maintenance > Linux Operation and Maintenance > How to implement 2048 mini game in Linux

How to implement 2048 mini game in Linux

WBOY
Release: 2023-05-21 13:19:07
forward
1529 people have browsed it

复制代码 代码如下:

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

复制代码 代码如下:

#ifndef _2048_h_#define _2048_h_#include<stdio.h>#include<stdlib.h>#include<string.h>#include<termios.h>//#include<unstd.h>//#include<time/sys.h>#define line 21#define row   22#define arr_l 4#define arr_r 4#define num_color 32#define back 49#define bold 31static int line_location=0;static int row_location=0;static int arr[4][4]={0};static char tmp[5]="\0";static int end_flag=0;static int score=0;static int print_appear_flag=0;static char start_back0[line][row]={    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@    @    @    @    @",    "@    @    @    @    @",    "@    @    @    @    @",    "@@@@@@@@@@@@@@@@@@@@@",    "@                   @",    "@ score:            @",    "@                   @",    "@@@@@@@@@@@@@@@@@@@@@"};int print_start();char * itoc_2048(int data);int print_num();int  mov_left();int swap_if0l();int swap();int put_to(int line, int row);#endif
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==&#39;\33&#39;)        {            ch=getchar();            if(ch==&#39;[&#39;)            {                ch=getchar();                switch(ch)                {                    case &#39;a&#39;:                        mov_up();                        is_full();                        break;                    case &#39;b&#39;:                        mov_down();                        is_full();                        break;                    case &#39;c&#39;:                        mov_right();                        is_full();                        break;                    case &#39;d&#39;:                        mov_left();                        is_full();                        break;                    default:                        break;                }            }        }        if(ch==&#39;q&#39;)            break;        fflush(null);    }tcsetattr(0,tcsanow,&old);}int print_start(){      int i,j;    for(i=0;i<line;i++)    {        for(j=0;j<row;j++)        {            if(start_back0[i][j]==&#39;@&#39;)            {                printf("\33[%dm",back);                printf("%c",start_back0[i][j]);                printf("\33[0m");            }            else                if(start_back0[i][j]!=&#39; &#39;)                {                    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%10+&#39;0&#39;;        data=data/10;    }    return tmp;}int is_full(){    int i,j;    int count=0;    for(i=0;i<arr_l;i++)        for(j=0;j<arr_r;j++)        {            if(arr[i][j]==0)                count++;        }    if(count==0)    {        for(i=0;i<arr_l;i++)            for(j=0;j<arr_r-1;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]==&#39;0&#39;&&i<1)                printf(" ");            else            if(p[i]!=&#39;0&#39;)            {                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;}
Copy after login

Linux有哪些版本

Linux的版本有:Deepin、UbuntuKylin、Manjaro、LinuxMint、Ubuntu等版本。其中Deepin是国内发展最好的Linux发行版之一;UbuntuKylin是基于Ubuntu的衍生发行版;Manjaro是基于Arch的Linux发行版;LinuxMint默认的Cinnamon桌面类似Windows XP简单易用;Ubuntu则是以桌面应用为主的Linux操作系统。

The above is the detailed content of How to implement 2048 mini game in Linux. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template