微调,增加了诗体总结和套语结尾。
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. 沙静 —— 沉默的义体奴隶
|
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
|
- **悬念建立**:实验室里有一个休眠的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章:流沙河底的真相
|
||||||
|
|
||||||
**阶段一:铺垫引入**
|
**阶段一:铺垫引入**
|
||||||
- **环境设定**:流沙河底的秘密实验室
|
- **环境设定**:流沙河底的秘密实验室,红孩儿已离开,团队恢复四人状态
|
||||||
- **角色状态**:四人在实验室里探索,寻找更多线索
|
- **角色状态**:四人在实验室深入探索,老猪正在制造新机械臂,沙静已使用解药
|
||||||
- **悬念建立**:实验室里有一份关于"真经"的加密文件
|
- **悬念建立**:实验室里有一份关于"真经"的加密文件,同时发现实验室的创建者身份
|
||||||
|
|
||||||
**阶段二:冲突触发**
|
**阶段二:冲突触发**
|
||||||
- **触发事件**:唐藏成功解密文件,发现真经确实是格式化命令
|
- **触发事件**:唐藏成功解密文件,发现真经确实是格式化命令,同时揭示实验室创建者与天庭的关系
|
||||||
|
|
||||||
**阶段三:冲突升级**
|
**阶段三:冲突升级**
|
||||||
- **核心冲突**:唐藏陷入道德困境:是执行格式化,还是寻找其他方法?
|
- **核心冲突**:唐藏陷入道德困境:是否应该告诉团队真相,还是独自承担这个秘密?
|
||||||
- **特写焦点**:唐藏决定暂时不告诉团队真相
|
- **特写焦点**:唐藏发现实验室的监控系统仍在运行,天庭可能已经知道他们的位置
|
||||||
|
|
||||||
**阶段四:解决与余韵**
|
**阶段四:解决与余韵**
|
||||||
- **直接结果**:获得关于真经的真相
|
- **直接结果**:获得真经真相,老猪完成新机械臂制造,团队意识到危险逼近
|
||||||
- **长期影响**:唐藏陷入道德困境,开始反思自己的动机
|
- **长期影响**:唐藏选择暂时隐瞒真相,团队准备离开实验室,面临新的追捕威胁
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
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