admin 管理员组文章数量: 1184232
第三小节
作为文字游戏,重要的不仅有代码,还有剧本。主包也是找了AI帮我写了个大纲。
之前我找AI的时候AI写的还是那种经典网文套路的大男主剧本,现在写的倒是那种欧洲中世纪风格(符合克苏鲁题材)
《深潜者之卵》
——中篇小说大纲(克苏鲁神话体系)
一、核心设定
1. 世界观
1938 年,美国麻州近海一座因“海底煤矿”而繁荣的孤岛——“冷礁镇”(Cold Reef)。岛民中混杂着深潜者血脉,镇上最古老的家族“马什—吉尔曼财团”正筹备唤醒克苏鲁的幼体“戈瑟·达贡”。
2. 主题
血脉与自由意志、记忆与身份、工业贪婪与宇宙恐怖。
3. 结构
五幕 × 两视角(双线叙事),总字数 4~5 万字。
二、主要人物
1. 艾琳·沃恩(Eileen Vaughn)
28 岁,《波士顿邮报》女记者,外祖母失踪于冷礁镇。
内在冲突:理性 vs. 血脉召唤(她拥有 1/4 深潜者血统,但自己尚不知情)。
2. 亨利·吉尔曼(Henry Gilman)
32 岁,岛上灯塔看守人、马什家族的私生子。
内在冲突:对人类的眷恋 vs. 对海洋的归属。
3. “主教”奥贝德·马什七世(Obadiah Marsh VII)
72 岁,财团实际掌权者,已部分变异,计划用“深潜者之卵”孵化达贡幼体。
4. 阿舍·凯恩博士(Dr. Asher Kane)
45 岁,麻省理工古生物学家,受雇研究岛上古化石,逐渐沦为祭品。
5. “蓝环”
一只被囚禁在灯塔地下室的幼年深潜者,亨利的秘密朋友,也是未来仪式的关键。
三、五幕大纲
【幕一:潮痕】(占全文 15%)
• 引子:1938 年 10 月,艾琳收到匿名信——一张泛黄照片:外祖母站在灯塔前,背后海面浮现巨大黑影。
• 抵达冷礁镇:煤矿关闭、渔民失踪、镇民皮肤泛绿光。
• 双线开场:
– 艾琳采访镇长,得知“教会”将在 11 月 1 日(萨温节)举行“海火节”。
– 亨利在灯塔地下室给“蓝环”喂食,发现海底裂缝扩大。
• 悬念:艾琳在旅馆镜中短暂看到自己瞳孔变成竖缝。
【幕二:盐梦】(25%)
• 调查:艾琳在档案馆找到 1846 年《印斯茅斯纪事》残页,确认外祖母曾姓“马什”。
• 亨利带艾琳夜潜废弃矿井,发现刻有克苏鲁符号的青铜门。
• 第一次恐怖升级:
– 青铜门后飘出“盐梦孢子”,吸入者会做海底城市伊哈—恩斯雷的梦。
– 艾琳梦里看见自己生出鳃。
• 冲突:亨利劝艾琳离开;艾琳坚持要找到外祖母(其实外祖母已被献祭,骸骨就在灯塔墙里)。
【幕三:鲸落】(25%)
• 凯恩博士解剖一具“鲸鱼”,其腹内有尚未孵化的深潜者之卵(半化石、半活体)。
• 奥贝德绑架凯恩,准备用其“纯粹人类基因”催化卵的孵化。
• 艾琳潜入马什府邸,发现:
– 族谱:自己名字被写在“第七代返祖容器”栏。
– 地窖仪式:深潜者合唱《达贡之降临》。
• 双线危机:
– 亨利被奥贝德揭露身世——其母亲是人类祭品,他必须亲手献上艾琳。
– 艾琳开始掉指甲,指缝间长出薄膜。
【幕四:蓝环】(25%)
• 灯塔对峙:
– 亨利放走“蓝环”,引发海啸预警。
– 奥贝德带深潜者围攻灯塔,亨利点燃煤油,灯塔化为火炬。
• 艾琳在灯塔顶层用摩尔斯灯向外海求救,灯光却召来“克苏鲁梦群”(无形眷族)。
• 牺牲:
– 亨利割腕,以混血之血污染祭坛,使“深潜者之卵”排斥达贡幼体。
– 蓝环衔走卵,跳入漩涡,生死未卜。
• 崩塌:海底裂缝喷出黑水,镇民集体跳海,冷礁镇陆沉。
【幕五:回声】(10%)
• 尾声:1939 年 1 月,波士顿精神病院。
– 艾琳记录口述档案,指甲已完全脱落,耳后出现腮痕。
– 最后一页手写:
“我听到潮声在血管里拍岸。
如果这篇手稿被发现,
请把灯塔的灰烬撒进盐沼,
让火焰继续燃烧在水下。”
• 开放式结局:护士在门外听见潮汐声,却身处内陆。
四、克苏鲁元素索引
1. 旧日支配者:克苏鲁(间接)、达贡与海德拉(被提及)。
2. 眷族:深潜者、克苏鲁梦群、盐梦孢子。
3. 典籍/文物:
– 《达贡真经》残卷(马什家私藏)
– 青铜门(伊哈—恩斯雷的碎片)
– 深潜者之卵(半化石,外壳刻有星图)
4. 地理:冷礁镇(原创)、海底裂缝、灯塔(倒置的巴别塔意象)。
五、叙事技巧
1. 双线 POV:每章交替使用艾琳(第一人称)与亨利(第三人称有限),最后一章回到艾琳的“不可靠叙事”。
2. 渐进式身体恐怖:从指甲脱落、瞳孔变形,到最终鳃裂。
3. 光线意象:
– 灯塔之火(理性、人类)
– 深海幽光(疯狂、宇宙)
两者在灯塔顶层交织成“燃烧的深渊”视觉主题。
4. 声音设计:
– 深潜者合唱用拉丁语倒写、夹杂纳卡尔语(Naacal)。
– 盐梦孢子在耳蜗里发出潮汐白噪,使读者产生“被海水倒灌”的临场感。
六、篇幅 & 节奏
• 每幕 6~8 千字;幕三、幕四为高潮,连续三章无场景切换,制造窒息感。
• 幕五用短篇书信体,收束线索并留白。
七、后续可拓展方向
1. 短篇集《冷礁镇遗民》:讲述逃出大洪水的岛民在 1960 年代再次集结。
2. TRPG 模组:灯塔地下 5 层地图 + 深潜者之卵孵化随机表。
3. 音频剧:用双耳录音技术还原“盐梦孢子”的低频嗡鸣。
——END——
最合适文字游戏的文体其实就是剧本。
突然想到原来的listbox的Height还没有写改大小的函数。
listBox1.Size =newSize(120,(this.Size.Height -28)/2);
这很容易实现,只需要在上面的函数中加入这一部分就行了。
这样的话,整个函数就是这样的
privatevoidMain_Resize(object sender,EventArgs e){
panel1.Size =newSize(this.Size.Width -168,this.Size.Height -64);
listBox1.Size =newSize(120,(this.Size.Height -28)/2);}
其中“this.Size.Width - 168”是因为panel控件的x轴长度需要减去listbox和边框的部分。其他几个计算也是相同的道理(应该没有可以改写的)
接下来我们还需要把窗口的大小的最小值改成一个合理的数值。
Width = 28(The length of blank) + 120(The length of the listbox1)
Height = 372(We use the default height)
就是这样(感觉这样说话有点入机)
我们所想的是能够通过listbox的项更改panel所绑定的页面
说实话VS自带的UI真的土死了(别让微软的人看到了)
第四小节
为了不让我们的程序成为屎山代码,还是建议多加注释、多用筛选器分类。
我们添加两个文件夹,用来区分我们剧情的页面和UI的页面。一个取名叫“MainUI”(主要的UI)、另一个取名叫“Story”(故事)。
vs 2019里面叫文件夹,vs 2022里面好像叫筛选器,文件夹建了也不能用C#交互,C#就不要建了
我们制作一个游戏的话(特别是这样的文字游戏),我的建议是以下面这种顺序制作:
- 游戏逻辑(也包括2D、3D游戏中的技能和移动)
- 游戏UI(剧情耗时较长,而且要做的东西也类似,一直做会越做越累的)
- 游戏剧情(其实也包括整个游戏内容)
- 存档系统(这个需要涉及到电脑文件,我想做一个动态库来直接解决)
注:我对于这个DLL文件的思路是这样的:
制作人在制作的时候要将需要保存的所有变量全部储存到同一个类里面,后续在读取的时候直接遍历类变量(我做的基本都是前端,对于与系统交互的部分了解很浅薄)
文字游戏的逻辑性其实还有一点(我想做的游戏类似跑团),就是判定的部分。我们现在就可以先做一个函数来解决判定的问题。
判定的解决
判定,结果并不止成功和失败两种。
注:给不了解跑团的人解释一下:
判定一般是使用技能、受到伤害、发动行动时所要进行的。内容就是:在1~100中随机数,将这个数与技能熟练度(或属性值)比大小。如果小于等于你的熟练度就视为成功,反之失败。如果随机数为1,则为大成功,为100则为大失败。大失败会有惩罚,大成功会有额外效果
所以我们最好的方法就是定义一个返回值为int的函数,但为了增加程序可读性(其实就是有强迫症),我们可以定义一个枚举类型。
我们在一个新的cs文件里面新建一个名为Fucition的类,在文件的命名空间部分定义枚举类型:
enumTRYLUCK:int{
SUCCESS =1,
FAILURE =2,
BIGSUCCESS =3,
BIGFAILURE =4}然后再fucition里面定义函数。
TRYLUCKjudging(int judgtrue){Random rd =newRandom();int vl = rd.Next(1,100);if(vl ==1){return TRYLUCK.BIGSUCCESS;}elseif(vl ==100){return TRYLUCK.BIGFAILURE;}elseif(vl <= judgtrue){return TRYLUCK.SUCCESS;}else{return TRYLUCK.FAILURE;}}
这就完成了。用不了switch、可能性还多的东西真的麻烦。
接下来在MainUI里面添加“用户控件”(一片博客比我小说一章的稿子还多了)
写完更换页面和根据panel大小缩放控件的函数就结束了。
第五小结(上)
5.1 Panel切换
我们给listbox添加项,在新建用户控件。
privatevoidlistBox1_SelectedIndexChanged(object sender,EventArgs e){
panel1.Show();
panel1.Controls.Clear();switch(listBox1.SelectedIndex){case0:
panel1.Controls.Add(saver);break;case1:
panel1.Controls.Add(story);break;case2:
panel1.Controls.Add(user);break;}}
不行了没时间了剩下的之后在写(字数也够了)
以上代码就可以完成在几个页面中切换的需求。
版权声明:本文标题:初学者必看:从〇构建的Flash游戏制胜之道 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1774457080a3571381.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论