C语言推箱子小游戏

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

//♥♠♤❤♂♀★☆☯✡☆★○●◎◇◆□■△▲
//4 是墙
//1 是人
//2 是箱子
//6 目的地
//0 路
//8 完成点
#define length 8    //地图长度
#define high   8    //地图宽度
#define difficulty 2//关卡

int main(int argc, char const *argv[])
{
    system("stty -echo");       //不显示输入命令
    system("stty -icanon");     //一次性读完 不等待回车
    int Count = 0;
    int Checkpoint = 0;
    //地图制作
    int Map[difficulty][length][high] = {
        {
            4,4,4,4,4,4,4,4,
            4,4,0,1,0,0,4,4,
            4,4,0,4,2,0,0,4,
            4,6,0,6,0,0,0,4,
            4,0,0,2,2,0,4,4,
            4,4,4,0,4,6,4,4,
            4,4,4,0,0,0,4,4,
            4,4,4,4,4,4,4,4
        },
        {
            4,4,4,4,4,4,4,4,
            4,4,0,1,0,0,4,4,
            4,4,0,4,2,0,0,4,
            4,0,0,6,0,6,0,4,
            4,0,0,2,2,0,4,4,
            4,4,4,0,4,6,4,4,
            4,4,4,0,0,0,4,4,
            4,4,4,4,4,4,4,4
        }
    };
    while (1)
    {
        for (int i = 0; i < length; i++)
        {
            for (int j = 0; j < high; j++)
            {
                switch (Map[Checkpoint][i][j])
                {
                    case 0:
                        printf("  ");
                        break;
                    case 1:
                    case 7:
                        printf("");
                        break;
                    case 2:
                        printf("");
                        break;
                    case 6:
                        printf("");
                        break;
                    case 4:
                        printf("");
                        break;
                    case 8:
                        printf("");
                        break;
                }
            }
            printf("\n");  
        }

        Count = 0;
        for (int i = 0; i < length; i++)
        {
            for (int j = 0; j < high; j++)
            {
                if (8 == Map[Checkpoint][i][j])
                {
                    Count++;
                }
            }
        }
        if (3 == Count)
        {
            printf("恭喜通过第%d关\n",(Checkpoint+1));
            Checkpoint++;
            if (Checkpoint > 1)
            {
                printf("通关了全部关卡,你真厉害!\n");
                break;
            }
        }

        int people_x;
        int people_y;
        for (int i = 0; i < length; i++)
        {
            for (int j = 0; j < high; j++)
            {
                if (1 == Map[Checkpoint][i][j] || 7 == Map[Checkpoint][i][j])
                {
                    people_x = i;
                    people_y = j;
                    i = length;
                    break;
                }
            }
        }
        
        char Userkey = getchar();
        switch (Userkey)
        {   
            case 'W':
            case 'w':
            //case '72':
            {
                if ((Map[Checkpoint][people_x - 1][people_y] == 0) || (Map[Checkpoint][people_x - 1][people_y] == 6))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x - 1][people_y] += 1;
                }
                if ((Map[Checkpoint][people_x - 1][people_y] == 2) && (Map[Checkpoint][people_x - 2][people_y] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x - 1][people_y] -= 1;
                    Map[Checkpoint][people_x - 2][people_y] += 2;
                }
                if ((Map[Checkpoint][people_x - 1][people_y] == 8) && (Map[Checkpoint][people_x - 2][people_y] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x - 1][people_y] -= 1;
                    Map[Checkpoint][people_x - 2][people_y] += 2;
                }
                break;
            }
            case 'S':
            case 's':
            //case '80':
            {
                if ((Map[Checkpoint][people_x + 1][people_y] == 0) || (Map[Checkpoint][people_x + 1][people_y] == 6))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x + 1][people_y] += 1;
                }
                if ((Map[Checkpoint][people_x + 1][people_y] == 2) && (Map[Checkpoint][people_x + 2][people_y] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x + 1][people_y] -= 1;
                    Map[Checkpoint][people_x + 2][people_y] += 2;
                }
                if ((Map[Checkpoint][people_x + 1][people_y] == 8) && (Map[Checkpoint][people_x + 2][people_y] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x + 1][people_y] -= 1;
                    Map[Checkpoint][people_x + 2][people_y] += 2;
                }
                break;
            }
            case 'A':
            case 'a':
            //case '75':
            {
                if ((Map[Checkpoint][people_x][people_y - 1] == 0) || (Map[Checkpoint][people_x][people_y - 1] == 6))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x][people_y - 1] += 1;
                }
                if ((Map[Checkpoint][people_x][people_y - 1] == 2) && (Map[Checkpoint][people_x][people_y - 2] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x][people_y - 1] -= 1;
                    Map[Checkpoint][people_x][people_y - 2] += 2;
                }
                if ((Map[Checkpoint][people_x][people_y - 1] == 8) && (Map[Checkpoint][people_x][people_y - 2] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x][people_y - 1] -= 1;
                    Map[Checkpoint][people_x][people_y - 2] += 2;
                }
                
                break;
            }
            case 'D':
            case 'd':
            //case '77':
            {
                if ((Map[Checkpoint][people_x][people_y + 1] == 0) || (Map[Checkpoint][people_x][people_y + 1] == 6))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x][people_y + 1] += 1;
                }
                if ((Map[Checkpoint][people_x][people_y + 1] == 2) && (Map[Checkpoint][people_x][people_y + 2] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x][people_y + 1] -= 1;
                    Map[Checkpoint][people_x][people_y + 2] += 2;
                }
                if ((Map[Checkpoint][people_x][people_y + 1] == 8) && (Map[Checkpoint][people_x][people_y + 2] != 4))
                {
                    Map[Checkpoint][people_x][people_y] -= 1;
                    Map[Checkpoint][people_x][people_y + 1] -= 1;
                    Map[Checkpoint][people_x][people_y + 2] += 2;
                } 
                break;
            }
        }
        system("clear");
    }
    system("stty echo");       //取消 不显示输入命令
    system("stty icanon");     //取消 一次性读完 不等待回车
    return 0;
}

 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

posted @ 2020-09-17 21:35  归江渡鸟泅白浪  阅读(147)  评论(0)    收藏  举报