用 c 写了一个2048的程序,感觉界面还是比较友好的,欢迎试玩~

另附代码:

#include<bits/stdc++.h>
#include<conio.h>
using namespace std;
#define out1 printf(" *---------------------------*\n")
#define out2 printf(" | | | | |\n")
#define out3 printf(" | ")
int a[4][4]={0};
int flag=0;
int num=0;long long int score=0;
void out(int x)
{
    if(x==0)printf(" ");
    else if(x<10)printf(" %d ",x);
    else if(x<100)printf(" %d ",x);
    else if(x<1000)printf(" %d",x);
    else if(x<10000)printf("%d",x);
}

void output()
{
    printf("操作说明:w、a、s、d 操作\n\n");
    out1;
    for(int i=0;i<4;i++)
    {
        out2;
        for(int j=0;j<4;j++)
        {
            out3;
            out(a[i][j]);

        }
        printf(" |\n");
        out2;out1;
    }
    printf("\n 步数:%d 得分:%lld\n\n",num,score);
    for(int i=0;i<70;i++)
    {
        printf(" ");
    }
    printf("制作人qq:1040865060\n");
}

void change(char x)
{
    flag=0;
    if(x=='w')//
    {
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                for(int k=1;k<4;k++)
                {
                    if(a[k-1][i]==0&&a[k][i]!=0)
                    {
                        a[k-1][i]=a[k][i];
                        a[k][i]=0;
                        flag=1;
                        system("cls");output();
                    }
                }
            }
            if(a[1][i]==a[0][i]&&a[0][i]!=0)
            {
                a[0][i]*=2;
                score+=a[0][i];
                flag=1;
                a[1][i]=a[2][i];
                a[2][i]=a[3][i];
                a[3][i]=0;
                system("cls");output();
                if(a[1][i]==a[2][i]&&a[1][i]!=0)
                {
                    a[1][i]*=2;
                    a[2][i]=0;
                    score+=a[1][i];
                    system("cls");output();
                }
            }
            if(a[1][i]==a[2][i]&&a[1][i]!=0)
            {
                flag=1;
                a[1][i]*=2;
                score+=a[1][i];
                a[2][i]=0;
                system("cls");output();
            }
            if(a[2][i]==a[3][i]&&a[2][i]!=0)
            {
                flag=1;
                a[2][i]*=2;
                score+=a[2][i];
                a[3][i]=0;
                system("cls");output();
            }
        }
    }
    if(x=='s')//
    {
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                for(int k=2;k>=0;k--)
                {
                    if(a[k+1][i]==0&&a[k][i]!=0)
                    {
                        flag=1;
                        a[k+1][i]=a[k][i];
                        a[k][i]=0;
                        system("cls");output();
                    }
                }
            }
            if(a[3][i]==a[2][i]&&a[2][i]!=0)
            {
                flag=1;
                a[3][i]*=2;
                score+=a[3][i];
                a[2][i]=a[1][i];
                a[1][i]=a[0][i];
                a[0][i]=0;
                system("cls");output();
                if(a[1][i]==a[2][i]&&a[1][i]!=0)
                {
                    a[2][i]*=2;
                    score+=a[2][i];
                    a[1][i]=0;
                    system("cls");output();
                }
            }
            if(a[1][i]==a[2][i]&&a[1][i]!=0)
            {
                flag=1;
                a[2][i]*=2;
                score+=a[2][i];
                a[1][i]=0;
                system("cls");output();
            }
            if(a[0][i]==a[1][i]&&a[0][i]!=0)
            {
                flag=1;
                a[1][i]*=2;
                score+=a[1][i];
                a[0][i]=0;
                system("cls");output();
            }
        }
    }

    if(x=='d')//
    {
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                for(int k=2;k>=0;k--)
                {
                    if(a[i][k+1]==0&&a[i][k]!=0)
                    {
                        flag=1;
                        a[i][k+1]=a[i][k];
                        a[i][k]=0;
                        system("cls");output();
                    }
                }
            }
            if(a[i][3]==a[i][2]&&a[i][2]!=0)
            {
                flag=1;
                a[i][3]*=2;
                score+=a[i][3];
                a[i][2]=a[i][1];
                a[i][1]=a[i][0];
                a[i][0]=0;
                system("cls");output();
                if(a[i][1]==a[i][2]&&a[i][1]!=0)
                {
                    a[i][2]*=2;
                    score+=a[i][2];
                    a[i][1]=0;
                    system("cls");output();
                }
            }
            if(a[i][1]==a[i][2]&&a[i][1]!=0)
            {
                flag=1;
                a[i][2]*=2;
                score+=a[i][2];
                a[i][1]=0;
                system("cls");output();
            }
            if(a[i][0]==a[i][1]&&a[i][0]!=0)
            {
                flag=1;
                a[i][1]*=2;
                score+=a[i][1];
                a[i][0]=0;
                system("cls");output();
            }
        }
    }
    if(x=='a')//
    {
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                for(int k=1;k<4;k++)
                {
                    if(a[i][k-1]==0&&a[i][k]!=0)
                    {
                        flag=1;
                        a[i][k-1]=a[i][k];
                        a[i][k]=0;
                        system("cls");output();
                    }
                }
            }
            if(a[i][1]==a[i][0]&&a[i][0]!=0)
            {
                flag=1;
                a[i][0]*=2;
                score+=a[i][0];
                a[i][1]=a[i][2];
                a[i][2]=a[i][3];
                a[i][3]=0;
                system("cls");output();
                if(a[i][1]==a[i][2]&&a[i][1]!=0)
                {
                    a[i][1]*=2;
                    score+=a[i][1];
                    a[i][2]=0;
                    system("cls");output();
                }
            }
            if(a[i][1]==a[i][2]&&a[i][1]!=0)
            {
                flag=1;
                a[i][1]*=2;
                score+=a[i][1];
                a[i][2]=0;
                system("cls");output();
            }
            if(a[i][2]==a[i][3]&&a[i][2])
            {
                flag=1;
                a[i][2]*=2;
                score+=a[i][2];
                a[i][3]=0;
                system("cls");output();
            }
        }
    }
}
bool is_full()
{
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            if(a[i][j]==0)return 0;
            if(i-1>=0&&a[i][j]==a[i-1][j])return 0;
            if(i+1<4&&a[i][j]==a[i+1][j])return 0;
            if(j-1>=0&&a[i][j]==a[i][j-1])return 0;
            if(j+1<4&&a[i][j]==a[i][j+1])return 0;
        }
    }
    return 1;
}

int main()
{
    srand( (unsigned)time( NULL ) );
    char x;
    a[rand()%4][rand()%4]=2;
    output();
    while(1)
    {
        x=getch();
        if(x!='w'&&x!='a'&&x!='s'&&x!='d')continue;
        change(x);
        num++;
        if(is_full())//输掉
        {
            system("cls");
            output();
            printf("\n\n 你输了,按'r'重新开始:\n\n");
            while(1)
            {
                x=getch();
                if(x=='r')break;
            }
            memset(a,0,sizeof(a));
            a[rand()%4][rand()%4]=2;
            system("cls");
            num=0;
            score=0;
            output();
            continue;
        }
        if(flag==0)continue;
        while(1)
        {
            int t=rand()%16;
            if(a[t/4][t%4]==0)
            {
                a[t/4][t%4]=2;
                break;
            }
        }
        system("cls");
        output();
    }

}
/*
*---------------------------*
|      |      |      |      |
| 2048 | 2048 | 2048 | 2048 |
|      |      |      |      |
*---------------------------*
|      |      |      |      |
| 2048 | 2048 | 2048 | 2048 |
|      |      |      |      |
*---------------------------*
|      |      |      |      |
| 2048 | 2048 | 2048 | 2048 |
|      |      |      |      |
*---------------------------*
|      |      |      |      |
| 2048 | 2048 | 2048 | 2048 |
|      |      |      |      |
*---------------------------*
*/