用C#制作文本剧情游戏

嗯,有点简陋...

为什么不用goto?对,因为我不喜欢用它

按照脚本的思路来,把一个普通的文本剧情游戏分成设置类,剧情类,交互类以及主程序

首先是设置类

 class Set
    {
        public void clean()//清除方法
        {
            ReadLine();
            Clear();
        }
        public void Achievement()//创建成就
        {
            var achievement = Combine(GetFolderPath(SpecialFolder.Personal),"Chengjiu","Chengjiu01","Chengjiu");
            WriteLine(achievement);
            CreateDirectory(achievement);
            string a = Combine(achievement, "成就.txt");//创建成就txt 文本文件
                StreamWriter text = File.CreateText(a);
                text.WriteLine("谢谢你的游玩:)");//写入文本
            text.Close();
        }
    }

设置类是全部类的基类,其中的清除方法给予每个类使用。而使用成就方法以此来让玩家触发真真正的真结局时获得成就txt文件

我们可以用Directory,Path,Environment类来管理目录,用File来管理文件

交互类:

    class Ui : Set
    {
        public string Name { get; set; }
        public void Say()//开局欢迎词抽取方法
        {
            Random a = new Random();
            int b = a.Next(1, 5);
            switch (b)
            {
                case 1:
                    WriteLine("欢迎来到此游戏");
                    clean();
                    break;
                case 2:
                    WriteLine("本劣质游戏由本博主制作");
                    clean();
                    break;
                case 3:
                    WriteLine("不要问国家为你做了什么,而是问你为国家做了什么--肯尼迪");
                    clean();
                    break;
                case 4:
                    WriteLine("我本可以忍受这黑暗,如果我未曾见过太阳--狄金森");
                    clean();
                    break;
            }
        }
        public void Getname()//获取名字方法
        {
            Ui ui = new Ui();
            WriteLine("给我你的名字");
            string getname = ReadLine();
            Name = getname;
            if (Name.Length == 0)
            {
                Name = "赛恩";
            }
            WriteLine($"你叫{Name}");
            ui.clean();
        }
    }

 使用一个属性来获取名字,当无输入时则默认为赛恩,其实这里可以用正则表达式但有点麻烦

剧情类:

  class Poal : Ui
    {
        public bool checkpoint1 = false;
        public bool checkpoint2 = false;
        public bool checkpoint3 = false;
        public void Start1()//开头1
        {
            Say();
            Getname();
            WriteLine($"你是这个国度最负盛名的圣骑士,你的画像被挂在家家户户中,你掌握着最强大的咒语");
            WriteLine("但你十分清楚,再强大的咒语也无法击散人心中的黑暗......");
            clean();
            WriteLine("在一次执行任务之中,你从敌人手中救走了一个奄奄一息的小女孩");
            WriteLine("在你的细心照顾下,小女孩很快就痊愈了");
            clean();
            WriteLine("小家伙天天陪在你身边,你也渐渐对她产生了眷念,但你知道这种感情是不被允许的。");
            WriteLine("当她向你提出离开时,你也只能放任她离去");
            clean();
            WriteLine("一天,你梦到了那个小女孩,在梦中她奄奄一息地躺在地上");
            WriteLine("你惊醒了过来,在你的脑海中不断地播放着小女孩的身影");
            WriteLine("你穿上盔甲,在背包里塞了几个护身符便匆匆上路");
            clean();
            branch1();
        }
        public void Start2()
        {
            WriteLine("好吧,我们都已经知道这劣质游戏的那无聊开头了");
            clean();
            branch1();
        }
        public void branch1()//分支1
        {
            WriteLine("你来到了黑暗石林,空气中的血腥味扑面而来,过了一会,你抵达了一个三叉入口,入口上的牌子告诫路上的行人不要向前走,你决定");
            WriteLine("1.向左走 2向右走 3向前走");
            string a = ReadLine();
            Clear();
            switch (a)
            {
                case "1":
                    Clear();
                    WriteLine("你拨开草丛顺着小路不断向前,天快黑时一座马戏团帐篷出现在你的眼前");
                    clean();
                    WriteLine("一个戴着小丑面具的人走了过来,对你说");
                    WriteLine("你好");
                    WriteLine("我是这个马戏团的团长,欢迎来到马戏团");
                    clean();
                    WriteLine("你向他挤出了个笑容,向马戏团内走去");
                    clean();
                    WriteLine("小丑面具下的脸露出了阴冷的笑容");
                    WriteLine($"{Name},真是好久不见了呢");
                    WriteLine("小丑男退后一步消失在了黑暗中");
                    clean();
                    WriteLine("赶路的疲惫彻底征服了你,你在床上滚了几下便进入了梦中");
                    clean();
                    WriteLine("午夜,你再次被梦像惊醒.你下定决心要尽快找到小女孩");
                    WriteLine("这时你感知到了一股黑暗能量在马戏团内蠢蠢欲动");
                    WriteLine("你决定: 1去看看 2不理它");
                    clownline1();//调用小丑线1号方法
                    return;
                case "2":
                    WriteLine("在穿过了几片密林后,一个小镇出现在你的眼前");
                    WriteLine("你来到小镇,小镇墙外贴的都是关于双子先知的事迹");
                   
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值