zoukankan      html  css  js  c++  java
  • 2048low版

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h> 
    char c;
    int num[6][6],step;
    
    char * d2s(int n)
    {
        switch(n)
        {
            case 0:
                return " ";
            case 2:
                return "2";
            case 4:
                return "4";
            case 8:
                return "8";
            case 16:
                return "16";
            case 32:
                return "32";
            case 64:
                return "64";
            case 128:
                return "128";
            case 256:
                return "256";
            case 512:
                return "512";
            case 1024:
                return "1024";
            case 2048:
                return "2048";
        }
    }
    
    void Show()
    {
        printf("	  请按上下左右键操作
    ");
        printf("	  当前已走步数:%d
    ",step);
        printf ("	┏━━┳━━┳━━┳━━┓
    ");
        printf ("	┃%4s┃%4s┃%4s┃%4s┃
    ",d2s(num[1][1]),d2s(num[1][2]),d2s(num[1][3]),d2s(num[1][4]));
        printf ("	┣━━╋━━╋━━╋━━┫
    ");
        printf ("	┃%4s┃%4s┃%4s┃%4s┃
    ",d2s(num[2][1]),d2s(num[2][2]),d2s(num[2][3]),d2s(num[2][4]));
        printf ("	┣━━╋━━╋━━╋━━┫
    ");
        printf ("	┃%4s┃%4s┃%4s┃%4s┃
    ",d2s(num[3][1]),d2s(num[3][2]),d2s(num[3][3]),d2s(num[3][4]));
        printf ("	┣━━╋━━╋━━╋━━┫
    ");
        printf ("	┃%4s┃%4s┃%4s┃%4s┃
    ",d2s(num[4][1]),d2s(num[4][2]),d2s(num[4][3]),d2s(num[4][4]));
        printf ("	┗━━┻━━┻━━┻━━┛
    ");
    }
    
    int NewNum()
    {
        int n=((rand()*rand()+rand())%2+1)*2;
    //    printf("%d
    ",n); 
        int i,j;
        if(c=='w'||c==' ')
        {
            i=4;
            while(j=rand()%4+1)
                if(num[i][j]==0)
                {
                    num[i][j]=n;
                    return n;
                }
        }
        else if(c=='s')
        {
            i=1;
            while(j=rand()%4+1)
                if(num[i][j]==0)
                {
                    num[i][j]=n;
                    return n;
                }
        }
        else if(c=='a')
        {
            j=4;
            while(i=rand()%4+1)
                if(num[i][j]==0)
                {
                    num[i][j]=n;
                    return n;
                }
        }
        else if(c=='d')
        {
            j=1;
            while(i=rand()%4+1)
                if(num[i][j]==0)
                {
                    num[i][j]=n;
                    return n;
                }
        }
        return 0;
    }
    
    int cal()
    {
        int i,j,ok=0,k;
        if(c=='w')
            for(j=1;j<=4;++j)
            {
                //push    
                for(i=1;i<4;++i)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i+k][j])
                        {
                            ok=1;
                            num[i][j]=num[i+k][j];
                            num[i+k][j]=0;
                            break;
                        }
                        if(i+k>4)
                            break;
                    }
                    if(i+k>4)
                        break;                
                }            
                //calculate
                for(i=1;i<=3;++i)
                {
                    if(num[i][j]==num[i+1][j]&&num[i][j]!=0)
                    {
                        ok=1;
                        num[i][j]*=2;
                        num[i+1][j]=0;
                    }                
                }    
                //push    
                for(i=1;i<4;++i)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i+k][j])
                        {
                            ok=1;
                            num[i][j]=num[i+k][j];
                            num[i+k][j]=0;
                            break;
                        }
                        if(i+k>4)
                            break;
                    }
                    if(i+k>4)
                        break;                
                }
            }
        if(c=='s')
            for(j=1;j<=4;++j)
            {
                //push    
                for(i=4;i>0;--i)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i-k][j])
                        {
                            ok=1;
                            num[i][j]=num[i-k][j];
                            num[i-k][j]=0;
                            break;
                        }
                        if(i-k<0)
                            break;
                    }
                    if(i-k<0)
                        break;                
                }            
                //calculate
                for(i=4;i>0;--i)
                {
                    if(num[i][j]==num[i-1][j]&&num[i][j]!=0)
                    {
                        ok=1;
                        num[i][j]*=2;
                        num[i-1][j]=0;
                    }                
                }    
                //push    
                for(i=4;i>0;--i)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i-k][j])
                        {
                            ok=1;
                            num[i][j]=num[i-k][j];
                            num[i-k][j]=0;
                            break;
                        }
                        if(i-k<0)
                            break;
                    }
                    if(i-k<0)
                        break;                
                }
            }
        if(c=='a')
            for(i=1;i<=4;++i)
            {
                //push    
                for(j=1;j<4;++j)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i][j+k])
                        {
                            ok=1;
                            num[i][j]=num[i][j+k];
                            num[i][j+k]=0;
                            break;
                        }
                        if(j+k>4)
                            break;
                    }
                    if(j+k>4)
                        break;                
                }
                //calculate
                for(j=1;j<=3;++j)
                {
                    if(num[i][j]==num[i][j+1]&&num[i][j]!=0)
                    {
                        ok=1;
                        num[i][j]*=2;
                        num[i][j+1]=0;
                    }                
                }    
                //push    
                for(j=1;j<4;++j)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i][j+k])
                        {
                            ok=1;
                            num[i][j]=num[i][j+k];
                            num[i][j+k]=0;
                            break;
                        }
                        if(j+k>4)
                            break;
                    }
                    if(j+k>4)
                        break;                
                }
            }
        if(c=='d')
            for(i=1;i<=4;++i)
            {
                //push    
                for(j=4;j>0;--j)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i][j-k])
                        {
                            ok=1;
                            num[i][j]=num[i][j-k];
                            num[i][j-k]=0;
                            break;
                        }
                        if(j-k<0)
                            break;
                    }
                    if(j-k<0)
                        break;                
                }            
                //calculate
                for(j=4;j>0;--j)
                {
                    if(num[i][j]==num[i][j-1]&&num[i][j]!=0)
                    {
                        ok=1;
                        num[i][j]*=2;
                        num[i][j-1]=0;
                    }                
                }    
                //push    
                for(j=4;j>0;--j)
                {
                    k=0;
                    while(num[i][j]==0)
                    {
                        ++k;
                        if(num[i][j-k])
                        {
                            ok=1;
                            num[i][j]=num[i][j-k];
                            num[i][j-k]=0;
                            break;
                        }
                        if(j-k<0)
                            break;
                    }
                    if(j-k<0)
                        break;                
                }
            }                    
        return ok;
    }
    
    int fail()
    {
        for(int i=1;i<=4;++i)
        {
            for(int j=1;j<=4;++j)
            {
                if(num[i][j]==0)
                    return 0;
                if(num[i][j]==num[i+1][j]||
                num[i][j]==num[i-1][j]||
                num[i][j]==num[i][j+1]||
                num[i][j]==num[i][j-1])
                {
                    return 0;
                }
            }
        }
        return 1;
    }
    
    int operate(int key)
    {
            if(key==72)
            {
                c='w';
                if(cal())
                {
                    NewNum();
                    return 1;
                }                
            }
                
            else if(key==75)
            {
                c='a';
                if(cal())
                {
                    NewNum();
                    return 1;
                }                
            }
                
            else if(key==77)
            {
                c='d';
                if(cal())
                {
                    NewNum();
                    return 1;
                }                
            }
                
            else if(key==80)
            {
                c='s';
                if(cal())
                {
                    NewNum();
                    return 1;
                }                
            }    
            return 0;
    }
    
    int success()
    {
        for(int i=1;i<=4;++i)
        {
            for(int j=1;j<=4;++j)
            {
                if(num[i][j]==2048)
                    return 1;
            }
        }
        return 0;
    }
    
    int main()
    {
        c=' ';
        int key,a=1;
        step=0;
        a=NewNum();
        while(1)
        {    
            Show();        
            if((key=getch())<0)
            {
                key=getch();        
            }
            if(fail())
            {
                printf("GAME OVER!!!
    ");            
                break;
            }    
            if(success())
            {
                printf("WIN!!!
    ");            
                break;
            }        
            if(operate(key))
            {
                step++;
            }
                
            system("cls");
        }
        system("pause");
        return 0;
    }
  • 相关阅读:
    45. 跳跃游戏 II
    BIO,AIO,NIO
    sqlyog连接阿里云mysql
    Hive的数据表HDFS的关系。
    云计算和虚拟机
    oracle入门笔记
    程序员开发协作管理工具
    IT行业的新思想来源
    docker所需的os基础
    docker源码和原理探究
  • 原文地址:https://www.cnblogs.com/Traveller-Leon/p/5129521.html
Copyright © 2011-2022 走看看