Proxyos Weekly 046
Laurence-042
- 4 minutes read - 658 wordsTL;DR 概览
通过头脑风暴应该算是找到了第一章的解,并进行了初步的设计
前一期提到的系统变更已完成,但未测试,准备等这一批待办都完成后统一测试
本期目标
- 想清楚问题清单里的问题
- 搞定 045 期提及的系统变更
- 把 demo 从 alpha 打磨到 beta
- 把 ProxyOS 打成 Proxy OS 造成了预料之外的换行
- 序章
- 玩家一开始得到的信息太少,以至于缺乏目标和对世界观的了解。工作手册又因为其形式难以让玩家代入,导致玩家不清楚自己在做什么,即使发现用户死亡也困惑大于惊讶
- 考虑让玩家短暂扮演那格式化前的上一任节点(和 ghostine、何澈的短暂交流,随后被格式化),而非一开始就让玩家两眼一抹黑当格式化后的节点
- 基准测试报告需要更新
- 【待确认方案】到第一章过渡比较生硬(一个待确认对话框,先前被认为有助于渲染突然、无措的情绪,但当前氛围感不足以支持),考虑增加演出
- 初始化任务
- 工作手册太繁琐,把 界面组件 和 核心工作流程 两段合并,核心工作流程每一步都象当前一样指向对应区域。演示图用符合当前情况的,并省略具体名称。其余提及 POCKET、ARCHIVE、SPIDER 的任务资源也需要对应修改
- 摄像头任务
- 我得在数据段的部分提下图片也可以点,并在任务描述里也写下,避免用户在第一章末尾看到图片不知道怎么操作
- 玩家一开始得到的信息太少,以至于缺乏目标和对世界观的了解。工作手册又因为其形式难以让玩家代入,导致玩家不清楚自己在做什么,即使发现用户死亡也困惑大于惊讶
- 第一章
- 系统恢复操作指南 的认知负担太重,直接去掉整个 系统恢复操作指南,然后使用一个独立的、默认启动的程序来带着玩家敲一遍,完事之后再让玩家用 diagnose 和 manual fix。
- xterm 的 col 似乎计算不太对劲,有时候一行末尾的字只显示了一半,需要看下 xterm 实现,必要的话进行修复
- xterm 的 cursor_pos 在 cursor 不在视野内时返回末行 pos 是个 bug,而且在外面基本没法绕,只能修 xterm
- 【待确认方案】要在玩家以自己的意愿想做某件事但因为经验不足不知道如何行动时,提供教学来让玩家解决困难,并让玩家在跟随教学的过程中获得经验,同时避免灌输的感觉
- 我应该还需要在恢复演出脚本里额外加个变量存在性检查,在玩家输错的情况下帮助快速定位问题
- 需要添加 exception 转译,把异常翻译成人话,避免 indent 和 not defined 之类的搞晕玩家(而且说实话它们确实对初学者不友好)
- CD
- 流程图需要给每个节点写个中文名,并在导出时设置 i18n 使其他部分为中文
- “if 后面需要有冒号”容易让玩家写出“if:a>1”
- 有些引导需要加强
- 用户没赋值,而是直接把“ask_new_plan”当表达式了
- 需要提及“ask_new_plan”等变量已被赋值为默认值 False,所以只需要设置 True 的,不用自己写设置 False 的
- 用户写出了如下内容,其疑惑为“那我这个 ask new plan 怎么会也是 True?明明结果是大于零的”,也许我应该描述下”等效“相关的内容
make_schedule=True;ask_new_plan=True if tomorrow_todo_count>0: make_schedule else: asknew_plan
- DS
- 玩家没能理解 todo_list[1] 为什么能获取到 todo_2,需要使用 main_todo 之类的不容易产生误解的变量名
- 玩家没能理解实际使用时执行的语句,需要提供完整代码段,而不是把两句代码分散在文字中
- 玩家认为使用原始数据而非将其整合也没啥原始的,需要补充相关描述
- LP
- FN
- 重新设计
- 第二章
- 将编程手册提前到第二章开始,而不是第一个任务完成后
- beta 打磨完成后
- 开个 itch
- 琢磨下宣传
进展速记
本期假设 / 预期
预期:
我应该想清楚第一章应该是什么样的,这是核心
然后我需要大致给出一个第一章怎么改的方案
结果:
搞定了
本期确定性变化
新增:
变更:
修复:
删除:
主要进展内容/本期关键判断点
我做出了哪些「如果错了也要付代价」的判断?
上一期留下的问题清单:第一章应该是什么样的
要在玩家以自己的意愿想做某件事但因为经验不足不知道如何行动时,提供教学来让玩家解决困难,并让玩家在跟随教学的过程中获得经验,同时避免灌输的感觉
教学本身就应该是玩法,而不是需要剧情来“中和”的内容。
这种时候就该头脑风暴了
头脑风暴过程
- 玩家在第一章有什么意愿?
- 不想理解背景
- 不想读长文本
- 会尝试操作
- 玩家默认是在“尝试做事”,而不是“理解系统”
- 教学必须嵌在“玩家已经想做的事里”
- 不能要求“先理解再操作”
- 不能让玩家面对“开放解空间”
- 玩家在第一章预期有什么经验?
- 在序章里浏览过网页、拖动过数据段、完成过任务、推进过时间,可以说系统基础交互基本没问题
- 有过devtool手把手的使用经验,但玩家应该不理解其原理
- 我应该在第二章把原理作为某个任务的奖励(比如解锁的帖子)提供
- 玩家此时甚至不一定理解什么是编程”
- 玩家知道流程图吗?
- 大学的时候编程课先教了流程图,然后基于流程图教编程
- 似乎不一定啊……
- 流程图是弊大于利还是利大于弊?其更接近帮助玩家理解代码还是凭空加了认知负担?
- 对于玩家来说,流程图可能更接近一套新语言。我在大学前有过相关了解所以默认它能帮助理解代码了,但前提是“我已经理解流程图”,而我不能保证玩家也是如此
- 流程图系统我之后准备怎么用?
- 在玩家理解语法后,作为一个直观的新视角提供?
- 顺序反过来会不会出问题?
- 应该不会,不将其作为核心内容强制玩家学习即可
- 它还有必要吗?
- 说实话去掉挺可惜的,但第一章最好不要出现,也许后续几章可以作为一个章节的挑战部分使用
- 顺序反过来会不会出问题?
- 在玩家理解语法后,作为一个直观的新视角提供?
- 流程图是弊大于利还是利大于弊?其更接近帮助玩家理解代码还是凭空加了认知负担?
- 似乎不一定啊……
- 大学的时候编程课先教了流程图,然后基于流程图教编程
- 玩家在第一章有可能遇到什么困难?
- 玩家没有任何编程经验
- 玩家可能会出现误解
- 玩家进度一旦卡住,不能指望玩家会主动往回滚寻找自己遗漏的点并成功理解
- 但第二章里应该可以指望,因为那时候玩家会有一个游戏提供的编程手册和每个任务局限在单个源代码文件里事无巨细的提示
- 玩家可能不习惯终端
- 终端没用什么视觉效果
- 需要恢复ProxyOS的图形系统
- 让玩家做什么事,才能让不一定理解什么是“编程”、没有显式的“我要学编程”想法、只是“我想做事”的玩家有意愿去做还会遇到困难?
- 或者说玩家应该被放在什么场景里,才能让玩家为了做事必须用编程解决困难?
- 现成案例?
- 在玩家被敌人围攻还打不过的时候让玩家学习跑酷、快速机动(蜘蛛侠)
- 手把手教玩家操作游戏(常规新手引导)
- 这个太挫,介绍UI还行,但作为玩法屎一样
- 在玩家只剩一条底裤的时候教玩家用枪打靶(辐射新维加斯)
- 这有什么联系吗?
- 似乎算不得不知道怎么行动的情况下教玩家行动,这是NPC要求玩家打靶的
- 在玩家从避难所出来的路上提供近战和远程武器,并提供辐射蟑螂(辐射4)
- 玩家只是想要出去,蟑螂堵在路上,所以必须战斗
- 也许更本质的问题是,必须用编程解决的困难有哪些?
- 非常规系统操作
- 执行大量重复操作
- 计算人脑无法直接计算的问题
- 计算机内/计算机间通信
- 做游戏 XD
- 其中哪些是第一章的玩家可以在教学下应对的?而且还要能承载基础语法教学?
- 非常规系统操作
- 可承载赋值
- 重置用户名,这个在叙事上逃不掉
- 可承载赋值
- 执行大量重复操作
- 可承载循环
- 多次执行
- 可承载分支
- 滤波
- 可承载循环
- 计算人脑无法直接计算的问题
- 不行,这个是算法设计部分的
- 但如果是大数据量导致无法计算,可以合到重复操作里
- 滤波
- 计算机内/计算机间通信
- 不行,这个本质上是协议问题
- 做游戏 XD
- XD
- 非常规系统操作
- 也许更本质的问题是,必须用编程解决的困难有哪些?
- 玩家只是想要出去,蟑螂堵在路上,所以必须战斗
- 现成案例?
- 或者说玩家应该被放在什么场景里,才能让玩家为了做事必须用编程解决困难?
- 怎么合理地提供解决这些困难的方式?
- 必须保证玩家以如下顺序依次经历,否则不可避免地会出现“讲循环前没讲数据结构,以至于要么循环看起来没用,要么决策曲线陡得一批”的问题
- 变量声明/赋值
- 变量参与计算
- 分支
- 数据结构
- 循环
- 函数
- 这些概念都需要仔细划分各个字概念,以免玩家同时面对多个子概念(本质上是多决策并发)认知负载超限
- 程序是什么
- 变量声明/赋值
- 变量是什么
- 为什么要声明
- 怎么声明
- 声明和赋值的关系是什么
- 变量和常量的关系是什么
- 能赋哪些类型的值
- 能多次赋值吗
- 变量能被变量赋值吗
- 什么叫表达式
- 变量参与计算
- 为什么这些简单计算可以做出复杂程序
- 符号和操作数的位置关系是什么
- 变量和常量都能参与计算吗
- 计算结果和常量的关系是什么
- 计算结果可以被用于哪些地方
- 有哪些类型符号可以用,它们是为什么存在的
- 各个类型里都有哪些符号,它们是用来做什么的
- 分支
- 分支是什么
- 为什么需要分支
- 分支怎么写
- 一定要用布尔运算吗?
- else、elif什么时候用?
- 数据结构
- 列表是什么
- 为什么需要列表,而不是用a_0,a_1,a_2的变量
- 列表怎么增删改查
- 字典又是什么
- 为什么需要字典,而不是用a_name,a_age,a_gender的变量
- 字典怎么增删改查
- 循环
- 为什么需要循环
- 循环的while和for分别怎么写
- 什么时候用while,什么时候用for
- range和len是什么(开始接触函数)
- 怎么跳过某些元素或者提前结束循环
- 函数
- 为什么叫函数
- 为什么需要函数
- 函数的参数和返回值是什么
- 函数怎么调用
- 函数怎么定义
- 可以用哪些理由让玩家遭遇这些困难?
- 还是修系统,当前改大纲代价太大,而且也没有比修系统更好的“强迫”玩家接触编程的借口了
- 但什么形式?玩家扮演什么角色?玩家要做什么程度的决策?
- 不能放玩家自己去写代码,当前没有补全、即时的错误提示,而且也很难预测玩家会怎么理解、怎么给出过于开放的解答(先前的问题)
- 提前解锁完整外部编程来获得补全和即时的错误提示?
- 让玩家在系统崩掉、两眼一抹黑、不知道要干啥的时候,给他们一个能做游戏的编辑器?想都别想
- 而且使用完整外部编程的情况下,更没法知道玩家会想啥、写出啥开放解了
- 提前解锁完整外部编程来获得补全和即时的错误提示?
- 不能是当前这样“和安全内核一起探索名为Python的语言,然后把它和基于流程图的ProxyOS编程范式对应起来”的形式,这固然提供了一种超脱于特定语言、以meta的形式审视语言的、便于理解编程语言设计思想和本质的、让玩家理解编程语言为什么会是现在这样的视角,但这对于初学者无疑严重加重了认知负担
- 所以应该倾向于手把手教
- 该让玩家因为重复写太麻烦而介绍循环吗?
- 也许应该在玩家一眼看过去“卧槽这我得写到猴年马月”然后直接看到循环解法,避免玩家产生“被耍了”的感觉
- 但这些子概念总不能挨个手把手教吧?就连变量赋值这一概念都有那么多子概念,挨个手把手教,就算我写演出脚本不累,玩家都累了
- 这会让玩家觉得自己在被灌输
- 矛盾?
- 该让玩家因为重复写太麻烦而介绍循环吗?
- “手把手教”和“不能让玩家觉得在被灌输”是矛盾的吗?
- 回看辐射4案例:玩家只是想要出去,蟑螂堵在路上,所以必须战斗
- 玩家只是想要X,但是有Y使其无法X,所以必须编程
- 只要X确实是玩家发自内心想要的,那么出现多少次都不会被视为灌输
- 玩家发自内心的想要的X是什么?
- 修系统……怎么绕回来了
- 其实严格来说,大纲只要求这里修改用户名,其余模块的修复只是当时我为了包装教程而“让”它们坏掉的
- 那么终端甚至可以只有修改用户名一个修复项就完成系统修复
- 如果快速脱离终端,会不会更好?
- 不行,“提前解锁完整外部编程来获得补全和即时的错误提示”已考虑过不合理
- 外部、完整 和 终端 是互补的吗?
- 不是?
- 使用内部编辑器?和终端一样大部分不能改,但是有一段可以改?
- 而且可以改的那段的答案需要足够直观,还能体现某个子概念
- 使用内部编辑器?和终端一样大部分不能改,但是有一段可以改?
- 不是?
- 外部、完整 和 终端 是互补的吗?
- 不行,“提前解锁完整外部编程来获得补全和即时的错误提示”已考虑过不合理
- 如果快速脱离终端,会不会更好?
- 那么终端甚至可以只有修改用户名一个修复项就完成系统修复
- 其实严格来说,大纲只要求这里修改用户名,其余模块的修复只是当时我为了包装教程而“让”它们坏掉的
- 修系统……怎么绕回来了
- 玩家发自内心的想要的X是什么?
- 只要编程解决Y足够清晰直观,就可以视为手把手教
- 怎么让编程解决Y清晰直观?
- 其实不在终端里,随随便便就是清晰直观的!
- 怎么让编程解决Y清晰直观?
- 只要X确实是玩家发自内心想要的,那么出现多少次都不会被视为灌输
- 玩家只是想要X,但是有Y使其无法X,所以必须编程
- 回看辐射4案例:玩家只是想要出去,蟑螂堵在路上,所以必须战斗
- 所以不该让玩家主要用终端写程序
- 这也解决了另一个问题:如何避免解决困难的方式过于自由以至于玩家做出预期外的行为?
- 内部编辑器,支持基础的着色(甚至能自己硬写着色?),绝大部分不能改
- 中间一段允许玩家修改,只留出固定行数避免玩家过于自由发散
- 同时提供原始报错和可能原因的解释
- 这个可以复用终端机制,只是我需要做一个python脚本加载器
- 读取对应有特殊标记的python脚本文件
- 标记可以是一个
#MARK#或类似的 - 标记所在的row就是玩家可以填内容的
- 标记开始的col就是玩家输入内容的缩进,省的玩家瞎整缩进
- 标记可以是一个
- 把标记替换成空行
- 使用stdout在xterm里输出脚本内容
- 不对,xterm的row、col问题很多,用RichTextLabel+MultiLineEdit叠加实现内部编辑器可能更好,这样我也能更好地控制颜色
- 将输入光标定到对应row、col,让玩家输入
- 读取对应有特殊标记的python脚本文件
- 错误和对应的解释放在内部编辑器下方的俩并列的可滚动panel
- 这也解决了另一个问题:如何避免解决困难的方式过于自由以至于玩家做出预期外的行为?
- 应该“引导”玩家,使其认为自己是某个角色,这个角色不一定要和剧情设定强绑定
- ProxyOS自删除崩溃,但没被彻底删除,开始频繁崩溃重启崩溃重启
- 安全内核被作为标准恢复辅助唤醒(安全内核不再因为“被实验型恢复流程突然实例化”,以至于“什么标准传感器都没有,就像一个人失去五感”而抱怨自己是棍型AI了。其定位也从“一起探索名为Python的语言,然后把它和基于流程图的ProxyOS编程范式对应起来的同事”变成了“安全底线十分灵活,只要不违反安全部的底层限制,甚至会教唆计算节点把自己注册成用户的活泼恢复助手”)
- 安全内核的简笔画显示在任务详情区
- 安全内核的安全底线十分灵活,系统可用第一。之前Ghostine为了研究BN,基于基于SPIDER开发了可以修改ProxyOS客户端的定制工具。安全内核找到了这个工具,并设法越权为玩家开放了其使用权限,玩家得以使用这个工具调整自己的ProxyOS客户端。但安全内核被限制自我迭代,所以代码全得玩家写
- 玩家自然而然会一边苍蝇搓手一边折腾了,玩家认为自己是“黑客”
- 这就是遇到困难的形式,玩家想折腾系统,但需要技能去折腾
- 玩家应该只需要决定在空行上写什么代码
- 不能放玩家自己去写代码,当前没有补全、即时的错误提示,而且也很难预测玩家会怎么理解、怎么给出过于开放的解答(先前的问题)
- 但什么形式?玩家扮演什么角色?玩家要做什么程度的决策?
- 但这样严格来说玩家只有在重设username时修了系统,其他的子概念的表现形式呢?
- 程序是什么——在最初的基线测试报告上做文章,
- 变量声明/赋值——重设usermane以恢复系统
- 变量是什么
- (安全内核显示在内部编辑器上方,固定图像)
- 恭喜,现在你是用户了!刚刚你把username这个变量改掉后,ProxyOS再来看username就会看到{player_name},也就会以为自己的用户是{player_name},ghostine就算再死一遍也不会导致系统删除了!
- 为什么要声明
- 让我看看……哇,坏得真~~厉害,怪不得你的时间不显示了,连声明都丢了。
- 你看下面的报错,就是说
current_time没声明,你的时间找不到时间数据的位置
- 怎么声明
- 能赋哪些类型的值
- 啊,你在这写个
current_time=0就行了,不用和username的值一样带双引号,这是数字,不是句子(或者说“字符串”) - 笑死,你的时间现在是纪元之初欸!
- 啊,你在这写个
- 声明和赋值的关系是什么
- 能多次赋值吗
- 欸我十分好奇,如果你写
current_time=-1会怎么样 - 没事啦,真搞坏了我教你修
- 笑死,这时间恐怕都够人类灭绝好几次了
- 好啦好啦,我认真
- 唔呣……我知道问题是什么了,你看这边虽然算出来了,但是没给
current_time赋值 - 噢,python这语言的赋值和声明没分那么清,不过有些语言就十分讲究这个了
- 你直接和声明时一样,
变量名=值,就能把值存进变量名啦,之后你要用这个值的话直接叫那个变量就行
- 欸我十分好奇,如果你写
- 变量和常量的关系是什么
- 变量能被变量赋值吗
- 你看下面就有一行把
current_time放右边的,那就是把它的值赋给其他变量了
- 你看下面就有一行把
- 变量是什么
- 变量参与计算
- 为什么这些简单计算可以做出复杂程序
- (安全内核显示在内部编辑器上方,从左到右移动)
- 欸……我感觉好像有点不对劲……怎么我好像一直在从左……到右……又从左……到右
- 妈耶,刚刚的修复让系统可以继续运行了,但是它好像一直在改我的位置,计算节点,救我!
- 符号和操作数的位置关系是什么
- 就是这里,就是这里,
new_profile_pos=profile_pos+1! - 但这里不让改,只能改下面一行……晕乎乎……把它恢复回来,再把它减 1!
- 呼……得救了……
- 但为什么会有这种让我一直往右跑的代码呢……
- 啊!你看上面,
def move_ad_banner(desire_pos_delta),原来我把滚动广告的地方占了,它就把我当广告滚!
- 就是这里,就是这里,
- 变量和常量都能参与计算吗
- 计算结果和常量的关系是什么
- 计算结果可以被用于哪些地方
- 而且它忽略了我给它的
desire_pos_delta! - 我想往右跑的时候会让
desire_pos_delta变成1,往左跑就是-1 - 帮我个忙吧计算节点,帮忙把它改成
new_profile_pos取profile_pos和desire_pos_delta的和吧- 我感觉好像又在往右飘,我忘记你还得-1啦!我正在努力保持原位,计算节点,帮帮忙,在最右边再-1一下!
- 而且它忽略了我给它的
- 有哪些类型符号可以用,它们是为什么存在的
- 各个类型里都有哪些符号,它们是用来做什么的
- 什么叫表达式
- 为什么这些简单计算可以做出复杂程序
- 分支
- 分支是什么
- 为什么需要分支
- 分支怎么写
- (´・_・`) 虽然折腾这么久,但好像只修好了时间显示呢……
- 为什么你的任务系统和信息段系统都不连接呢……
- 你看这里,
if system_state != "normal",如果不等于的话就不会连接了! - 但我不太确定现在
system_state是什么欸,你在上面写一行print(system_state)试试? - 这样应该能让程序执行到这里时把
system_state写到下面的stdout框框里 - |д゚) 是 “uninstalling"啊啊啊啊啊啊!
- 快删掉print,然后改成把
system_state赋值成"normal"的表达式!快!快!快!
- else、elif什么时候用?
- (´゚Д゚`) 不对啊,如果它之前是
"uninstalling",为什么这么长时间都没出事呢,看模块说明书,这块应该会有个保底的卸载逻辑啊 - (゚∀。) 啊,在这里。
if system_state == "normal"和elif system_state == "uninstalling"。 - 它会先检查
system_state == "normal"是不是True,是的话就进上面那一块,但我们当时system_state不是normal而是uninstalling,system_state == "normal"结果是False,所以没进上面,继续往下走到elif - 然后
system_state == "uninstalling"的值是True,满足elif要求, - 就会走到
elif下面,就像如果满足system_state != "normal"写的是 - (`д´) 什么叫
# 反正走到这的话用户已经死了,我也懒得写处理逻辑了啊喂!认真点啊ProxyOS调试工具的的开发组! - ( ˇωˇ) 但要是那位开发者真的认真了,咱们就凉了
- 不论如何,看起来你的任务列表好像不显示未连接了
- ……但为什么是空的
- (´゚Д゚`) 不对啊,如果它之前是
- 一定要用布尔运算吗?
- 数据结构——根据前面的思路编写下述内容,头脑风暴就不要写太多具体内容了
- 列表是什么
- 为什么需要列表,而不是用a_0,a_1,a_2的变量
- 列表怎么增删改查
- 字典又是什么
- 为什么需要字典,而不是用a_name,a_age,a_gender的变量
- 字典怎么增删改查
- 循环
- 为什么需要循环
- 循环的while和for分别怎么写
- 什么时候用while,什么时候用for
- range和len是什么(开始接触函数)
- 怎么跳过某些元素或者提前结束循环
- 函数
- 为什么叫函数
- 为什么需要函数
- 函数的参数和返回值是什么
- 函数怎么调用
- 函数怎么定义
- 这些代码需要是实际游戏代码吗?
- 不需要,每个编程语言都能设计一份教学
- 所以玩家第一章的流程实际是
- 系统多次自动崩溃重载
- 系统进入只有终端的恢复模式,并在终端的bootup message里提如何输入命令以及如何通过help命令查找其他可用的恢复辅助命令
- 玩家diagnose和systemctl start recovery-assistant后提示尚处于实验阶段的安全内核已被激活用于辅助修复
- 安全内核随内部编辑器一起出现在右侧
- 内部编辑器布局具体是什么样的?
- 和常规应用一样是窗口,但不可关闭、最大化、最小化。分左右两个面板
- 左侧边栏面板
- 上侧是安全内核的对话记录(需要持久化,作为修复工具应用存档的一部分),新的对话记录总是出现在最下面,并把旧的对话记录往上顶
- 下侧是一个方形面板,安全内核的形象显示在其中(蓝色扁球,有两个竖直的淡蓝色矩形充当眼睛),初始位置静止,但有动效(可以眨眼、扫视代码时看向右侧的编辑区、发言时看向上侧的对话记录、检查修复情况时看向左侧的主程序窗口)
- 右侧主面板
- 同样分左右
- 左侧主面板
- 上侧是显示代码和编辑区的区域
- 下侧方形面板显示对报错可能原因的解答
- 右侧边栏面板
- 上侧顶部是一些控制按钮,如运行到结束、调试执行到预设断点、单步执行,其余部分是变量值的显示(sys.settrace实现调试,ipc将python的trace_func结果发到godot)
- 下侧方形面板显示原始报错
- 左侧主面板
- 同样分左右
- 左侧边栏面板
- 安全内核在“深度思考”后表示应该能修,但是修了也会被再次炸掉,所以恐怕只能通过修改ProxyOS核心来避免其继续尝试自删除,并显示了username赋值的相关代码。但因为自我迭代限制,只有“用户”才有权限修改系统,其他“人”修改都会负法律责任。虽然计算节点没人权不会负法律责任,但只要用户还是“ghostine”,那安全内核就不能提供帮助,除非计算节点就是用户:“你懂我意思吧?”
- 玩家看到右侧代码里的username="[可编辑区开始]ghostine[可编辑区结束]",将其修改并点击
- 安全内核表示:啊,这里有个内核变更,虽然我完全不知道这个变更是什么,既然只有用户能合法修改内核,那我就替用户把修改推送进ProxyOS吧(你就当真的听)。(゚∀゚)恭喜,用户{player_name}!这样我就能在审计日志里写“用户{player_name}对内核做了修改,修复了username这个变量值被写成"ghostine"的bug,这会导致ProxyOS看username时会看到ghostine,一个已死公民,导致ProxyOS崩溃。修复后,ProxyOS再来看username就会看到正确的的用户名{player_name}而非已经死亡的ghostine,不会再次崩溃”了!
- 同时主界面里终端之外的部分重新显示,但是都显示未连接
- 然后进行如下循环,依次完成所有修复
- 安全内核看到问题,调出对应代码
- 安全内核最小限度解释概念((´・_・`) 奇怪,任务列表好像不更新了……看这里,这段代码只在 system_state 等于 normal 的时候才会跑,但 system_state 现在不是 normal,所以一直被跳过了`)
- 玩家进行修改/单步调试
- 安全内核回应结果
- 主界面的对应部分恢复正常
- 还是修系统,当前改大纲代价太大,而且也没有比修系统更好的“强迫”玩家接触编程的借口了
- 必须保证玩家以如下顺序依次经历,否则不可避免地会出现“讲循环前没讲数据结构,以至于要么循环看起来没用,要么决策曲线陡得一批”的问题
- 剧情应该以何种方式、以何种程度提供才不至于自嗨也不至于晦涩?
- 不要在玩家主游玩线路上详细解释,详细设定放在论坛帖子、散装文件里(比如论坛里有人提SPIDER的事,其可以被收集为信息段,通过通用任务交给控制节点进行详细解释)
- 当前只有安全内核和神秘客会不会让剧情单薄?
- 神秘客在修复通知系统后作为一条通知出现
- 玩家一直有明确的动力去解决问题,剧情就不会有单薄的感觉
- 在当前大纲下这里可以有哪些角色出场?
- 不需要调整大纲:安全内核、神秘客
- 不需要大改大纲:Laurence042、何澈
- 没必要额外角色,安全内核和出场一次的神秘客足够支持演出
结论
核心判断:
- 放弃终端写代码,改用内部编辑器。 内部编辑器绝大部分代码锁定,只留出固定空行供玩家填写,同时提供报错解释面板,避免开放解空间、避免缩进问题,也天然支持语法着色和变量监视
- 安全内核定位重设: 从"一起探索 Python 的同事"变成"底线灵活、系统可用第一的活泼恢复助手”。通过 Ghostine 留下的 SPIDER 定制工具,以"黑客折腾系统"包装教学场景,玩家驱动力源于"想折腾"而非"被要求学"
- “手把手教"与"不被灌输"不矛盾: 只要玩家的 X(折腾系统/当黑客)是真实驱动力,编程就是克服障碍 Y 的自然工具,不会产生被灌输感。关键在于保证 X 足够真实、Y 足够清晰直观
- 编程教学顺序固定: 变量声明/赋值 → 变量参与计算 → 分支 → 数据结构 → 循环 → 函数,每个大概念需拆解子概念,避免认知并发过载
- 流程图第一章不出现,留待玩家理解语法后作为可选新视角引入
- 第一章整体流程: 系统反复崩溃重启 → 恢复模式终端(玩家
diagnose+systemctl start recovery-assistant)→ 安全内核唤醒并与内部编辑器一起出现 → 玩家修改username完成注册成为合法用户 → 图形界面恢复但各模块显示未连接 → 循环:安全内核发现问题、调出代码、玩家填写空行、模块逐一恢复正常 - 剧情细节不堆主线,设定、背景放论坛帖子和散装文件,主线保持动力清晰
瓶颈与问题清单
哪些问题还没解,但也许我已经知道“它们不是什么”?
下期计划
- 把 demo 从 alpha 打磨到 beta
- 序章
- 玩家一开始得到的信息太少,以至于缺乏目标和对世界观的了解。工作手册又因为其形式难以让玩家代入,导致玩家不清楚自己在做什么,即使发现用户死亡也困惑大于惊讶
- 考虑让玩家短暂扮演那格式化前的上一任节点(和 ghostine、何澈的短暂交流,随后被格式化),而非一开始就让玩家两眼一抹黑当格式化后的节点
- 基准测试报告需要更新
- 【待确认方案】到第一章过渡比较生硬(一个待确认对话框,先前被认为有助于渲染突然、无措的情绪,但当前氛围感不足以支持),考虑增加演出
- 初始化任务
- 工作手册太繁琐,把 界面组件 和 核心工作流程 两段合并,核心工作流程每一步都象当前一样指向对应区域。演示图用符合当前情况的,并省略具体名称。其余提及 POCKET、ARCHIVE、SPIDER 的任务资源也需要对应修改
- 摄像头任务
- 我得在数据段的部分提下图片也可以点,并在任务描述里也写下,避免用户在第一章末尾看到图片不知道怎么操作
- 玩家一开始得到的信息太少,以至于缺乏目标和对世界观的了解。工作手册又因为其形式难以让玩家代入,导致玩家不清楚自己在做什么,即使发现用户死亡也困惑大于惊讶
- 第一章
- 系统恢复操作指南 的认知负担太重,直接去掉整个 系统恢复操作指南,然后使用一个独立的、默认启动的程序来带着玩家敲一遍,完事之后再让玩家用 diagnose 和 manual fix。
- xterm 的 col 似乎计算不太对劲,有时候一行末尾的字只显示了一半,需要看下 xterm 实现,必要的话进行修复
- xterm 的 cursor_pos 在 cursor 不在视野内时返回末行 pos 是个 bug,而且在外面基本没法绕,只能修 xterm
- 【待确认方案】要在玩家以自己的意愿想做某件事但因为经验不足不知道如何行动时,提供教学来让玩家解决困难,并让玩家在跟随教学的过程中获得经验,同时避免灌输的感觉
- 我应该还需要在恢复演出脚本里额外加个变量存在性检查,在玩家输错的情况下帮助快速定位问题
- 需要添加 exception 转译,把异常翻译成人话,避免 indent 和 not defined 之类的搞晕玩家(而且说实话它们确实对初学者不友好)
- CD
- 流程图需要给每个节点写个中文名,并在导出时设置 i18n 使其他部分为中文
- “if 后面需要有冒号”容易让玩家写出“if:a>1”
- 有些引导需要加强
- 用户没赋值,而是直接把“ask_new_plan”当表达式了
- 需要提及“ask_new_plan”等变量已被赋值为默认值 False,所以只需要设置 True 的,不用自己写设置 False 的
- 用户写出了如下内容,其疑惑为“那我这个 ask new plan 怎么会也是 True?明明结果是大于零的”,也许我应该描述下”等效“相关的内容
make_schedule=True;ask_new_plan=True if tomorrow_todo_count>0: make_schedule else: asknew_plan
- DS
- 玩家没能理解 todo_list[1] 为什么能获取到 todo_2,需要使用 main_todo 之类的不容易产生误解的变量名
- 玩家没能理解实际使用时执行的语句,需要提供完整代码段,而不是把两句代码分散在文字中
- 玩家认为使用原始数据而非将其整合也没啥原始的,需要补充相关描述
- LP
- FN
- 重新设计
- 第二章
- 将编程手册提前到第二章开始,而不是第一个任务完成后
- 序章
- beta 打磨完成后
- 开个 itch
- 琢磨下宣传
试玩版
暂缓,第一次上传需要做好准备,等进入 beta 阶段再说