微调,增加了诗体总结和套语结尾。
This commit is contained in:
@@ -1,9 +1,3 @@
|
||||
|
||||
|
||||
基于您提供的片段和设定,以下是为这部小说构思的初始创意大纲:
|
||||
|
||||
---
|
||||
|
||||
### **小说名称:《合金经书:西行代码》**
|
||||
|
||||
**类型:** 赛博朋克 / 硬科幻 / 动作冒险 / 团队公路片
|
||||
@@ -52,7 +46,7 @@
|
||||
* **身份:** 地下界的顶级赏金猎人,沉默寡言的独行侠。
|
||||
* **特征:** 全身覆盖光学迷彩,使用静力场发生器“降妖杖”,能隐身、制造无声杀戮领域。
|
||||
* **性格:** 极度社恐,面瘫,只认钱和契约。说话不超过十个字。
|
||||
* **过去:** 曾是某财团的首席清洁工(暗杀者),因为一次任务失败脖颈处被植入了项圈(或某种致命诅咒),需要定期服用昂贵的药物,这让他不得不接高风险任务。
|
||||
* **过去:** 曾是某财团的首席清洁工(暗杀者),因为一次任务失败脖颈处被植入了项圈(或某种致命诅咒),需要定期服用昂贵的药物,这让她不得不接高风险任务。
|
||||
|
||||
---
|
||||
|
||||
|
||||
237
02_Memory/story_monitor.py
Normal file
237
02_Memory/story_monitor.py
Normal 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()
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
3. 沙静 —— 沉默的义体奴隶
|
||||
性格: 简练、服从、阴冷。
|
||||
性别:女
|
||||
替换词: (基本无口头禅,建议用沉默或功能性词汇代替)。
|
||||
语感: 说话不超过十个字,像说明书一样冰冷。
|
||||
示例:
|
||||
|
||||
@@ -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
|
||||
|
||||
**阶段二:冲突触发**
|
||||
@@ -164,11 +164,11 @@
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:AI告诉唐藏,镇元子想要夺取他的生物密钥
|
||||
- **特写焦点**:唐藏陷入道德困境:是继续前进,还是回头?
|
||||
- **特写焦点**:唐藏陷入道德困境:是继续前进,还是回头?老猪成功升级机械臂性能
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:获得关于镇元子的情报
|
||||
- **长期影响**:唐藏决定继续前进,但开始反思自己的动机
|
||||
- **直接结果**:获得关于镇元子的情报,老猪机械臂升级为军用级性能
|
||||
- **长期影响**:唐藏决定继续前进,但开始反思自己的动机;老猪装备水平显著提升
|
||||
|
||||
---
|
||||
|
||||
@@ -197,143 +197,152 @@
|
||||
|
||||
---
|
||||
|
||||
### 第10章:镇元子的陷阱
|
||||
### 第10章:数据森林的陷阱
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:五庄观内部,无数个服务器机柜
|
||||
- **角色状态**:四人在城寨中探索,寻找镇元子的本体
|
||||
- **悬念建立**:老猪的药物快用完了
|
||||
- **环境设定**:五庄观数据屏障前,沙地环境,数据光柱构成的森林
|
||||
- **角色状态**:四人分析数据屏障,寻找突破方法,老猪机械臂在数据干扰下出现异常
|
||||
- **悬念建立**:镇元子给出的入口是陷阱的概率高达97.3%
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:老猪把唯一的药物分给沙静一半
|
||||
- **触发事件**:镇元子激活数据屏障攻击,释放出会分裂的数据体
|
||||
- **关键发现**:沙静被感染的装备具有对抗数据生命体的特殊能力
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:镇元子的数据流攻击,四人分散
|
||||
- **特写焦点**:沙静第一次感受到"被信任"
|
||||
- **核心冲突**:与数据体和地下数据触手的激烈战斗
|
||||
- **特写焦点**:四人配合突破数据屏障薄弱点,石行者金箍棒破盾;老猪机械臂在数据干扰下功能下降
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:四人重新汇合,但老猪的药物用完了
|
||||
- **长期影响**:沙静开始信任团队
|
||||
- **直接结果**:成功进入数据森林,但石行者受伤,老猪机械臂需要重新校准
|
||||
- **长期影响**:团队配合更加默契,进入五庄观核心区域;老猪意识到数据环境对机械装备的影响
|
||||
|
||||
---
|
||||
|
||||
### 第11章:石行者的对决
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:五庄观的核心区域,镇元子的本体
|
||||
- **角色状态**:石行者与镇元子进行黑客对决
|
||||
- **悬念建立**:镇元子告诉石行者,他是自己的"儿子"
|
||||
- **环境设定**:五庄观核心区域,纯白色数据空间,由流动代码构成的墙壁
|
||||
- **角色状态**:石行者独自面对镇元子本体(发光数据链球体)
|
||||
- **悬念建立**:镇元子自称是石行者的创造者
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:镇元子展示石行者的原始代码
|
||||
- **触发事件**:镇元子展示石行者的制造记录和基因序列
|
||||
- **关键发现**:石行者发现自己的所有特征都是被设计的
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:石行者的身份危机
|
||||
- **特写焦点**:石行者在代码中看到了自己的"出生记录"
|
||||
- **核心冲突**:石行者与自己的代码镜像战斗,发现镜像缺乏随机性
|
||||
- **特写焦点**:石行者用超出逻辑的动作击败镜像,突破镇元子的计算
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:石行者击败镇元子,但内心受到冲击
|
||||
- **长期影响**:石行者开始质疑自己的身份
|
||||
- **直接结果**:石行者摧毁镇元子核心,但看到被删除的"母亲"记忆
|
||||
- **长期影响**:石行者陷入身份危机,开始质疑自己的本质
|
||||
|
||||
---
|
||||
|
||||
### 第12章:逃离五庄观
|
||||
### 第12章:身份的回响
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:五庄观的出口,数据流瀑布
|
||||
- **角色状态**:四人准备逃离城寨
|
||||
- **悬念建立**:镇元子虽然被击败,但他的"儿子"红孩儿还在
|
||||
- **环境设定**:五庄观核心区域崩溃中,数据流倾泻,代码碎片消散
|
||||
- **角色状态**:石行者陷入身份危机,团队前来救援
|
||||
- **悬念建立**:石行者向团队透露自己的身份真相
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:红孩儿出现,他是一个被病毒感染的改造人
|
||||
- **触发事件**:石行者质问团队,自己是否只是被制造的工具
|
||||
- **关键对话**:团队成员用实际行为证明石行者的自主性
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:与红孩儿的战斗
|
||||
- **特写焦点**:老猪发现红孩儿是镇元子的"儿子",心生怜悯
|
||||
- **核心冲突**:石行者内心的自我认同危机与团队信任考验
|
||||
- **特写焦点**:石行者发现纳米机器人自动修复功能,与"母亲"相关
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:击败红孩儿,但老猪没有杀他
|
||||
- **长期影响**:老猪开始反思自己的过去
|
||||
- **直接结果**:石行者选择保护团队,明确自己的身份定位
|
||||
- **长期影响**:团队凝聚力增强,石行者完成自我认同的转变
|
||||
|
||||
---
|
||||
|
||||
### 第13章:火焰山的边缘
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:火焰山的边缘,核辐射污染区
|
||||
- **角色状态**:四人到达火焰山,准备穿越
|
||||
- **悬念建立**:火焰山里有一个被病毒感染的改造人(代号"红孩儿")
|
||||
- **环境设定**:火焰山边缘,赤红色岩石,核辐射污染,硫磺臭氧气味
|
||||
- **角色状态**:四人到达火焰山,辐射强度超过安全阈值,老猪机械臂散热系统超载
|
||||
- **悬念建立**:检测到移动热源信号,未知威胁正在靠近
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:红孩儿出现,他控制着一群火焰机器人
|
||||
- **触发事件**:火焰机器人从地下钻出攻击,随后红孩儿出现
|
||||
- **关键发现**:红孩儿是高度病毒感染的改造人,能量波动异常
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:与红孩儿的战斗
|
||||
- **特写焦点**:老猪在战斗中救了红孩儿,完成了对小队的救赎
|
||||
- **核心冲突**:与火焰机器人和红孩儿的激烈战斗
|
||||
- **特写焦点**:老猪发现红孩儿保护左胸的细微动作,意识到病毒控制器下的记忆;机械臂液压系统在高温下受损
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:红孩儿加入团队,成为向导
|
||||
- **长期影响**:老猪完成了对小队的救赎,找回了自信
|
||||
- **直接结果**:老猪用电磁脉冲器抑制病毒,红孩儿恢复理智加入团队,老猪机械臂液压系统需要紧急维修
|
||||
- **长期影响**:老猪展现情感洞察力,团队增加新成员,获得火焰山向导;装备在极端环境下承受极限考验
|
||||
|
||||
---
|
||||
|
||||
### 第14章:穿越火焰山
|
||||
### 第14章:熔岩通道的考验
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:火焰山内部,到处都是火焰和岩浆
|
||||
- **角色状态**:四人在红孩儿的带领下穿越火焰山
|
||||
- **悬念建立**:火焰山的深处有一个秘密实验室
|
||||
- **环境设定**:火焰山内部狭窄熔岩通道,高温扭曲空气,岩浆滴落
|
||||
- **角色状态**:五人团队(新增红孩儿)穿越危险通道,装备承受极限,老猪机械臂液压系统已损坏
|
||||
- **悬念建立**:检测到强烈能量干扰,前方是火焰山心脏地带
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:发现实验室,里面有关于病毒的真相
|
||||
- **触发事件**:遭遇熔岩守卫——火焰山自动防御系统
|
||||
- **关键发现**:熔岩守卫对热武器免疫,再生能力极强
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:唐藏发现病毒的原始代码
|
||||
- **特写焦点**:病毒确实是天庭故意释放的,目的是清理"低价值意识"
|
||||
- **核心冲突**:与熔岩守卫的生死战斗,老猪机械臂在高温下彻底熔化报废
|
||||
- **特写焦点**:团队配合攻击核心,老猪为保护石行者用机械臂抵挡岩浆导致彻底损毁
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:获得病毒的真相
|
||||
- **长期影响**:唐藏愤怒达到顶点,决定一定要揭露天庭的罪行
|
||||
- **直接结果**:击败熔岩守卫,找到安全洞穴,老猪机械臂完全报废需要重新安装
|
||||
- **长期影响**:团队凝聚力达到新高度,老猪展现牺牲精神,红孩儿融入团队;装备损坏为后续维修埋下伏笔
|
||||
|
||||
---
|
||||
|
||||
### 第15章:流沙河的秘密
|
||||
### 第15章:流沙河底的抉择
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:流沙河,一个巨大的地下河系统
|
||||
- **角色状态**:四人到达流沙河,准备渡河
|
||||
- **悬念建立**:流沙河底有一个秘密实验室
|
||||
- **环境设定**:流沙河边缘,黄昏时分,沙漠热浪与河面湿气交织,形成诡异的雾气。流沙河表面看似平静,实则暗流汹涌,偶尔有气泡冒出,发出咕嘟声
|
||||
- **角色状态**:五人团队疲惫不堪,老猪的机械臂完全报废,右臂无力垂落;沙静的项圈发出微弱红光,显示解药即将失效;红孩儿因过度使用火焰能力而面色苍白
|
||||
- **悬念建立**:红孩儿指向流沙河中心"实验室就在河底,但入口被流沙覆盖,需要特殊方法才能进入"
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:沙静的项圈开始失效,他必须尽快找到解药
|
||||
- **触发事件**:沙静的项圈突然发出刺耳警报,红光闪烁频率加快,显示解药将在2小时内失效。同时,老猪的机械臂接口处开始漏电,发出滋滋声
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:沙静面临生死抉择:是继续跟随团队,还是独自寻找解药
|
||||
- **特写焦点**:沙静选择继续跟随团队,而不是独自寻找解药
|
||||
- **核心冲突**:团队面临三重危机:沙静的生死时限、老猪的战斗力丧失、以及进入实验室的技术难题
|
||||
- **特写焦点**:
|
||||
- 红孩儿集中最后的力量,双手燃起蓝色火焰,在流沙河面烧出一个临时通道
|
||||
- 石行者用金箍棒撑开通道入口,金属棒身因高温而发红变形
|
||||
- 沙静在通道关闭前犹豫片刻,最终选择跟随团队潜入河底
|
||||
- 老猪用仅存的左手抓住通道边缘,机械臂接口处电火花四溅
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:在流沙河底发现实验室,里面有解药
|
||||
- **长期影响**:沙静开始信任团队
|
||||
- **直接结果**:团队成功进入河底实验室,找到解药制造设备和机械臂制造蓝图。红孩儿因能量耗尽,决定返回火焰山守护家园
|
||||
- **长期影响**:沙静对团队的信任度大幅提升;老猪获得制造新机械臂的技术;团队意识到天庭的监控系统可能已经发现他们的位置
|
||||
|
||||
---
|
||||
|
||||
### 第16章:流沙河底的真相
|
||||
|
||||
**阶段一:铺垫引入**
|
||||
- **环境设定**:流沙河底的秘密实验室
|
||||
- **角色状态**:四人在实验室里探索,寻找更多线索
|
||||
- **悬念建立**:实验室里有一份关于"真经"的加密文件
|
||||
- **环境设定**:流沙河底的秘密实验室,红孩儿已离开,团队恢复四人状态
|
||||
- **角色状态**:四人在实验室深入探索,老猪正在制造新机械臂,沙静已使用解药
|
||||
- **悬念建立**:实验室里有一份关于"真经"的加密文件,同时发现实验室的创建者身份
|
||||
|
||||
**阶段二:冲突触发**
|
||||
- **触发事件**:唐藏成功解密文件,发现真经确实是格式化命令
|
||||
- **触发事件**:唐藏成功解密文件,发现真经确实是格式化命令,同时揭示实验室创建者与天庭的关系
|
||||
|
||||
**阶段三:冲突升级**
|
||||
- **核心冲突**:唐藏陷入道德困境:是执行格式化,还是寻找其他方法?
|
||||
- **特写焦点**:唐藏决定暂时不告诉团队真相
|
||||
- **核心冲突**:唐藏陷入道德困境:是否应该告诉团队真相,还是独自承担这个秘密?
|
||||
- **特写焦点**:唐藏发现实验室的监控系统仍在运行,天庭可能已经知道他们的位置
|
||||
|
||||
**阶段四:解决与余韵**
|
||||
- **直接结果**:获得关于真经的真相
|
||||
- **长期影响**:唐藏陷入道德困境,开始反思自己的动机
|
||||
- **直接结果**:获得真经真相,老猪完成新机械臂制造,团队意识到危险逼近
|
||||
- **长期影响**:唐藏选择暂时隐瞒真相,团队准备离开实验室,面临新的追捕威胁
|
||||
|
||||
---
|
||||
|
||||
|
||||
87
03_Story/merge_md_to_pdf.py
Normal file
87
03_Story/merge_md_to_pdf.py
Normal 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}")
|
||||
BIN
03_Story/西行代码(第一稿).pdf
Normal file
BIN
03_Story/西行代码(第一稿).pdf
Normal file
Binary file not shown.
BIN
03_Story/(新的DeepSeek)小说-西行代码.pdf
Normal file
BIN
03_Story/(新的DeepSeek)小说-西行代码.pdf
Normal file
Binary file not shown.
BIN
03_Story/(老的DeepSeek)小说-西行代码.pdf
Normal file
BIN
03_Story/(老的DeepSeek)小说-西行代码.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user