小知识: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

#define LINE 21

#define ROW   22

#define ARR_L 4

#define ARR_R 4

#define NUM_COLOR 32

#define BACK 49

#define BOLD 31

static 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==\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%10+0;

        data=data/10;

    }

    return tmp;

}

int is_full()

{

    int i,j;

    int count=0;

    for(i=0;i

        for(j=0;j

        {

            if(arr[i][j]==0)

                count++;

        }

    if(count==0)

    {

        for(i=0;i

            for(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控制台能够有所帮助。

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:CentOS利用Nginx搭建下载功能服务器

2023-4-23 4:57:49

建站知识

小知识:linux服务器下PHPCMS v9 安全配置详解

2023-4-23 5:06:49

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索