嗯,有点简陋...
为什么不用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("你来到小镇,小镇墙外贴的都是关于双子先知的事迹");