码迷,mamicode.com
首页 > 其他好文 > 详细

2048

时间:2018-11-15 13:35:55      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:ret   print   pre   game   unsigned   size   sig   bool   ini   

#include<bits/stdc++.h>
#include<conio.h>
using namespace std;

const int maxn=1e2;
int grid[maxn][maxn];
int N,M;
vector<pair<int,int> > rec;

void init()
{
    srand((unsigned)time(NULL));
    memset(grid,0,sizeof grid);
    for(int i=1;i<=N;++i)
    {
        for(int j=1;j<=M;++j)rec.push_back(make_pair(i,j));
    }
}
void print()
{
    for(int i=1;i<=N;++i)
    {
        for(int j=1;j<=M;++j)
        {
            if(grid[i][j]==0)printf("     ");
            else printf("%4d ",grid[i][j]);
        }
        printf("\n\n\n\n");
    }
}
void left()
{
    for(int i=1;i<=N;++i)
    {
        int pos=1,tmp=0;
        for(int j=1;j<=M;++j)
        {
            if(grid[i][j]==0)continue;
            int get=grid[i][j];
            grid[i][j]=0;
            if(get==tmp)
            {
                grid[i][pos-1]*=2;
                tmp=0;
            }
            else
            {
                grid[i][pos++]=get;
                tmp=get;
            }
        }
    }
}
void right()
{
    for(int i=1;i<=N;++i)
    {
        int pos=M,tmp=0;
        for(int j=M;j>=1;--j)
        {
            if(grid[i][j]==0)continue;
            int get=grid[i][j];
            grid[i][j]=0;
            if(get==tmp)
            {
                grid[i][pos+1]*=2;
                tmp=0;
            }
            else
            {
                grid[i][pos--]=get;
                tmp=get;
            }
        }
    }
}
void up()
{
    for(int i=1;i<=M;++i)
    {
        int pos=1,tmp=0;
        for(int j=1;j<=N;++j)
        {
            if(grid[j][i]==0)continue;
            int get=grid[j][i];
            grid[j][i]=0;
            if(get==tmp)
            {
                grid[pos-1][i]*=2;
                tmp=0;
            }
            else
            {
                grid[pos++][i]=get;
                tmp=get;
            }
        }
    }
}
void down()
{
    for(int i=1;i<=M;++i)
    {
        int pos=N,tmp=0;
        for(int j=N;j>=1;--j)
        {
            if(grid[j][i]==0)continue;
            int get=grid[j][i];
            grid[j][i]=0;
            if(get==tmp)
            {
                grid[pos+1][i]*=2;
                tmp=0;
            }
            else
            {
                grid[pos--][i]=get;
                tmp=get;
            }
        }
    }
}
bool push()
{
    int sz=rec.size();
    if(sz==0)return false;
    int a;
    a=rand()%sz;
    grid[rec[a].first][rec[a].second]=(rand()%10)>7?4:2;
    return true;
}
int main()
{
    system("cls");
    printf("N = ");
    scanf("%d",&N);
    printf("M = ");
    scanf("%d",&M);
    init();
    char ch=0;
    do{
        if(ch==‘a‘)left();
        else if(ch==‘d‘)right();
        else if(ch==‘w‘)up();
        else if(ch==‘s‘)down();
        else if(ch!=0)continue;
        rec.clear();
        for(int i=1;i<=N;++i)
        {
            for(int j=1;j<=M;++j)
            {
                if(grid[i][j]==0)rec.push_back(make_pair(i,j));
            }
        }
        system("cls");
        if(!push())
        {
            printf("Game Over\n");
            break;
        }
        print();
    }while((ch=getch()));
    printf("Try again ? y/n\n");
    //getch();
    ch=getch();
    if(ch==‘y‘)main();
    else return 0;
}

2048

标签:ret   print   pre   game   unsigned   size   sig   bool   ini   

原文地址:https://www.cnblogs.com/maoruimas/p/9962692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!