c推箱子

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>

int main()
{
    int mg[8][8]={0,0,1,1,1,1,0,0,
                0,0,1,2,2,1,0,0,
                0,1,1,0,2,1,1,0,
                0,1,0,0,3,2,1,0,
                1,1,0,3,0,0,1,1,
                1,0,0,1,3,3,0,1,
                1,0,0,4,0,0,0,1,
                1,1,1,1,1,1,1,1};
    int xrx=6,xry=3;
    int bs=0;
    int wcx=0;
    while(3!=wcx)
    {
        system("clear");                         
        for(int i=0;i<8;i++)                    //" "表示空地,"X"表示墙,"."表示箱子该推到的位置,"
                                                //N"表示箱子,"*"表示人物,"O"表示箱子推到的位置
        {
            for(int j=0;j<8;j++)
            {
                if(0==mg[i][j])
                {
                    printf(" ");
                }
                if(1==mg[i][j])
                {
                    printf("X");
                }
                if(2==mg[i][j])
                {
                    printf(".");
                }
                if(3==mg[i][j])
                {
                    printf("N");
                }
                if(4==mg[i][j])
                {
                    printf("*");
                }
                if(5==mg[i][j])
                {
                    printf("O");
                    wcx++;
                }
                if(6==mg[i][j])
                {
                    printf("*");
                }
            }
            printf("\n");
        }
        printf("步数:%d",bs);
        if(wcx==4)
        {
            printf("\n恭喜通关!");
            return 0;
        }
        wcx=0;
        int key = getch();
        printf("%d\n",key);
        switch(key)
        {
            case 186:
            if(mg[xrx][xry-1]==0 || mg[xrx][xry-1]==2)
            {
                mg[xrx][xry]-=4;
                mg[xrx][--xry]+=4;
                bs++;
            }
            else if(mg[xrx][xry-1]==3 && mg[xrx][xry-2]==0 || mg[xrx][xry-2]==2)
            {
                mg[xrx][xry]-=4;
                mg[xrx][--xry]+=1;
                mg[xrx][xry-1]+=3;
                bs++;
            }
            else if(mg[xrx][xry-1]==5 && mg[xrx][xry-2]==2)
            {
                mg[xrx][xry]-=4;
                mg[xrx][--xry]+=1;
                mg[xrx][xry-1]+=3;
                bs++;
            }
            break;
            case 185:
            if(mg[xrx][xry+1]==0 || mg[xrx][xry+1]==2)
            {
                mg[xrx][xry]-=4;
                mg[xrx][++xry]+=4;
                bs++;
            }
            else if(mg[xrx][xry+1]==3 && mg[xrx][xry+2]==0 || mg[xrx][xry+2]==2)
            {
                mg[xrx][xry]-=4;
                mg[xrx][++xry]+=1;
                mg[xrx][xry+1]+=3;
                bs++;
            }
            else if(mg[xrx][xry+1]==5 && mg[xrx][xry+2]==2)
            {
                mg[xrx][xry]-=4;
                mg[xrx][++xry]+=1;
                mg[xrx][xry+1]+=3;
                bs++;
            }
            break;
            case 183:
            if(mg[xrx-1][xry]==0 || mg[xrx-1][xry]==2)
            {
                mg[xrx][xry]-=4;
                mg[--xrx][xry]+=4;
                bs++;
            }
            else if(mg[xrx-1][xry]==3 && mg[xrx-2][xry]==0 || mg[xrx-2][xry]==2)
            {
                mg[xrx][xry]-=4;
                mg[--xrx][xry]+=1;
                mg[xrx-1][xry]+=3;
                bs++;
            }
            else if(mg[xrx-1][xry]==5 && mg[xrx-2][xry]==2)
            {
                mg[xrx][xry]-=4;
                mg[--xrx][xry]+=1;
                mg[xrx-1][xry]+=3;
                bs++;
            }
            break;
            case 184:
            if(mg[xrx+1][xry]==0 || mg[xrx+1][xry]==2)
            {
                mg[xrx][xry]-=4;
                mg[++xrx][xry]+=4;
                bs++;
            }
            else if(mg[xrx+1][xry]==3 && mg[xrx+2][xry]==0 || mg[xrx+2][xry]==2)
            {
                mg[xrx][xry]-=4;
                mg[++xrx][xry]+=1;
                mg[xrx+1][xry]+=3;
                bs++;
            }
            else if(mg[xrx+1][xry]==5 && mg[xrx+2][xry]==2)
            {
                mg[xrx][xry]-=4;
                mg[++xrx][xry]+=1;
                mg[xrx+1][xry]+=3;
                bs++;
            }
            break;
        }

    }
}

 

posted @ 2020-07-13 20:32  竹kj  阅读(143)  评论(0编辑  收藏  举报