微调,增加了诗体总结和套语结尾。

This commit is contained in:
2026-01-07 13:39:38 +08:00
parent 66c2066dd7
commit c2eb39ff1e
8 changed files with 410 additions and 82 deletions

View File

@@ -1,9 +1,3 @@
基于您提供的片段和设定,以下是为这部小说构思的初始创意大纲:
---
### **小说名称:《合金经书:西行代码》** ### **小说名称:《合金经书:西行代码》**
**类型:** 赛博朋克 / 硬科幻 / 动作冒险 / 团队公路片 **类型:** 赛博朋克 / 硬科幻 / 动作冒险 / 团队公路片
@@ -52,7 +46,7 @@
* **身份:** 地下界的顶级赏金猎人,沉默寡言的独行侠。 * **身份:** 地下界的顶级赏金猎人,沉默寡言的独行侠。
* **特征:** 全身覆盖光学迷彩,使用静力场发生器“降妖杖”,能隐身、制造无声杀戮领域。 * **特征:** 全身覆盖光学迷彩,使用静力场发生器“降妖杖”,能隐身、制造无声杀戮领域。
* **性格:** 极度社恐,面瘫,只认钱和契约。说话不超过十个字。 * **性格:** 极度社恐,面瘫,只认钱和契约。说话不超过十个字。
* **过去:** 曾是某财团的首席清洁工(暗杀者),因为一次任务失败脖颈处被植入了项圈(或某种致命诅咒),需要定期服用昂贵的药物,这让不得不接高风险任务。 * **过去:** 曾是某财团的首席清洁工(暗杀者),因为一次任务失败脖颈处被植入了项圈(或某种致命诅咒),需要定期服用昂贵的药物,这让不得不接高风险任务。
--- ---

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

@@ -22,6 +22,7 @@
3. 沙静 —— 沉默的义体奴隶 3. 沙静 —— 沉默的义体奴隶
性格: 简练、服从、阴冷。 性格: 简练、服从、阴冷。
性别:女
替换词: (基本无口头禅,建议用沉默或功能性词汇代替)。 替换词: (基本无口头禅,建议用沉默或功能性词汇代替)。
语感: 说话不超过十个字,像说明书一样冰冷。 语感: 说话不超过十个字,像说明书一样冰冷。
示例: 示例:

View File

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

View File

@@ -0,0 +1,87 @@
"""
将当前目录下的所有md文件合并成一个pdf文件
"""
import os
import markdown
from weasyprint import HTML, CSS
# 获取当前目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 获取所有md文件并按文件名排序
md_files = sorted([f for f in os.listdir(current_dir) if f.endswith('.md')])
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.