仿动物园规则怪谈类小游戏

· · 个人记录

近来我闲来无事,写了一个动物园小游戏,现将代码放在这里,有bug什么的跟我说哈。(开心:我终于真地写了一个游戏!)

代码:

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
const int maxn=15;
int first_read=1,sr,jj[maxn],sd=1,s=5;
//              0    1           2          3         4          5       6            7         8        9         10       11           12         13         14
string jjm[maxn]={"","到此一游","地覆天翻","外卖到了","寄人篱下","天国旅人","爱墨能助","狮口亡魂","白象之争","真假狮羊","数据删除","无知水母","园区保安","笼中之兔","口中之食"};
void empty(){
    sd=1;
    for(int i=1;i<=maxn;i++){
        jj[i]=0;
    }
}
void Read()
{
    ifstream in("动物园存档.in");
    //in>>mzhg>>zd>>swhm>>qxs>>swx>>sn>>mp>>tongguan>>sw1>>zd1>>sn1>>mz1>>mp1>>zbbj>>ccg>>mzzd>>mz>>tongguan1>>sw>>x>>s>>cdd>>jg>>qiang>>gun>>by>>vv;
    in>>first_read>>sd;
    for(int i=1;i<=15;i++) in>>jj[i];
    in.close();
}
void Save()
{
    ofstream out("动物园存档.in");
    //in>>mzhg>>zd>>swhm>>qxs>>swx>>sn>>mp>>tongguan>>sw1>>zd1>>sn1>>mz1>>mp1>>zbbj>>ccg>>mzzd>>mz>>tongguan1>>sw>>x>>s>>cdd>>jg>>qiang>>gun>>by>>vv;
    out<<first_read<<" "<<sd<<endl;
    for(int i=1;i<=15;i++) out<<jj[i]<<" ";
    out.close();
}
void slowsay(string a){
    for(int i=0;i<int(a.size());i++){
        if(sd!=2147483647&&sd!=10) Sleep(int(sd*50));
        else if(sd==10) Sleep(25);
        else sr=_getch();
        cout<<a[i];
    }
}
void input(int l,int r){
    cin>>sr;
    while(sr<l||sr>r){
        cout<<"请重新输入!\n";
        cin>>sr;
    }
}
void Login(){
    slowsay("世界上有个地方,叫A岛(Acfun)。在这座城中,有一个动物园.\n");
    //sr=_getch();
    slowsay("这个动物园非常得奇怪,大路上有兔子出现,大象区中有长耳白色大象,海洋馆和动物园互不承认,鲸鱼区中有溺死的大象,猿猴区有时有一条路,有时有两条路。\n");
    sr=_getch();
    slowsay("诡异怪诞,扑朔迷离,众多谜团等你来破解!\n");
    sr=_getch();
    slowsay("那么,就让我们开始吧!\n");
    sr=_getch();
    //system("cls");
    first_read=0;
}
void syx(){
    slowsay("因为在树荫下休息,你被寄了。\n");
    slowsay("达成结局:寄人篱下\n");
    sr=_getch();
    jj[4]=1;
}
void jj1(){
    srand(s*rand());
    s=rand()%100;
    if(s<50){
        slowsay("你被那头大象干掉了。\n");
        //slowsay("")
    }else{
        slowsay("你干掉了那头大象,但是又被随即冲来的一头大象干掉了。\n");
    }
    slowsay("达成结局:白象之争。\n");
    jj[8]=1;
    sr=_getch();
}
void btz(){
    slowsay("你的认知被污染了。你变成了一只兔子。你被“它”吃了,变成了兔子血摆在货架上。\n");
    slowsay("达成结局:口中之食");
    jj[14]=1;
    sr=_getch();
}
void bcl(){
    slowsay("你被兔子吃掉了.\n");
    slowsay("达成结局:外卖到了\n");
    jj[3]=1;
    sr=_getch();
}
void bds(){
    slowsay("你被那只白色大象给干掉了。\n");
    slowsay("达成结局:白象之争。\n");
    jj[8]=1;
    sr=_getch();
}
void dba(){
    slowsay("从此以后,你成为了一名光荣的保安。\n");
    slowsay("你知道,你最后肯定会变成大象,被白色大象打死。\n但是你义无反顾地担起了这个责任。毕竟正如他人所说,“团结、勇气和绝不动摇的忠诚是人类最大的优点。”\n");
    slowsay("达成成就:园区保安\n");
    jj[12]=1;
    sr=_getch();
}
void bys(){
    slowsay("你因为污染严重,被狮子咬死了。\n");
    slowsay("达成结局:狮口亡魂。\n");
    jj[7]=1;
    sr=_getch();
}
void bpl(){
    slowsay("黑衣员工骗走了你地图上的虚线。\n你因为没有虚线保护,被寄了。\n");
    slowsay("达成结局:爱墨能助.\n");
    jj[6]=1;
    sr=_getch();
}
void jlz(){
    slowsay("你凭借自己的智商,发现自己将要变成兔子。\n你不想死,于是你就进入了笼子,等待每周的喂食.\n");
    slowsay("达成成就:笼中之兔.\n");
    jj[13]=1;
    sr=_getch();
}
void lkl(){
    slowsay("你离开了动物园.\n");
    slowsay("达成结局:到此一游.\n");
    jj[1]=1;
    sr=_getch();
}
void cybcc(){
    slowsay("你走入了右侧通道。\n突然,不知道怎么回事的,你没了。\n");
    slowsay("达成结局:天国旅人。\n");
    jj[5]=1;
    sr=_getch();
}
void bfx(){
    slowsay("你大晚上开灯,吸引到了“它”,于是你被它给干掉了。\n");
    slowsay("达成结局:无知水母\n");
    jj[11]=1;
    sr=_getch();
}
void bsc(){
    slowsay("你在海洋馆里停留超过了半个小时,你被它盯上了.\n");
    slowsay("为了不增强它的势力,海洋馆把你删除了。\n");
    slowsay("达成结局:数据删除。\n");
    jj[10]=1;
    sr=_getch();
}
void hll(){
    slowsay("你过早地离开了海洋馆。你被绞入了时空乱流。你死了\n");
    slowsay("达成结局:地覆天翻\n");
    jj[2]=1;
    sr=_getch();
}
void open(){
    if(first_read==1){
        Login();
        first_read==0;
    }
    system("cls");
    slowsay("你是一名A岛的居民。今天天气不错,你打算去动物园玩。\n");
    sr=_getch();
    slowsay("你到了动物园,买票之后,工作人员给了你一份地图。\n地图上有一小部分空白,被虚线框了起来。\n你问工作人员这是干嘛用的,他回答:关键时刻有大用,保命工具\n");
    sr=_getch();
    system("cls");
    slowsay("你在动物园内闲逛。突然,你看见了一只兔子从你面前跑过。\n");
    int ptz=0,bwr=0;
    slowsay("此时你要:\n1.追上这只兔子。\n2.不理它。\n");
    input(1,2);
    if(sr==1){
        bwr++;
        srand(s*rand());
        s=rand()%100;
        if(s<50){
            slowsay("你跟着这只兔子,到了一棵树的树荫中。兔子就停在树下不动,回头望着你。\n");
            slowsay("此时你要:\n1.抱起这只兔子,拍张照片。\n2.不对劲,赶紧离开。\n");
            input(1,2);
            if(sr==1){
                srand(s*rand());
                s=rand()%100;
                if(s<50) syx();
                else bcl();
                return ;
            }
        }else{
            slowsay("那只兔子调头向你扑来!\n");
            sr=_getch();
            srand(s*rand());
            s=rand()%100;
            if(s<33){
                slowsay("你以为那只兔子喜欢你,所以向你扑来。你向前一步,抱住了那只兔子.\n");
                bcl();
                return ;
            }else if(s<66){
                slowsay("你掉头就跑,但是没跑过那只兔子。\n");
                sr=_getch();
                bcl();
                return ;
            }else{
                slowsay("你逃过了兔子的魔爪。\n");
                ptz=1;
            }
            //bcl();
        }
    }
    system("cls");
    slowsay("你继续游览,慢慢走到了大象区。\n你看见一个带兔子耳饰的男人跟着人流一同进入了园区,你心想:“什么怪癖好!”\n");
    sr=_getch();
    slowsay("突然,一个员工冲了出来,要求大家立刻离开园区。\n");
    slowsay("此时你要\n1.听从员工的话,离开。\n2.我行我素,继续在大象区中游览。\n");
    input(1,2);
    if(sr==2){
        bwr++;
        slowsay("你在园区中走来走去,走到一处告示牌前,一抬头:你看见的大象竟然是白色的!而告示牌前的大象则是一般的大象。\n");
        sr=_getch();
        srand(s*rand());
        s=rand()%100;
        if(s<33){
            slowsay("你的认知被污染了.你成为了一只兔子。你吃掉了地上的一条虚线。你变成了白色大象。\n");
            sr=_getch();
            slowsay("本能驱使着你冲向一头特别的大象(虽然不知道它为什么很特别)。你与那头大象打了起来\n");
            sr=_getch();
            jj1();
            return ;
        }else if(s<66){
            //slowsay("你的认知被污染了。你变成了一只兔子")
            btz();
            return ;
        }else{
            slowsay("这时,大象区保安突然冲了出来!他捡起地上的虚线,变成了大象与白色大象打了起来。\n");
            slowsay("你看见了之后热血沸腾,你也捡起了地上的一条虚线,变成了一只大象,与另一只白色大象厮打起来。\n");
            sr=_getch();
            srand(s*rand());
            s=rand()%100;
            if(s<50){
                bds();
                return ;
            }
            slowsay("你们一起干掉了那些白色大象。\n");
            slowsay("战斗结束后,那名保安很感激你,邀请你成为一名保安。\n这时,你的选择是:\n1.加入他。\n2.谢绝他\n");
            input(1,2);
            if(sr==1){
                dba();
                return ;
            }else{
                slowsay("你谢绝了他,离开了大象园区。\n");
            }
        }
    }
    system("cls");
    slowsay("离开大象园区后,你感觉有些无聊。\n");
    sr=_getch();
    slowsay("路边有个人在售卖兔子玩偶。\n");
    slowsay("请问你要买下玩偶吗?\n1.买 2.不买\n");
    input(1,2);
    if(sr==1){
        btz();
        return ;
    }
    slowsay("你走到了狮子区.\n");
    if(bwr>=2){
        bys();
        return ;
    }
    //slowsay("这里怎么只有4只狮子?连大吼都不会……你离开了狮子区")
    slowsay("狮子们突然对着你大吼.你被吓得够呛,赶紧离开了狮子区.\n");
    slowsay("你又在路边看见了一只兔子。\n");
    bwr++;
    if(ptz==1){
        slowsay("你不敢轻举妄动,打算将此告诉员工。\n");
        sr=_getch();
        slowsay("路边有两个员工,请问你打算告诉哪个人?\n1.蓝衣员工\n 2.黑衣员工\n");
        input(1,2);
        if(sr==1){
            slowsay("蓝衣员工将你和兔子引至狮子园。\n");
            slowsay("兔子被狮子给咬死了。\n");
            if(bwr>=2){
                bys();
                return ;
            }
        }else{
            bpl();
            return ;
        }
    }else{
        if(bwr>=2){
            //slowsay("你发现自己变成了兔子,但又不想死,所以就去了兔子那个笼子里")
            jlz();
            return ;
        }
        slowsay("你没有理那只兔子。\n");
    }
    system("cls");
    slowsay("你逛到了猿猴区。\n你竟然在猿猴区里发现了兔子!“真是奇怪。”你想。\n");
    sr=_getch();
    slowsay("这时又冲出来一个员工,要求你离开猿猴区。\n");
    slowsay("你选择:\n1.听员工的话离开。\n2.继续游玩猿猴区。\n");
    input(1,2);
    if(sr==2){
        srand(s*rand());
        s=rand()%100;
        if(s<20){
            slowsay("你拿出一根香蕉,打算喂猴子。\n");
            sr=_getch();
            slowsay("结果猴子没过来,一只兔子向你冲来!\n");
            bcl();
            return;
        }
        slowsay("你看了看地图,似乎游玩地差不多了。你打算出去了。\n");
        sr=_getch();
        if(s<40){
            slowsay("猿猴区只有一条在左侧的路通往外界.\n");
            slowsay("你从这里出去了。");
            lkl();
            return ;
        }else if(s<60){
            slowsay("猿猴区只有一条在右侧的路通往外界.\n");
            slowsay("你从这里出去了。");
            cybcc();
            return ;
        }else if(s<80){
            slowsay("猿猴区有两条路.\n");
            slowsay("你打算从哪条路出去?\n1.左侧\n2.右侧\n");
            input(1,2);
            if(sr==1){
                lkl();
                return ;
            }else{
                cybcc();
                return ;
            }
        }else{
            slowsay("猿猴区似乎没有路……\n去别的地方找出口吧.\n");
        }
    }
    slowsay("离开猿猴区后,你四处晃悠,发现了海洋馆。你进入了海洋馆。\n");
    sr=_getch();
    slowsay("海洋馆没有地图,于是你打算找个导游。\n");
    sr=_getch();
    slowsay("前面有两个员工,你打算找那个当导游?\n1.红衣员工\n2.黑衣员工\n");
    input(1,2);
    if(sr==1){
        slowsay("他引你到了鲸鱼区。\n");
        slowsay("鲸鱼区里竟然有大象?真是奇特!你这么想着。\n");
    }else{
        bpl();
        return ;
    }
    srand(s*rand());
    s=rand()%100;
    if(s<50){
        slowsay("海洋馆的告示中说,白天进入这里,不能超过半个小时。\n");
        slowsay("现在半个小时已到,你要:\n1.离开这里\n2.留在这里。\n");
        input(1,2);
        if(sr==2){
            bsc();
            return ;
        }
        slowsay("你离开了海洋馆,回到了动物园大门,从大门出去了。\n");
        lkl();
        return ;
    }
    slowsay("现在是晚上了,员工带你进了一间钟点房。\n");
    slowsay("你在床上玩了一会手机,一看表,到凌晨1点钟了。");
    slowsay("这时,员工进来,强行关掉了你的水母小夜灯。\n");
    slowsay("你打算:\n1.睡觉\n2.重新打开水母小夜灯。\n");
    input(1,2);
    if(sr==2){
        bfx();
        return ;
    }
    slowsay("起床了.\n");
    slowsay("员工们马上下班了。你打算自己现在离开,还是跟员工们一起离开?\n");
    slowsay("请选择:\n1.现在离开\n2.跟员工一起离开\n");
    input(1,2);
    if(sr==1){
        hll();
        return ;
    }
    slowsay("你离开了海洋馆,从动物园大门出去了。\n");
    lkl();
}
int main(){
    Read();
    //tys();
    /*if(first_read){
        Login();
        first_read=0;
    }*/
    while(1){
        system("cls");
        Save();
        slowsay("1--开始游戏--\n");
        slowsay("2--查看达成结局--\n");
        slowsay("3--游戏介绍--\n");
        slowsay("4--设置--\n");
        slowsay("5--退出--\n");
        slowsay("6--清空数据,重开一次--\n");
        slowsay("7--灵感来源--\n");
        slowsay("8--攻略--\n");
        input(1,8);
        if(sr==1){
            open();
        }else if(sr==2){
            slowsay("共14");
            //slowsay(jjs);
            slowsay("个成就\n");
            for(int i=1;i<maxn;i++){
                slowsay("    ");
                if(i==9){
                    slowsay("游戏还没写完,这个成就日后再解锁。\n");
                    continue;
                } 
                if(jj[i]){
                    //cout<<"     "<<jjm[i]<<endl;
                    slowsay(jjm[i]);
                    slowsay("\n");
                }else{
                    //cout<<"未达成"<<endl;
                    slowsay("未达成\n");
                }
                sr=_getch();
            }
        }else if(sr==3){
            slowsay("游戏名称:怪异的动物园\n");
            slowsay("想必你也发现了,这个动物园规则非常奇怪。\n");
            slowsay("接下来,你将作为一名游客/员工,进入这个奇怪的动物园,游玩后出园或一探究竟!\n");
            sr=_getch();
        }else if(sr==4){
            slowsay("吐字速度:1.瞬间 2. 很快 3.正常 4.很慢 5.手动(按一下吐一个英文,中文要按两下)\n");
            input(1,5);
            if(sr==1){
                sd=0;
            }else if(sr==2){
                sd=10;
            }else if(sr==3){
                sd=1;
            }else if(sr==4){
                sd=4;
            }else{
                sd=2147483647;
            }
        }else if(sr==5){
            slowsay("真得要退出吗?退出输1\n");
            cin>>sr;
            if(sr==1){
                slowsay("再见!\n");
                return 0;
            }
        }else if(sr==6){
            empty();
            slowsay("已经清空。\n");
        }else if(sr==7){
            system("start https://www.zhihu.com/question/501736883/answer/2246982450");
        }else{
            slowsay("其实也没什么好说的,我就说两点:\n1.警惕黑衣人。\n2.很多地方使用了随机数,也就是不止一个结局,可能有好几个结局。\n");
        }
    }
}