鬼屋逃生

· · 个人记录

//转自:https://www.luogu.com.cn/blog/user71443/gui-wu-tao-sheng-you-hu
#include <iostream>
#include <ctime>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <stack>
#include <set>
#include <windows.h>
#include <conio.h>
using namespace std;
int main()
{
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    srand(time(NULL));
    char MAP[100][100]={{"###############################"},{"#@....#....@#*........@#@*...##"}, {"#.......*...#@.........#..##.##"},{"#*....#.....#..........#..##.##"},{"####.######.####...#########.##"},{"#@....#......................##"},{"#..##.#......................##"},{"#..##.#...#####################"},{"#.........#....*@.#.......@..##"},{"#..y@.#...#.......#..........%#"},{"#######...#.......#..........%#"},{"#@.*......######.####.##########"},{"#.....#......................##"},{"###############################"}}; 
    int i,j,x=9,y=3,ax=4,ay=18,c=0;
    char yt='.',ayt='.';
    cout<<"欢迎来到鬼屋逃生游戏,用wasd操作,y是你的位置,#是墙,@是柜子,可以躲柜子里不受怪物攻击,a是怪物,速度是你2倍,每当你拿起一个钥匙,怪物自动传送你身旁,会杀死你的呕!!!*就是钥匙,%是大门,需攒齐六个钥匙才能逃脱!!!"<<endl;
    system("pause");
    bool flag=true;
    while(flag)
    {
        bool flag1=true;;
        if(MAP[x+1][y]=='a'||MAP[x-1][y]=='a'||MAP[x][y+1]=='a'||MAP[x][y-1]=='a'||MAP[x+1][y+1]=='a'||MAP[x-1][y-1]=='a'||MAP[x-1][y+1]=='a'||MAP[x+1][y-1]=='a')
        {
            if(MAP[x][y]!='@')
            {
            cout<<"你死了!!!"<<endl;
                system("pause");
            return 0; 

            }
        }
        if(MAP[x+1][y]=='%'||MAP[x-1][y]=='%'||MAP[x][y+1]=='%'||MAP[x][y-1]=='%'||MAP[x+1][y+1]=='%'||MAP[x-1][y-1]=='%'||MAP[x-1][y+1]=='%'||MAP[x+1][y-1]=='%')
        {

            if(c==6)
            {
                cout<<"游戏成功,逃脱成功!!!"<<endl;
                system("pause");
                return 0; 
            }
            else
            {
                cout<<"钥匙不够!!!"<<endl;
                system("pause");
            }
        }
        for(i=0; i<=14; i++)
        {
            for(j=0; j<=31; j++)
            {
                cout<<MAP[i][j];
            }
            cout<<endl;
        }
        char t=getch();
        if(t=='w'&&MAP[x-1][y]!='#'&&MAP[x-1][y]!='a'&&MAP[x-1][y]!='&')
        {
        MAP[x][y]=yt;
            x--;
            yt=MAP[x][y];
            if(yt=='@')
            MAP[x][y]='@';
            else
            MAP[x][y]='y';
            if(yt=='*')
            {
                flag1=false;
                yt='.';
                c++;
                MAP[ax][ay]=ayt;
                ay=y+2;
                ax=x;
                 MAP[x][y+2]='a';
            }

        }
        if(t=='a'&&MAP[x][y-1]!='#'&&MAP[x][y-1]!='a'&&MAP[x][y-1]!='&')
        {
        MAP[x][y]=yt;
            y--;
            yt=MAP[x][y];
            if(yt=='@')
            MAP[x][y]='@';
            else
            MAP[x][y]='y';
            if(yt=='*')
            {
                flag1=false;
                yt='.';
                MAP[ax][ay]=ayt;
                c++;
                ay=y+2;
                ax=x;
                 MAP[x][y+2]='a';
            }
        }
        if(t=='s'&&MAP[x+1][y]!='#'&&MAP[x+1][y]!='a'&&MAP[x+1][y]!='&')
        {
        MAP[x][y]=yt;
            x++;
            yt=MAP[x][y];
            if(yt=='@')
            MAP[x][y]='@';
            else
            MAP[x][y]='y';
            if(yt=='*')
            {
                flag1=false;
                yt='.';
                c++;
                MAP[ax][ay]=ayt;
                ay=y+2;
                ax=x;
                 MAP[x][y+2]='a';
            }
            if(yt=='&')
            {
                if(c==7)
                {
                    cout<<"游戏成功!!!逃脱鬼屋!!!"<<endl;
                    return 0;
                }
                else
                {
                    cout<<"钥匙不够!!!"<<endl;
                    x--;
                    yt=MAP[x][y];
                    MAP[x][y]='y';
                    MAP[x-1][y]='&';
                }
            } 
        }
        if(t=='d'&&MAP[x][y+1]!='#'&&MAP[x][y+1]!='a'&&MAP[x][y+1]!='&')
        {
        MAP[x][y]=yt;
            y++;
            yt=MAP[x][y];
            if(yt=='@')
            MAP[x][y]='@';
            else
            MAP[x][y]='y';
            if(yt=='*')
            {
                flag1=false;
                yt='.';
                c++;
                MAP[ax][ay]=ayt;
                ay=y+2;
                ax=x;
                 MAP[x][y+2]='a';
            }

        }
        if(flag1)
        {
            int ar=rand()%4;
        if(ar==0&&MAP[ax-1][ay]!='#'&&MAP[ax-1][ay]!='@'&&MAP[ax-1][ay]!='&'&MAP[ax-1][ay]!='y')
        {
            MAP[ax][ay]=ayt;
            ax--;
            ayt=MAP[ax][ay];
            MAP[ax][ay]='a';
        }
        else if(ar==1&&MAP[ax][ay-1]!='#'&&MAP[ax][ay-1]!='@'&&MAP[ax][ay-1]!='&'&&MAP[ax][ay-1]!='y')
        {
            MAP[ax][ay]=ayt;
            ay--;
            ayt=MAP[ax][ay];
            MAP[ax][ay]='a';
        }
        else if(ar==2&&MAP[ax+1][ay]!='#'&&MAP[ax+1][ay]!='@'&&MAP[ax+1][ay]!='&'&&MAP[ax+1][ay]!='y')
        {
            MAP[ax][ay]=ayt;
            ax++;
            ayt=MAP[ax][ay];
            MAP[ax][ay]='a';
        }
        else if(ar==3&&MAP[ax][ay+1]!='#'&&MAP[ax][ay+1]!='@'&&MAP[ax][ay+1]!='&'&&MAP[ax][ay+1]!='y')
        {
            MAP[ax][ay]=ayt;
            ay++;
            ayt=MAP[ax][ay];
            MAP[ax][ay]='a';
        }
        }

        system("cls");
    }

                system("pause");
    return 0;
}