test2048

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <windows.h>
#include <conio.h>


using namespace std;


int r1=0,r2=0;
int x[4][4]={0};
int x1[4][4]={0};
int score=0;


void out()
{
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
            cout<<x[i][j]<<"\t";
        cout<<endl;
    }
}


void start()
{
    int num=0;
    int t[4][4]={0};
    srand(time(NULL)%100);
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            if(x[i][j]==0)
            {
                num++;
                t[i][j]=num;
            }
        }
    }
    r1=rand()%num+1;
    r2=rand()%8;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            if(t[i][j]==r1)
            {
                if(r2==0){x[i][j]=4;break;}
                if(r2!=0){x[i][j]=2;break;}
            }
        }
    }
}


int check()
{
    int f=1;//0通过 1结束 2胜利
    for(int i=0;i<16;i++)
    {
        if(x[i/4][i%4]==2048)
        {
            cout<<"You Win!"<<endl;
            f=2;
            break;
        }
    }
    if(f==1)
    for(int i=0;i<9;i++)
    {
        if(x[i/3][i%3]==x[i/3][i%3+1] || x[i/3][i%3]==x[i/3+1][i%3] || x[i/3][i%3]==0)
        {f=0;break;}
        if(x[3][i%3]==x[3][i%3+1] || x[i/3][3]==x[i/3+1][3] || x[3][i%3]*x[i/3][3]*x[3][3]==0)
        {f=0;break;}
    }
    if(f==1)cout<<"Game Over"<<endl;
    out();
    cout<<"score:"<<score<<endl;
    if(f==1 || f==2)
    {
        system("pause");
        return 0;
    }
}


void in()
{
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            x1[i][j]=x[i][j];
}


int compare()
{
    int f=0;
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
            if(x[i][j]!=x1[i][j])
            {
                f=1;
                break;
            }
    return f;
}


void move(int way)
{
    if(way==1)//right
    {
        for(int i=0;i<4;i++)
        for(int m=0;m<3;m++)
            for(int j=3;j>0;j--)
            {
                if(x[i][j]==0)
                {
                    for(int k=j;k>0;k--)
                        x[i][k]=x[i][k-1];
                    x[i][0]=0;
                }
            }
        for(int i=0;i<4;i++)
        {
            for(int j=3;j>0;j--)
            {
                if(x[i][j]==x[i][j-1])
                {
                    x[i][j]=x[i][j]+x[i][j-1];
                    score+=x[i][j];
                    for(int k=j-1;k>0;k--)
                        x[i][k]=x[i][k-1];
                    x[i][0]=0;
                }
            }
        }
    }
/
    if(way==2)//down
    {
        for(int i=0;i<4;i++)
        for(int m=0;m<3;m++)
            for(int j=3;j>0;j--)
            {
                if(x[j][i]==0)
                {
                    for(int k=j;k>0;k--)
                        x[k][i]=x[k-1][i];
                    x[0][i]=0;
                }
            }
        for(int i=0;i<4;i++)
        {
            for(int j=3;j>0;j--)
            {
                if(x[j][i]==x[j-1][i])
                {
                    x[j][i]=x[j][i]+x[j-1][i];
                    score+=x[j][i];
                    for(int k=j-1;k>0;k--)
                        x[k][i]=x[k-1][i];
                    x[0][i]=0;
                }
            }
        }
    }

    if(way==3)//left
    {
        for(int i=0;i<4;i++)
        for(int m=0;m<3;m++)
            for(int j=0;j<3;j++)
            {
                if(x[i][j]==0)
                {
                    for(int k=j;k<3;k++)
                        x[i][k]=x[i][k+1];
                    x[i][3]=0;
                }
            }
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<3;j++)
            {
                if(x[i][j]==x[i][j+1])
                {
                    x[i][j]=x[i][j]+x[i][j+1];
                    score+=x[i][j];
                    for(int k=j+1;k<3;k++)
                        x[i][k]=x[i][k+1];
                    x[i][3]=0;
                }
            }
        }
    }

    if(way==4)//up
    {
        for(int i=0;i<4;i++)
        for(int m=0;m<3;m++)
            for(int j=0;j<3;j++)
            {
                if(x[j][i]==0)
                {
                    for(int k=j;k<3;k++)
                        x[k][i]=x[k+1][i];
                    x[3][i]=0;
                }
            }
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<3;j++)
            {
                if(x[j][i]==x[j+1][i])
                {
                    x[j][i]=x[j][i]+x[j+1][i];
                    score+=x[j][i];
                    for(int k=j+1;k<3;k++)
                        x[k][i]=x[k+1][i];
                    x[3][i]=0;
                }
            }
        }
    }
}
int AI(int Array[4][4])
{
int count=0;
int Array1[16][2]={};
 for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
{
if(Array[i][j]!=0)
{
Array1[count][0]=i;
Array1[count][1]=j;
count++;
}
}         
    }
    if(count==2)
{
//两个数大小不一 1个是4一个是2
if(Array[Array1[0][0]][Array1[0][1]]>Array[Array1[1][0]][Array1[1][1]])
{
if(Array1[0][1]>=Array1[1][1])
{
return 2;
}
else
{
return 4;
}
}
//两个数大小一致 1个是4一个是2
else
{
return 2;
}
}
}


int main()
{
    char con;
    start();
    start();
    out();
    for(;;)
    {
        con=getch();
        system("cls");
        if(con=='w')move(4);
        if(con=='a')move(3);
        if(con=='s')move(2);
        if(con=='d')move(1);
        out();
        Sleep(200);
        system("cls");
        if(compare()==1)
            start();
        check();
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值