平时随便写的一个C++推箱子程序,增加了菜单功能

只有一张地图,没有写通关判定,见谅(毕竟我懒)

#include<stdio.h>
#include<Windows.h> 
#include<stdlib.h>
#include<conio.h>
#include<windef.h>
//请设置属性为中文 
//HUAJI作品,未经许可不得转载
int i,j,SAVE[10][12];
//地图 
//0:空地;1:墙壁;3:目的地;4:箱子;6:人;7:已完成;9:人在目的地 
int map[10][12]=
{
    {1,1,1,1,1,0,0,0,0,0,0,0},
    {1,0,0,0,1,0,0,0,0,0,0,0},
    {1,0,4,0,1,0,1,1,1,1,1,1},
    {1,0,4,6,1,0,1,0,0,0,3,1},
    {1,1,1,4,1,1,1,0,0,0,3,1},
    {0,1,0,0,0,0,0,0,0,0,3,1},
    {0,1,0,0,0,1,0,0,0,0,0,1},
    {0,1,0,0,0,1,0,0,0,0,0,1},
    {0,1,1,1,1,1,0,0,0,0,0,1},
    {0,0,0,0,0,1,1,1,1,1,1,1},
};
//打印地图
void DrapMap()
{
    printf("PRESS Esc to exit\n");
    for(i=0;i<10;i++)
    {
        for(j=0;j<12;j++)
        {
            switch(map[i][j])
            {
                case 0:
                {
                    printf("  ");
                    break;
                }
                case 1:
                {
                    printf("");
                    break;
                }
                case 3:
                {
                    printf("");
                    break;
                }
                case 4:
                {
                    printf("");
                    break;
                }
                case 6:
                {
                    printf("");
                    break;
                }
                case 7:
                {
                    printf("");
                    break;
                }
                case 9:
                {
                    printf("");
                    break;
                }
            }
        }
        printf("\n");
    }
}
//获取坐标 
POINT get()
{
    POINT pos={-1,-1};
    for(int i=0;i<=10;i++)
    for(int j=0;j<=12;j++)
    if(map[i][j]==6||map[i][j]==9)
    {
        pos.x=i;
        pos.y=j;
        return pos;
    }
    return pos;
}
void up()
{
    POINT pos=get();
    if(map[pos.x-1][pos.y]==0)//上面是空地
    {
        map[pos.x-1][pos.y]=6;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x-1][pos.y]==3)//上面是目的地
    {
        map[pos.x-1][pos.y]=9;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x-1][pos.y]==4)//上面是箱子
    {
        if(map[pos.x-2][pos.y]==0)//箱子上面是空地
        {
            map[pos.x-2][pos.y]=4;
            map[pos.x-1][pos.y]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x-2][pos.y]==3)//箱子上面是目的地
        {
            map[pos.x-2][pos.y]=7;
            map[pos.x-1][pos.y]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
    if(map[pos.x-1][pos.y]==7)//上面已完成
    {
        if(map[pos.x-2][pos.y]==0)//箱子上面是空地
        {
            map[pos.x-2][pos.y]=4;
            map[pos.x-1][pos.y]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x-2][pos.y]==3)//箱子上面是目的地
        {
            map[pos.x-2][pos.y]=7;
            map[pos.x-1][pos.y]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
}
void left()
{
    POINT pos=get();
    if(map[pos.x][pos.y-1]==0)//左边是空地
    {
        map[pos.x][pos.y-1]=6;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x][pos.y-1]==3)//左边是目的地
    {
        map[pos.x][pos.y-1]=9;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x][pos.y-1]==4)//左边是箱子
    {
        if(map[pos.x][pos.y-2]==0)//箱子左边是空地
        {
            map[pos.x][pos.y-2]=4;
            map[pos.x][pos.y-1]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x][pos.y-2]==3)//箱子左边是目的地
        {
            map[pos.x][pos.y-2]=7;
            map[pos.x][pos.y-1]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
    if(map[pos.x][pos.y-1]==7)//左边已完成
    {
        if(map[pos.x][pos.y-2]==0)//箱子左边是空地
        {
            map[pos.x][pos.y-2]=4;
            map[pos.x][pos.y-1]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x][pos.y-2]==3)//箱子左边是目的地
        {
            map[pos.x][pos.y-2]=7;
            map[pos.x][pos.y-1]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
}
void down()
{
    POINT pos=get();
    if(map[pos.x+1][pos.y]==0)//下面是空地
    {
        map[pos.x+1][pos.y]=6;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x+1][pos.y]==3)//下面是目的地
    {
        map[pos.x+1][pos.y]=9;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x+1][pos.y]==4)//下面是箱子
    {
        if(map[pos.x+2][pos.y]==0)//箱子下面是空地
        {
            map[pos.x+2][pos.y]=4;
            map[pos.x+1][pos.y]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x+2][pos.y]==3)//箱子下面是目的地
        {
            map[pos.x+2][pos.y]=7;
            map[pos.x+1][pos.y]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
    if(map[pos.x+1][pos.y]==7)//下面已完成
    {
        if(map[pos.x+2][pos.y]==0)//箱子下面是空地
        {
            map[pos.x+2][pos.y]=4;
            map[pos.x+1][pos.y]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x+2][pos.y]==3)//箱子下面是目的地
        {
            map[pos.x+2][pos.y]=7;
            map[pos.x+1][pos.y]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
}
void right()
{
    POINT pos=get();
    if(map[pos.x][pos.y+1]==0)//右边是空地
    {
        map[pos.x][pos.y+1]=6;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x][pos.y+1]==3)//右边是目的地
    {
        map[pos.x][pos.y+1]=9;
        if(map[pos.x][pos.y]==9)
        map[pos.x][pos.y]=3;
        else
        map[pos.x][pos.y]=0;
    }
    if(map[pos.x][pos.y+1]==4)//右边是箱子
    {
        if(map[pos.x][pos.y+2]==0)//箱子右边是空地
        {
            map[pos.x][pos.y+2]=4;
            map[pos.x][pos.y+1]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x][pos.y+2]==3)//箱子右边是目的地
        {
            map[pos.x][pos.y+2]=7;
            map[pos.x][pos.y+1]=6;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
    if(map[pos.x][pos.y+1]==7)//右边已完成
    {
        if(map[pos.x][pos.y+2]==0)//箱子右边是空地
        {
            map[pos.x][pos.y+2]=4;
            map[pos.x][pos.y+1]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
        if(map[pos.x][pos.y+2]==3)//箱子右边是目的地
        {
            map[pos.x][pos.y+2]=7;
            map[pos.x][pos.y+1]=9;
            if(map[pos.x][pos.y]==9)
            map[pos.x][pos.y]=3;
            else
            map[pos.x][pos.y]=0;
        }
    }
}
void save()
{
    system("cls");
    for(int i=0;i<10;i++)
    for(int j=0;j<12;j++)
    SAVE[i][j]=map[i][j];
    printf("GAME SAVED");
    int Esc=getch();
}
void save_1st()
{
    system("cls");
    for(int i=0;i<10;i++)
    for(int j=0;j<12;j++)
    SAVE[i][j]=map[i][j];
}
void reset_()
{
    system("cls");
    for(int i=0;i<10;i++)
    for(int j=0;j<12;j++)
    map[i][j]=SAVE[i][j];
    printf("GAME RESETED");
    int Esc=getch();
}
void play()
{
    while(1)
    {
        //清屏
        system("cls");
        //打印地图
        DrapMap();
        char arrow=getch();
        switch(arrow)
        {
            case 'w':case 72:up();
            break;
            case 's':case 80:down();
            break;
            case 'a':case 75:left();
            break;
            case 'd':case 77:right();
            break;
            case 'S':save();
            break;
            case 'R':reset_();
            break;
            case 27:return;
        }
    }
}
void help()
{
    system("cls");
    printf("press \"wasd\" or arrow keys to move\nPRESS S to save\nPRESS R to reset");
    int Esc=getch();

}
int main()
{
    //标题
    SetConsoleTitle("box");
    //窗口大小
    system("mode con cols=26 lines=12");
    save_1st();
    char mode;
    while(1)
    {
        system("cls");
        printf("PRESS\na:play\nb:help\nc:exit");
        mode=getch();
        switch(mode)
        {
            case 'a':play();break;
            case 'b':help();break;
            case 'c':return 0;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/HUAJI-stdio/p/10704412.html