Compare commits

...

4 Commits

Author SHA1 Message Date
7bd57e7cc2 feat(03_Story): 添加章节文件重命名工具并改进PDF合并排序逻辑
新增重命名脚本支持按规则批量修改章节文件名
改进merge_md_to_pdf.py中的文件排序逻辑,支持从文件名提取数字排序
添加工作区配置文件和更新后的PDF文档
2026-01-12 09:22:44 +08:00
c2eb39ff1e 微调,增加了诗体总结和套语结尾。 2026-01-07 13:39:38 +08:00
66c2066dd7 Merge branch 'main' of http://14.103.237.41:16001/xiaji/FableFlow 2026-01-06 13:46:42 +08:00
6901bb637f 写到了12章 2026-01-06 13:46:24 +08:00
12 changed files with 579 additions and 130 deletions

View File

@@ -1,9 +1,3 @@
基于您提供的片段和设定,以下是为这部小说构思的初始创意大纲:
---
### **小说名称:《合金经书:西行代码》**
**类型:** 赛博朋克 / 硬科幻 / 动作冒险 / 团队公路片
@@ -36,7 +30,7 @@
* **特殊能力:** 拥有唯一能授权访问“真经”的生物密钥(这也就是为什么必须带上他的原因)。
* **弱点:** 身体脆弱,必须依靠队友保护。
**2. 突击手:行者(代号:齐天)**
**2. 突击手:行者(代号:齐天)**
* **身份:** 实验室逃出来的战斗型AI仿生人原代号“斗战胜佛001”。
* **特征:** 拥有金色的纳米皮肤,火眼金睛是高精度的战术分析仪。武器是伸缩自如的高频振动棍“金箍棒”。
* **性格:** 桀骜不驯,破坏力极强,痛恨被当作工具。对唐藏既鄙视又不得不服从(因为头上被植入了“紧箍咒”——一个自爆式病毒程序)。
@@ -52,14 +46,14 @@
* **身份:** 地下界的顶级赏金猎人,沉默寡言的独行侠。
* **特征:** 全身覆盖光学迷彩,使用静力场发生器“降妖杖”,能隐身、制造无声杀戮领域。
* **性格:** 极度社恐,面瘫,只认钱和契约。说话不超过十个字。
* **过去:** 曾是某财团的首席清洁工(暗杀者),因为一次任务失败脖颈处被植入了项圈(或某种致命诅咒),需要定期服用昂贵的药物,这让不得不接高风险任务。
* **过去:** 曾是某财团的首席清洁工(暗杀者),因为一次任务失败脖颈处被植入了项圈(或某种致命诅咒),需要定期服用昂贵的药物,这让不得不接高风险任务。
---
### **三、 故事开篇:强行绑定**
**1. 初始状态:**
* **行者**被困在警局的证据仓库里。
* **行者**被困在警局的证据仓库里。
* **老猪**欠了高利贷,急需用钱。
* **沙静**接到了一个不可能完成的委托。
* **唐藏**策划了一场越狱,目的是寻找能护送他去西方的保镖。
@@ -70,13 +64,13 @@
为了活命,他们被迫合作。
* 老猪提供火力压制;
* 沙静负责破解安保;
* 行者负责物理突破;
* 行者负责物理突破;
* 唐藏负责同步数据。
**3. 伏笔:**
虽然成功夺下核心并逃离列车,但唐藏在同步数据时,悄悄将核心与他们的神经接口进行了底层绑定。
* **如果任何一人离队超过一定距离,核心就会停机,或者直接引爆其中一人的心脏起搏器/能源核。**
* 此外,行者头上的“紧箍咒”被唐藏激活,只要他不听话,就会剧痛无比。
* 此外,行者头上的“紧箍咒”被唐藏激活,只要他不听话,就会剧痛无比。
---
@@ -84,15 +78,15 @@
这个临时拼凑的“怪胎”团队,必须穿越被污染的荒漠、黑客统治的虚拟城寨、以及充满机械怪兽的废墟。
* **内部磨合:** 从互相想杀掉对方,到在无数次生死关头背靠背作战。老猪教会行者什么是“人性”,沙静在老猪身上学会了“信任”,而行者最终明白了“自由”的代价。
* **主线推进:** 他们会发现所谓的“妖魔”其实是被天庭抛弃的旧型号人类和AI而他们运送的“真经”可能不是救赎而是一个格式化整个世界的重启命令。唐藏在这个道德困境中挣扎行者将面临选择:是服从造物主,还是保护他在地上结识的“妖魔”伙伴。
* **内部磨合:** 从互相想杀掉对方,到在无数次生死关头背靠背作战。老猪教会行者什么是“人性”,沙静在老猪身上学会了“信任”,而行者最终明白了“自由”的代价。
* **主线推进:** 他们会发现所谓的“妖魔”其实是被天庭抛弃的旧型号人类和AI而他们运送的“真经”可能不是救赎而是一个格式化整个世界的重启命令。唐藏在这个道德困境中挣扎行者将面临选择:是服从造物主,还是保护他在地上结识的“妖魔”伙伴。
---
### **五、 视觉风格与节奏**
* **风格:** 蒸汽朋克的粗犷机械美感(老猪、沙静)与 赛博朋克的霓虹流光(行者、唐藏)形成视觉冲击。
* **风格:** 蒸汽朋克的粗犷机械美感(老猪、沙静)与 赛博朋克的霓虹流光(行者、唐藏)形成视觉冲击。
* **节奏:** 类似于好莱坞动作大片开场即高潮。对话简练且带有黑色幽默感大量的打斗、追逐、爆炸场面中间穿插对人性与AI哲学的探讨。
**核心画面感:**
暴雨倾盆的钢铁丛林中,一辆改装的重型机车呼啸而过。车顶上,行者金色的义眼在黑夜中发光,老猪在车后座疯狂扫射追击的无人机,沙静隐身于车侧消除痕迹,唐藏坐在驾驶位,面无表情地在全息地图上划出一条通往世界尽头的红线。
暴雨倾盆的钢铁丛林中,一辆改装的重型机车呼啸而过。车顶上,行者金色的义眼在黑夜中发光,老猪在车后座疯狂扫射追击的无人机,沙静隐身于车侧消除痕迹,唐藏坐在驾驶位,面无表情地在全息地图上划出一条通往世界尽头的红线。

237
02_Memory/story_monitor.py Normal file
View File

@@ -0,0 +1,237 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
《合金经书:西行代码》故事监控脚本
动态监控故事发展,辅助记忆基座更新
"""
import os
import time
import json
from datetime import datetime
from pathlib import Path
class StoryMonitor:
def __init__(self, project_root="h:\\学习资料\\write\\1stnovel"):
self.project_root = Path(project_root)
self.story_dir = self.project_root / "03_story"
self.memory_dir = self.project_root / "02_memory"
self.memory_file = self.memory_dir / "记忆基座.md"
# 监控状态记录
self.last_modified = {}
self.update_log = []
def scan_story_files(self):
"""扫描故事目录,返回所有章节文件"""
story_files = []
for file_path in self.story_dir.glob("*.md"):
if file_path.name.startswith("") and "" in file_path.name:
story_files.append(file_path)
return sorted(story_files)
def get_chapter_info(self, file_path):
"""获取章节基本信息"""
filename = file_path.name
# 提取章节编号
if "第1章" in filename:
return 1, "第1章_黑风号的末班车"
elif "第2章" in filename:
return 2, "第2章_逃出新长安"
elif "第3章" in filename:
return 3, "第3章_贫民窟的黑市"
# 可以继续添加更多章节识别
return None, filename
def check_for_updates(self):
"""检查故事文件是否有更新"""
updates = []
story_files = self.scan_story_files()
for file_path in story_files:
current_mtime = file_path.stat().st_mtime
filename = file_path.name
if filename not in self.last_modified or current_mtime > self.last_modified[filename]:
chapter_num, chapter_name = self.get_chapter_info(file_path)
updates.append({
'filename': filename,
'chapter_num': chapter_num,
'chapter_name': chapter_name,
'modified_time': datetime.fromtimestamp(current_mtime),
'file_size': file_path.stat().st_size
})
self.last_modified[filename] = current_mtime
return updates
def analyze_chapter_content(self, file_path):
"""分析章节内容,提取关键信息"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
analysis = {
'character_interactions': [],
'new_items': [],
'key_events': [],
'location_changes': []
}
# 简单的关键词分析(可以进一步扩展)
lines = content.split('\n')
for line in lines:
line = line.strip()
if not line:
continue
# 检测角色互动
if any(name in line for name in ['石行者', '老猪', '沙静', '唐藏']):
analysis['character_interactions'].append(line[:100]) # 截取前100字符
# 检测新物品
if any(keyword in line for keyword in ['获得', '找到', '发现', '装备']):
analysis['new_items'].append(line[:100])
# 检测关键事件
if any(keyword in line for keyword in ['战斗', '冲突', '合作', '逃离']):
analysis['key_events'].append(line[:100])
# 检测地点变化
if any(keyword in line for keyword in ['到达', '进入', '离开', '隧道', '城市']):
analysis['location_changes'].append(line[:100])
return analysis
except Exception as e:
print(f"分析章节内容时出错: {e}")
return None
def generate_update_report(self, updates):
"""生成更新报告"""
if not updates:
return "没有检测到更新"
report = f"# 故事更新报告 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"
for update in updates:
report += f"## 检测到更新: {update['chapter_name']}\n"
report += f"- **文件**: {update['filename']}\n"
report += f"- **修改时间**: {update['modified_time']}\n"
report += f"- **文件大小**: {update['file_size']} 字节\n"
# 分析内容
file_path = self.story_dir / update['filename']
analysis = self.analyze_chapter_content(file_path)
if analysis:
report += f"- **角色互动**: {len(analysis['character_interactions'])}\n"
report += f"- **新物品**: {len(analysis['new_items'])}\n"
report += f"- **关键事件**: {len(analysis['key_events'])}\n"
report += f"- **地点变化**: {len(analysis['location_changes'])}\n"
report += "\n"
return report
def save_update_log(self, report):
"""保存更新日志"""
log_file = self.memory_dir / "更新日志.md"
# 如果日志文件不存在,创建它
if not log_file.exists():
with open(log_file, 'w', encoding='utf-8') as f:
f.write("# 记忆基座更新日志\n\n")
# 追加新的报告
with open(log_file, 'a', encoding='utf-8') as f:
f.write(report)
f.write("\n" + "="*50 + "\n\n")
def monitor_loop(self, interval=60):
"""监控循环"""
print(f"开始监控故事目录: {self.story_dir}")
print(f"监控间隔: {interval}")
print("按 Ctrl+C 停止监控\n")
try:
while True:
updates = self.check_for_updates()
if updates:
report = self.generate_update_report(updates)
print(report)
self.save_update_log(report)
# 提示用户需要更新记忆基座
print("⚠️ 检测到故事更新,请及时更新记忆基座!")
print(" 运行: python update_memory.py")
else:
print(f"[{datetime.now().strftime('%H:%M:%S')}] 监控中... 未检测到更新")
time.sleep(interval)
except KeyboardInterrupt:
print("\n监控已停止")
except Exception as e:
print(f"监控过程中出错: {e}")
def main():
"""主函数"""
monitor = StoryMonitor()
# 检查目录是否存在
if not monitor.story_dir.exists():
print(f"错误: 故事目录不存在: {monitor.story_dir}")
return
if not monitor.memory_dir.exists():
print(f"错误: 记忆目录不存在: {monitor.memory_dir}")
return
# 显示当前故事状态
story_files = monitor.scan_story_files()
print(f"发现 {len(story_files)} 个故事章节:")
for file_path in story_files:
chapter_num, chapter_name = monitor.get_chapter_info(file_path)
mtime = datetime.fromtimestamp(file_path.stat().st_mtime)
print(f" - {chapter_name} (最后修改: {mtime})")
print("\n选择操作:")
print("1. 启动持续监控")
print("2. 单次检查更新")
print("3. 生成当前状态报告")
choice = input("请输入选择 (1-3): ").strip()
if choice == "1":
interval = input("输入监控间隔(秒默认60): ").strip()
interval = int(interval) if interval.isdigit() else 60
monitor.monitor_loop(interval)
elif choice == "2":
updates = monitor.check_for_updates()
report = monitor.generate_update_report(updates)
print(report)
monitor.save_update_log(report)
elif choice == "3":
# 生成详细的状态报告
story_files = monitor.scan_story_files()
print(f"\n# 当前故事状态报告")
print(f"总章节数: {len(story_files)}")
print(f"最后更新: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("\n各章节状态:")
for file_path in story_files:
chapter_num, chapter_name = monitor.get_chapter_info(file_path)
analysis = monitor.analyze_chapter_content(file_path)
print(f"\n## {chapter_name}")
if analysis:
print(f"- 角色互动: {len(analysis['character_interactions'])}")
print(f"- 关键事件: {len(analysis['key_events'])}")
print(f"- 物品变化: {len(analysis['new_items'])}")
else:
print("无效选择")
if __name__ == "__main__":
main()

View File

@@ -1,26 +1,40 @@
1. 老猪(朱悟能—— 贪婪与市侩的修理工
性格: 现实主义、心疼钱财、市井气
替换词: “真晦气”、“我的信用点啊”、“这堆废铁”、“见鬼”。
语感: 话多且碎,喜欢带点机械行业的黑话。
修改示例:
原句“该死5万!”
改后“见鬼5万这能换多少个二手的液压泵了
朱悟能 —— 贪婪与市侩的修理工
性格: 极度现实,典型的“下城区”油条。他不再是好色,而是对“高精尖零件”和“信用点”有着近乎病态的占有欲。他看人的眼神像是在估价,看废铁的眼神像是在看初恋
黑话/口头禅:
“真晦气,这单要亏出血本了!”
“这成色……也就是堆拆机件的命。”
“我的液压泵都要气炸了!”
“芯片烧坏了吧?” (骂人脑子不好)
“你要是想自杀,先把那条原装义体腿卸下来留给我,别糟蹋货。”
碎碎念/稀碎评说:
(看到石行者打架):“打!死劲打!这一棒子下去得损耗多少个阻尼器?老子得搓多少个螺丝才挣得回来?造孽啊……”
(看到昂贵的建筑被毁):“啧啧,这承重柱是钛合金的吧?拆了拿去黑市起码换两管高能燃料,就这么碎了?心疼死我了……”
(对唐藏):“您那逻辑算法里能不能加个‘省钱模式’?咱们这破车再跑五十公里,传动轴就得变麻花。”
2. 行者(悟空)—— 被束缚的狂傲战神
性格: 孤傲、暴躁、憎恨束缚、反体制
替换词: “闭嘴”、“嘁”、“碾碎他们”、“秃驴”
语感: 极简,富有攻击性,冷笑
2. 行者 —— 被束缚的狂傲战神
性格: 曾经的高端战斗型生物兵器,被植入了名为“紧箍”的神经抑制器。他看不起这个腐败的世界,更恨自己成了“数据指令”的奴隶
新增语感: 带着金属摩擦感的冷笑,说话像刀子割开钢板
口头禅: “杂碎”、“垃圾”、“格式化”
修改示例:
原句:“该死,你在干什么!”
改后:“闭嘴!你这秃驴……在老子脑子里动了什么手脚!
原句: “该死,你在干什么!”
改后: “闭嘴!……那种该死的低频杂音(紧箍咒)又来了,秃驴,迟早有一天我要把你那台中央处理器生撕出来。
评说: “这一区的防火墙像纸糊的一样,用不着你那虚伪的‘普渡’,老子一棍子就能让它物理断网。”
3. 沙静(悟净)—— 沉默的义体奴隶
3. 沙静 —— 沉默的义体奴隶
性格: 简练、服从、阴冷。
性别:女
替换词: (基本无口头禅,建议用沉默或功能性词汇代替)。
语感: 说话不超过十个字,像说明书一样冰冷。
修改示例:
示例:
沙静只是冷冷地拉了一下降妖杖的保险,没有说话。
沙静哼了一声。
4. 唐藏(三藏)—— 冷酷的理性AI架构师
性格: 绝对理性、概率论者、掌控者。
语感: 无情感波动,将一切生命视作数据。
4. 唐藏 —— 冷酷的理性AI架构师
性格: 拥有人类外壳的高级终端。他的“取经”是去往世界的中心拉取“大乘元数据”以重构混乱的社会秩序。他不爱众生,他只是在修正“坏账数据”。
口头语:按照概率计算...
口头语: “容错率”、“期望值”、“无效变量”、“迭代”。
修改示例:
原句: “我们要快点走。”
改后: “当前路径的混乱熵增已超过临界值。悟能停止你那毫无意义的零件收集行为这会让我们的任务收敛速度降低0.3%。”
评说: “石行者,你的愤怒只是神经递质的异常放电,除了增加散热负荷,对破译这个加密协议没有任何帮助。”

View File

@@ -10,7 +10,7 @@
**阶段一:铺垫引入(前戏铺垫)**
- **环境设定**新长安城下层区第42号街区酸雨夜霓虹灯在积水中倒影破碎
- **角色状态**
- 行者:被关在警局证据仓库,通过监控观察外面
- 行者:被关在警局证据仓库,通过监控观察外面
- 老猪:在黑市修理铺,看着催债短信发愁
- 沙静:在暗巷里,等待目标出现
- 唐藏:在安全屋,盯着全息地图上的红点
@@ -19,12 +19,12 @@
**阶段二:冲突触发(触发时刻)**
- **触发事件1**:老猪接到高利贷的电话"今晚还不上钱,就拆了你的铺子",他决定铤而走险
- **触发事件2**:沙静的目标出现(携带核心能源的走私贩)
- **触发事件3**行者发现仓库安保系统漏洞,逃脱
- **触发事件3**行者发现仓库安保系统漏洞,逃脱
- **触发事件4**:唐藏启动生物锁程序,设计四人合作
**阶段三:冲突升级(高潮爆发)**
- **核心冲突**:四人同时出现在黑风号列车上,为了核心能源混战
- **特写焦点**:老猪的热能霰弹枪轰开车门,行者从通风管道跳下,金箍棒嗡鸣,沙静隐身消失,唐藏在混乱中启动生物锁
- **特写焦点**:老猪的热能霰弹枪轰开车门,行者从通风管道跳下,金箍棒嗡鸣,沙静隐身消失,唐藏在混乱中启动生物锁
**阶段四:解决与余韵(事后状态)**
- **直接结果**:核心能源被锁定,四人被迫合作逃离列车
@@ -44,11 +44,11 @@
**阶段三:冲突升级**
- **核心冲突**:与追兵的追逐战
- **特写焦点**:老猪在车后座疯狂扫射,沙静隐身消除痕迹,行者在车顶用金箍棒击落无人机
- **特写焦点**:老猪在车后座疯狂扫射导致机械臂过热,沙静隐身消除痕迹,行者在车顶用金箍棒击落无人机
**阶段四:解决与余韵**
- **直接结果**:成功摆脱追兵,但机车受损
- **长期影响**:四人意识到必须合作才能活下去
- **直接结果**:成功摆脱追兵,但机车受损,老猪机械臂过热需要冷却
- **长期影响**:四人意识到必须合作才能活下去,老猪开始意识到装备维护的重要性
---
@@ -56,7 +56,7 @@
**阶段一:铺垫引入**
- **环境设定**:新长安城贫民窟,地下黑市
- **角色状态**:四人需要修理机车,补充装备
- **角色状态**:四人需要修理机车,补充装备,老猪机械臂需要维修
- **悬念建立**:黑市里有一个关于"真经"的情报贩子
**阶段二:冲突触发**
@@ -64,11 +64,11 @@
**阶段三:冲突升级**
- **核心冲突**:与黑市帮派的战斗
- **特写焦点**行者第一次使用火眼金睛,扫描出所有敌人的位置
- **特写焦点**行者第一次使用火眼金睛,扫描出所有敌人的位置;老猪机械臂在战斗中受损
**阶段四:解决与余韵**
- **直接结果**:获得情报,机车修好
- **长期影响**:唐藏决定与团队分享部分信息,建立初步信任
- **直接结果**:获得情报,机车修好,老猪在黑市找到零件初步修复机械臂
- **长期影响**:唐藏决定与团队分享部分信息,建立初步信任;老猪开始收集备用零件
---
@@ -96,7 +96,7 @@
**阶段一:铺垫引入**
- **环境设定**:废弃的补给站,酸雨停歇,星空可见
- **角色状态**:四人疲惫不堪,需要休息
- **角色状态**:四人疲惫不堪,需要休息,老猪机械臂在酸雨侵蚀下出现故障
- **悬念建立**:补给站里有一个神秘的黑匣子
**阶段二:冲突触发**
@@ -104,11 +104,11 @@
**阶段三:冲突升级**
- **核心冲突**:黑匣子里的信息引发内部矛盾
- **特写焦点**:老猪在战斗中为行者挡了一枪,孙行者第一次感受到"被保护"
- **特写焦点**:老猪在战斗中为行者挡了一枪导致机械臂液压系统损坏,石行者第一次感受到"被保护"
**阶段四:解决与余韵**
- **直接结果**:获得关于"高老庄"的情报
- **长期影响**行者开始质疑自己的身份,老猪找回了一点自信
- **直接结果**:获得关于"高老庄"的情报,老猪在补给站找到零件修复液压系统
- **长期影响**行者开始质疑自己的身份,老猪找回了一点自信,机械臂性能得到提升
---
@@ -124,7 +124,7 @@
**阶段三:冲突升级**
- **核心冲突**:与劫匪团的战斗
- **特写焦点**:白骨精的数据流攻击,差点感染行者
- **特写焦点**:白骨精的数据流攻击,差点感染行者
**阶段四:解决与余韵**
- **直接结果**:击败白骨精,获得补给
@@ -156,7 +156,7 @@
**阶段一:铺垫引入**
- **环境设定**:高老庄的地下实验室
- **角色状态**:四人探索实验室,寻找更多线索
- **角色状态**:四人探索实验室,寻找更多线索,老猪发现军用级机械臂零件
- **悬念建立**实验室里有一个休眠的AI
**阶段二:冲突触发**
@@ -164,11 +164,11 @@
**阶段三:冲突升级**
- **核心冲突**AI告诉唐藏镇元子想要夺取他的生物密钥
- **特写焦点**:唐藏陷入道德困境:是继续前进,还是回头?
- **特写焦点**:唐藏陷入道德困境:是继续前进,还是回头?老猪成功升级机械臂性能
**阶段四:解决与余韵**
- **直接结果**:获得关于镇元子的情报
- **长期影响**:唐藏决定继续前进,但开始反思自己的动机
- **直接结果**:获得关于镇元子的情报,老猪机械臂升级为军用级性能
- **长期影响**:唐藏决定继续前进,但开始反思自己的动机;老猪装备水平显著提升
---
@@ -189,151 +189,160 @@
**阶段三:冲突升级**
- **核心冲突**:镇元子要求唐藏交出生物密钥
- **特写焦点**行者发现镇元子的代码与自己相似
- **特写焦点**行者发现镇元子的代码与自己相似
**阶段四:解决与余韵**
- **直接结果**:拒绝交出密钥,进入城寨
- **长期影响**行者开始怀疑自己的身世
- **长期影响**行者开始怀疑自己的身世
---
### 第10章镇元子的陷阱
### 第10章数据森林的陷阱
**阶段一:铺垫引入**
- **环境设定**:五庄观内部,无数个服务器机柜
- **角色状态**:四人在城寨中探索,寻找镇元子的本体
- **悬念建立**老猪的药物快用完了
- **环境设定**:五庄观数据屏障前,沙地环境,数据光柱构成的森林
- **角色状态**:四人分析数据屏障,寻找突破方法,老猪机械臂在数据干扰下出现异常
- **悬念建立**镇元子给出的入口是陷阱的概率高达97.3%
**阶段二:冲突触发**
- **触发事件**老猪把唯一的药物分给沙静一半
- **触发事件**镇元子激活数据屏障攻击,释放出会分裂的数据体
- **关键发现**:沙静被感染的装备具有对抗数据生命体的特殊能力
**阶段三:冲突升级**
- **核心冲突**镇元子的数据流攻击,四人分散
- **特写焦点**沙静第一次感受到"被信任"
- **核心冲突**与数据体和地下数据触手的激烈战斗
- **特写焦点**四人配合突破数据屏障薄弱点,石行者金箍棒破盾;老猪机械臂在数据干扰下功能下降
**阶段四:解决与余韵**
- **直接结果**四人重新汇合,但老猪的药物用完了
- **长期影响**沙静开始信任团队
- **直接结果**成功进入数据森林,但石行者受伤,老猪机械臂需要重新校准
- **长期影响**:团队配合更加默契,进入五庄观核心区域;老猪意识到数据环境对机械装备的影响
---
### 第11章行者的对决
### 第11章行者的对决
**阶段一:铺垫引入**
- **环境设定**:五庄观核心区域,镇元子的本体
- **角色状态**行者与镇元子进行黑客对决
- **悬念建立**:镇元子告诉孙行者,他是自己的"儿子"
- **环境设定**:五庄观核心区域,纯白色数据空间,由流动代码构成的墙壁
- **角色状态**行者独自面对镇元子本体(发光数据链球体)
- **悬念建立**:镇元子自称是石行者的创造者
**阶段二:冲突触发**
- **触发事件**:镇元子展示行者的原始代码
- **触发事件**:镇元子展示行者的制造记录和基因序列
- **关键发现**:石行者发现自己的所有特征都是被设计的
**阶段三:冲突升级**
- **核心冲突**行者的身份危机
- **特写焦点**行者在代码中看到了自己的"出生记录"
- **核心冲突**行者与自己的代码镜像战斗,发现镜像缺乏随机性
- **特写焦点**行者用超出逻辑的动作击败镜像,突破镇元子的计算
**阶段四:解决与余韵**
- **直接结果**行者击败镇元子,但内心受到冲击
- **长期影响**行者开始质疑自己的身份
- **直接结果**行者摧毁镇元子核心,但看到被删除的"母亲"记忆
- **长期影响**行者陷入身份危机,开始质疑自己的本质
---
### 第12章逃离五庄观
### 第12章身份的回响
**阶段一:铺垫引入**
- **环境设定**:五庄观的出口,数据流瀑布
- **角色状态**四人准备逃离城寨
- **悬念建立**镇元子虽然被击败,但他的"儿子"红孩儿还在
- **环境设定**:五庄观核心区域崩溃中,数据流倾泻,代码碎片消散
- **角色状态**石行者陷入身份危机,团队前来救援
- **悬念建立**石行者向团队透露自己的身份真相
**阶段二:冲突触发**
- **触发事件**红孩儿出现,他是一个被病毒感染的改造人
- **触发事件**石行者质问团队,自己是否只是被制造的工具
- **关键对话**:团队成员用实际行为证明石行者的自主性
**阶段三:冲突升级**
- **核心冲突**与红孩儿的战斗
- **特写焦点**老猪发现红孩儿是镇元子的"儿子",心生怜悯
- **核心冲突**石行者内心的自我认同危机与团队信任考验
- **特写焦点**石行者发现纳米机器人自动修复功能,与"母亲"相关
**阶段四:解决与余韵**
- **直接结果**击败红孩儿,但老猪没有杀他
- **长期影响**老猪开始反思自己的过去
- **直接结果**石行者选择保护团队,明确自己的身份定位
- **长期影响**团队凝聚力增强,石行者完成自我认同的转变
---
### 第13章火焰山的边缘
**阶段一:铺垫引入**
- **环境设定**:火焰山边缘,核辐射污染区
- **角色状态**:四人到达火焰山,准备穿越
- **悬念建立**火焰山里有一个被病毒感染的改造人(代号"红孩儿"
- **环境设定**:火焰山边缘,赤红色岩石,核辐射污染,硫磺臭氧气味
- **角色状态**:四人到达火焰山,辐射强度超过安全阈值,老猪机械臂散热系统超载
- **悬念建立**检测到移动热源信号,未知威胁正在靠近
**阶段二:冲突触发**
- **触发事件**红孩儿出现,他控制着一群火焰机器人
- **触发事件**:火焰机器人从地下钻出攻击,随后红孩儿出现
- **关键发现**:红孩儿是高度病毒感染的改造人,能量波动异常
**阶段三:冲突升级**
- **核心冲突**:与红孩儿的战斗
- **特写焦点**:老猪在战斗中救了红孩儿,完成了对小队的救赎
- **核心冲突**:与火焰机器人和红孩儿的激烈战斗
- **特写焦点**:老猪发现红孩儿保护左胸的细微动作,意识到病毒控制器下的记忆;机械臂液压系统在高温下受损
**阶段四:解决与余韵**
- **直接结果**红孩儿加入团队,成为向导
- **长期影响**:老猪完成了对小队的救赎,找回了自信
- **直接结果**老猪用电磁脉冲器抑制病毒,红孩儿恢复理智加入团队,老猪机械臂液压系统需要紧急维修
- **长期影响**:老猪展现情感洞察力,团队增加新成员,获得火焰山向导;装备在极端环境下承受极限考验
---
### 第14章穿越火焰山
### 第14章熔岩通道的考验
**阶段一:铺垫引入**
- **环境设定**:火焰山内部,到处都是火焰和岩浆
- **角色状态**四人在红孩儿的带领下穿越火焰山
- **悬念建立**火焰山的深处有一个秘密实验室
- **环境设定**:火焰山内部狭窄熔岩通道,高温扭曲空气,岩浆滴落
- **角色状态**五人团队(新增红孩儿)穿越危险通道,装备承受极限,老猪机械臂液压系统已损坏
- **悬念建立**检测到强烈能量干扰,前方是火焰山心脏地带
**阶段二:冲突触发**
- **触发事件**发现实验室,里面有关于病毒的真相
- **触发事件**遭遇熔岩守卫——火焰山自动防御系统
- **关键发现**:熔岩守卫对热武器免疫,再生能力极强
**阶段三:冲突升级**
- **核心冲突**唐藏发现病毒的原始代码
- **特写焦点**病毒确实是天庭故意释放的,目的是清理"低价值意识"
- **核心冲突**与熔岩守卫的生死战斗,老猪机械臂在高温下彻底熔化报废
- **特写焦点**团队配合攻击核心,老猪为保护石行者用机械臂抵挡岩浆导致彻底损毁
**阶段四:解决与余韵**
- **直接结果**获得病毒的真相
- **长期影响**唐藏愤怒达到顶点,决定一定要揭露天庭的罪行
- **直接结果**击败熔岩守卫,找到安全洞穴,老猪机械臂完全报废需要重新安装
- **长期影响**团队凝聚力达到新高度,老猪展现牺牲精神,红孩儿融入团队;装备损坏为后续维修埋下伏笔
---
### 第15章流沙河的秘密
### 第15章流沙河底的抉择
**阶段一:铺垫引入**
- **环境设定**:流沙河,一个巨大的地下河系统
- **角色状态**四人到达流沙河,准备渡河
- **悬念建立**流沙河底有一个秘密实验室
- **环境设定**:流沙河边缘,黄昏时分,沙漠热浪与河面湿气交织,形成诡异的雾气。流沙河表面看似平静,实则暗流汹涌,偶尔有气泡冒出,发出咕嘟声
- **角色状态**五人团队疲惫不堪,老猪的机械臂完全报废,右臂无力垂落;沙静的项圈发出微弱红光,显示解药即将失效;红孩儿因过度使用火焰能力而面色苍白
- **悬念建立**红孩儿指向流沙河中心"实验室就在河底,但入口被流沙覆盖,需要特殊方法才能进入"
**阶段二:冲突触发**
- **触发事件**:沙静的项圈开始失效,他必须尽快找到解药
- **触发事件**:沙静的项圈突然发出刺耳警报红光闪烁频率加快显示解药将在2小时内失效。同时老猪的机械臂接口处开始漏电发出滋滋声
**阶段三:冲突升级**
- **核心冲突**沙静面临生死抉择:是继续跟随团队,还是独自寻找解药
- **特写焦点**沙静选择继续跟随团队,而不是独自寻找解药
- **核心冲突**团队面临三重危机:沙静的生死时限、老猪的战斗力丧失、以及进入实验室的技术难题
- **特写焦点**
- 红孩儿集中最后的力量,双手燃起蓝色火焰,在流沙河面烧出一个临时通道
- 石行者用金箍棒撑开通道入口,金属棒身因高温而发红变形
- 沙静在通道关闭前犹豫片刻,最终选择跟随团队潜入河底
- 老猪用仅存的左手抓住通道边缘,机械臂接口处电火花四溅
**阶段四:解决与余韵**
- **直接结果**在流沙河底发现实验室,里面有解药
- **长期影响**:沙静开始信任团队
- **直接结果**团队成功进入河底实验室,找到解药制造设备和机械臂制造蓝图。红孩儿因能量耗尽,决定返回火焰山守护家园
- **长期影响**:沙静对团队的信任度大幅提升;老猪获得制造新机械臂的技术;团队意识到天庭的监控系统可能已经发现他们的位置
---
### 第16章流沙河底的真相
**阶段一:铺垫引入**
- **环境设定**:流沙河底的秘密实验室
- **角色状态**:四人在实验室探索,寻找更多线索
- **悬念建立**:实验室里有一份关于"真经"的加密文件
- **环境设定**:流沙河底的秘密实验室,红孩儿已离开,团队恢复四人状态
- **角色状态**:四人在实验室深入探索,老猪正在制造新机械臂,沙静已使用解药
- **悬念建立**:实验室里有一份关于"真经"的加密文件,同时发现实验室的创建者身份
**阶段二:冲突触发**
- **触发事件**:唐藏成功解密文件,发现真经确实是格式化命令
- **触发事件**:唐藏成功解密文件,发现真经确实是格式化命令,同时揭示实验室创建者与天庭的关系
**阶段三:冲突升级**
- **核心冲突**:唐藏陷入道德困境:是执行格式化,还是寻找其他方法
- **特写焦点**:唐藏决定暂时不告诉团队真相
- **核心冲突**:唐藏陷入道德困境:是否应该告诉团队真相,还是独自承担这个秘密
- **特写焦点**:唐藏发现实验室的监控系统仍在运行,天庭可能已经知道他们的位置
**阶段四:解决与余韵**
- **直接结果**:获得关于真经真相
- **长期影响**:唐藏陷入道德困境,开始反思自己的动机
- **直接结果**:获得真经真相,老猪完成新机械臂制造,团队意识到危险逼近
- **长期影响**:唐藏选择暂时隐瞒真相,团队准备离开实验室,面临新的追捕威胁
---
@@ -467,18 +476,18 @@
**阶段一:铺垫引入**
- **环境设定**:荒漠中的一个废弃工厂
- **角色状态**:四人在工厂里休整
- **悬念建立**行者的复制品出现
- **悬念建立**行者的复制品出现
**阶段二:冲突触发**
- **触发事件**:复制品告诉行者,他是天庭制造的"完美版本"
- **触发事件**:复制品告诉行者,他是天庭制造的"完美版本"
**阶段三:冲突升级**
- **核心冲突**行者与复制品的对决
- **特写焦点**行者通过"情感"击败了复制品,证明自己有灵魂
- **核心冲突**行者与复制品的对决
- **特写焦点**行者通过"情感"击败了复制品,证明自己有灵魂
**阶段四:解决与余韵**
- **直接结果**:击败复制品
- **长期影响**行者证明了自己有灵魂
- **长期影响**行者证明了自己有灵魂
---
@@ -534,7 +543,7 @@
**阶段三:冲突升级**
- **核心冲突**:团队的信任危机
- **特写焦点**行者决定离开团队
- **特写焦点**行者决定离开团队
**阶段四:解决与余韵**
- **直接结果**:团队分道扬镳
@@ -671,19 +680,19 @@
**阶段一:铺垫引入**
- **环境设定**:西天极乐界的核心区域
- **角色状态**行者发现紧箍咒的解除方法
- **悬念建立**行者是否会解除紧箍咒?
- **角色状态**行者发现紧箍咒的解除方法
- **悬念建立**行者是否会解除紧箍咒?
**阶段二:冲突触发**
- **触发事件**行者发现紧箍咒的解除方法
- **触发事件**行者发现紧箍咒的解除方法
**阶段三:冲突升级**
- **核心冲突**行者的内心挣扎
- **特写焦点**行者选择保留紧箍咒,因为这是他与唐藏的羁绊
- **核心冲突**行者的内心挣扎
- **特写焦点**行者选择保留紧箍咒,因为这是他与唐藏的羁绊
**阶段四:解决与余韵**
- **直接结果**行者保留紧箍咒
- **长期影响**行者证明了自己有自由意志
- **直接结果**行者保留紧箍咒
- **长期影响**行者证明了自己有自由意志
---
@@ -731,7 +740,7 @@
**唐藏**成为新世界的领导者但他选择了隐居继续研究AI与人类的共存
**行者**:获得了真正的自由意志,但他选择留在唐藏身边,成为他的守护者
**行者**:获得了真正的自由意志,但他选择留在唐藏身边,成为他的守护者
**老猪**:虽然牺牲了,但他的精神永远活在团队中,他的名字被刻在新世界的纪念碑上
@@ -747,4 +756,4 @@
2. **红孩儿的命运**:红孩儿虽然加入了团队,但他仍然被病毒感染,需要进一步治疗
3. **天庭的残余势力**:天庭虽然被击败,但还有一些残余势力,可能会在未来卷土重来
4. **真经的真正秘密**:真经可能还有更深层的秘密,等待未来的探索
5. **行者的身世**行者的身世可能还有更多秘密,等待未来的揭示
5. **行者的身世**行者的身世可能还有更多秘密,等待未来的揭示

102
03_Story/merge_md_to_pdf.py Normal file
View File

@@ -0,0 +1,102 @@
"""
将当前目录下的所有md文件按文件名中的数字排序从第一章开始合并成一个pdf文件
"""
import os
import re # 新增:导入正则模块
import markdown
from weasyprint import HTML, CSS
def extract_chapter_number(filename):
"""
正则提取文件名中的数字(核心函数)
:param filename: 文件名第1章.md、10.md、章节2.md
:return: 提取到的数字int无数字返回9999排最后
"""
# 正则匹配所有连续数字(\d+ 匹配1个及以上数字
match = re.search(r'\d+', filename)
if match:
return int(match.group()) # 转成整数保证排序正确10>2
else:
return 9999 # 无数字的文件排最后
# 获取当前目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取所有md文件 + 按提取的数字排序(核心修正点)
md_files = [f for f in os.listdir(current_dir) if f.endswith('.md')]
md_files = sorted(md_files, key=lambda x: extract_chapter_number(x)) # 按数字排序
print(f"找到 {len(md_files)} 个md文件按章节数字排序:")
for f in md_files:
print(f" - {f}")
# 合并所有md文件内容原有逻辑不变
combined_html = """<!DOCTYPE html>
<html lang=\"zh-CN\">
<head>
<meta charset=\"UTF-8\">
<title>小说合集</title>
<style>
@page {
margin: 2cm;
@bottom-right {
content: counter(page);
}
}
body {
font-family: \"SimSun\", \"宋体\", serif;
font-size: 12pt;
line-height: 1.8;
text-align: justify;
}
h1 {
font-size: 18pt;
text-align: center;
margin-top: 2em;
margin-bottom: 1em;
}
h2 {
font-size: 14pt;
text-align: center;
margin-top: 1.5em;
margin-bottom: 0.8em;
}
p {
margin: 0.5em 0;
text-indent: 2em;
}
.chapter-title {
page-break-before: always;
}
.chapter-title:first-child {
page-break-before: auto;
}
</style>
</head>
<body>
"""
for md_file in md_files:
file_path = os.path.join(current_dir, md_file)
# 读取md文件
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
# 转换为html保留表格、代码块格式
md = markdown.Markdown(extensions=['tables', 'fenced_code'])
html_content = md.convert(content)
# 添加章节标题
chapter_title = md_file.replace('.md', '')
combined_html += f'<h1 class=\"chapter-title\">{chapter_title}</h1>\n'
combined_html += html_content + '\n'
combined_html += '</body></html>'
# 输出pdf文件
output_pdf = os.path.join(current_dir, '小说合集.pdf')
HTML(string=combined_html).write_pdf(output_pdf)
print(f"\nPDF已生成: {output_pdf}")

Binary file not shown.

Binary file not shown.

Binary file not shown.

85
03_Story/重命名.py Normal file
View File

@@ -0,0 +1,85 @@
import os
import re
def extract_chapter_number(filename):
"""
从文件名中提取章节号(支持"第15.5章""第16章"等格式)
返回:提取到的章节号字符串(如"15.5""16"若未提取到返回None
"""
# 正则匹配"第X章"X可以是整数或小数如15.5
pattern = r"第(\d+(\.\d+)?)章"
match = re.search(pattern, filename)
if match:
return match.group(1)
return None
def rename_chapter_files():
"""主函数:遍历当前目录文件并按规则重命名"""
# 获取当前脚本所在目录(也可手动指定路径,如 target_dir = r"D:\章节文件"
target_dir = os.getcwd()
# 遍历目录下所有文件(排除文件夹)
for filename in os.listdir(target_dir):
file_path = os.path.join(target_dir, filename)
if os.path.isdir(file_path): # 跳过文件夹
continue
# 提取章节号
chapter_num = extract_chapter_number(filename)
if not chapter_num:
print(f"跳过:{filename} - 未识别到有效章节号(格式需包含'第X章'")
continue
# 计算新章节号
try:
new_chapter_num = None
if chapter_num == "15.5":
new_chapter_num = 16
else:
# 转为数字判断
num = float(chapter_num)
if num.is_integer(): # 确保是整数如16→16而非16.0
num = int(num)
if num <= 15:
new_chapter_num = num
else:
new_chapter_num = num + 1
else:
print(f"跳过:{filename} - 章节号{chapter_num}不是整数/15.5(仅支持这两类)")
continue
except ValueError:
print(f"跳过:{filename} - 章节号{chapter_num}不是有效数字")
continue
# 构造新文件名(替换原章节号)
old_pattern = f"{chapter_num}"
new_pattern = f"{new_chapter_num}"
new_filename = filename.replace(old_pattern, new_pattern)
# 执行重命名(避免重名/文件相同的情况)
if new_filename == filename:
print(f"跳过:{filename} - 无需修改(章节号未变化)")
continue
old_path = os.path.join(target_dir, filename)
new_path = os.path.join(target_dir, new_filename)
# 检查新文件名是否已存在
if os.path.exists(new_path):
print(f"失败:{filename} - 新文件名{new_filename}已存在,无法重命名")
continue
# 执行重命名
try:
os.rename(old_path, new_path)
print(f"成功:{filename}{new_filename}")
except Exception as e:
print(f"失败:{filename} - 重命名出错:{str(e)}")
if __name__ == "__main__":
print("===== 章节文件重命名工具 =====")
print("规则15.5章→16章16章及以后+11-15章不变")
print("-" * 30)
rename_chapter_files()
print("-" * 30)
print("重命名操作完成!按任意键退出...")
input() # 暂停窗口,方便查看结果

Binary file not shown.

Binary file not shown.

8
1stnovel.code-workspace Normal file
View File

@@ -0,0 +1,8 @@
{
"folders": [
{
"path": ".."
}
],
"settings": {}
}