大家来写2048 。。。控制台版

郑胡媚
2023-12-01

跑到蜀南竹海去耍了。。。作为一个懒得走路的人。。。

不过是换个地方继续上网罢了。。。

闲的无聊就玩玩2048。。。于是自己也写了一个。。。


#include<cstdio>
#include<cstring>
#include<time.h>
#include<conio.h>
#include<algorithm>
using namespace std;
int a[5][5];
int xx[]={0,0,1,-1};
int yy[]={1,-1,0,0};
int point;
void inta()
{
    point=0;
    memset(a,0,sizeof(a));
    time_t t;
    time(&t);
    srand(t);
    int tmp=rand()%16;
    int i=tmp/4,j=tmp%4;
    a[i][j]=2;
}
int check()
{
    for(int i=0;i<4;i++)
    for(int j=0;j<4;j++)
    if(a[i][j]==2048)return 1;
    for(int i=0;i<4;i++)
    for(int j=0;j<4;j++)
    {
        for(int k=0;k<4;k++)
        {
            int x=i+xx[k];
            int y=j+yy[k];
            if(x<0||x>=4)continue;
            if(y<0||y>=4)continue;
            if(!a[i][j]||a[x][y]==a[i][j])
            return 0;
        }
    }
    return -1;
}
bool union_b(char in)
{
    bool flag=0;
    if(in=='K')// left
    {
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                if(a[i][j]==0)continue;
                for(int k=j+1;k<4;k++)
                {
                    if(a[i][k]==0)continue;
                    else if(a[i][k]==a[i][j])
                    {
                        a[i][j]<<=1;
                        a[i][k]=0;
                        point+=a[i][j];
                        flag=1;
                        break;
                    }
                    else break;
                }
            }
            for(int j=0;j<4;j++)
            {

                if(a[i][j]!=0)continue;
                for(int k=j+1;k<4;k++)
                {
                    if(a[i][k]==0)continue;
                    swap(a[i][j],a[i][k]);
                    flag=1;
                    break;
                }
            }
        }
    }
    else if(in=='M')//right
    {

        for(int i=0;i<4;i++)
        {
            for(int j=3;j>=0;j--)
            {
                if(a[i][j]==0)continue;
                for(int k=j-1;k>=0;k--)
                {
                    if(a[i][k]==0)continue;
                    else if(a[i][k]==a[i][j])
                    {
                        a[i][j]<<=1;
                        a[i][k]=0;
                        point+=a[i][j];
                        flag=1;
                        break;
                    }
                    else break;
                }
            }
            for(int j=3;j>=0;j--)
            {
                if(a[i][j]!=0)continue;
                for(int k=j-1;k>=0;k--)
                {
                    if(a[i][k]==0)continue;
                    swap(a[i][j],a[i][k]);
                    flag=1;
                    break;
                }
            }
        }
    }
    else if(in=='H')//up
    {
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                if(a[j][i]==0)continue;
                for(int k=j+1;k<4;k++)
                {
                    if(a[k][i]==0)continue;
                    else if(a[k][i]==a[j][i])
                    {
                        a[j][i]<<=1;
                        a[k][i]=0;
                        point+=a[i][j];
                        flag=1;
                        break;
                    }
                    else break;
                }
            }
            for(int j=0;j<4;j++)
            {

                if(a[j][i]!=0)continue;
                for(int k=j+1;k<4;k++)
                {
                    if(a[k][i]==0)continue;
                    swap(a[j][i],a[k][i]);
                    flag=1;
                    break;
                }
            }
        }
    }
    else if(in=='P')//down
    {
        for(int i=0;i<4;i++)
        {
            for(int j=3;j>=0;j--)
            {
                if(a[j][i]==0)continue;
                for(int k=j-1;k>=0;k--)
                {
                    if(a[k][i]==0)continue;
                    else if(a[k][i]==a[j][i])
                    {
                        a[j][i]<<=1;
                        a[k][i]=0;
                        point+=a[i][j];
                        flag=1;
                        break;
                    }
                    else break;
                }
            }
            for(int j=3;j>=0;j--)
            {
                if(a[j][i]!=0)continue;
                for(int k=j-1;k>=0;k--)
                {
                    if(a[k][i]==0)continue;
                    swap(a[j][i],a[k][i]);
                    flag=1;
                    break;
                }
            }
        }
    }
    return flag;
}
void build()
{
    while(1)
    {
        int tmp=rand()%16;
        int i=tmp/4,j=tmp%4;
        if(!a[i][j])
        {
            a[i][j]=2;
            break;
        }
    }
}
void show()
{
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        printf("%-6d",a[i][j]);
        printf("\n\n");
    }
    printf("\n\npoint: %d\n",point);
}
int main()
{
    inta();
    puts("you job is sum == 2048");
    puts("input:\n up down left right\n");
    system("pause");
    int tmp;
    char in;
    while(1)
    {
        system("cls");
        tmp=check();
        show();
        if(tmp==-1)
        {
            system("cls");
            puts("Game Over\nYour point:");
            printf("%d\n",point);
            break;
        }
        else if(tmp==1)
        {
            system("cls");
            puts("You win\nYour point:");
            printf("%d\n",point);
            break;
        }
        in=getch();printf("%c\n",in);
        if(union_b(in))
        build();
    }
    return 0;
}



 类似资料: