OIer 重开模拟器设计思路

· · 个人记录

一点奇怪的想法,不一定会实现。

有任何想法或者建议可以在评论区提。

OIer 重开模拟器

想做成一款很简单的休闲养成类语言文字游戏,比如类似小黑屋这种,只需要一些简单的点击以及过剧情即可。

另外还是需要一些简单的操作,比如做成有若干个回合,每个回合只有有限的行动力点数,然后由玩家决定应该如何分配这些点数。

同时玩家也有若干属性,暂时想到的比如 RP(玄学东西),社交,人气(这个和社交是有一定区别的,因为如果你拿到 CF rank1 了不社交你人气也很高),技术,以及 OI 水平(这个显然是多维度的,要更加复杂可以向内添加属性),心理素质,身体素质,还有(隐藏的)文化课水平。这些属性对结局有影响。

几乎算是固定属性:天赋,家境,以及学校。这个可以作为 Buff 形式或者直接叠加其它属性。

OI 水平提升大抵是比较重要的一个机制,直接抄袭 OI wiki 尝试进行如下分类:

算法基础:枚举;模拟;递归分治;贪心;排序;前缀和差分;二分;倍增;构造。

搜索:DFS;BFS;双向搜索;启发式搜索;A;迭代加深搜索;IDA;回溯法;Dancing Links;Alpha-Beta 剪枝;优化。

动态规划:动态规划基础;记忆化搜索;背包 DP;区间 DP;DAG 上的 DP;树形 DP;状压 DP;数位 DP;插头 DP;计数 DP;动态 DP;概率 DP;DP 优化;其它 DP 方法。

字符串:字符串基础;字符串哈希;Trie;前缀函数与 KMP;Boyer-Moore 算法;Z 函数(扩展 KMP);AC 自动机;后缀数组(SA);后缀自动机(SAM);后缀平衡树;广义后缀自动机;后缀树;Manacher;回文树;序列自动机;最小表示法;Lyndon 分解;Main-Lorentz 算法。

数学:数学基础;数论;多项式与生成函数;组合数学;线性代数;线性规划;群论;概率论;数值算法;傅里叶-莫茨金消元法;序理论;杨氏矩阵;Schreier-Sims 算法;Berlekamp-Massey 算法。

数据结构:栈;队列;链表;哈希表;并查集;堆;块状数据结构;单调栈;单调队列;ST 表;树状数组;线段树;李超线段树;区间最值与历史最值操作;划分树;二叉搜索树及平衡树;跳表;可持久化数据结构;树套树;K-D Tree;动态树;析合树;PQ 树;手指树;霍夫曼树。

图论:图的存储;DFS;BFS;树上问题;矩阵树定理;有向无环图;拓扑排序;最小生成树;斯坦纳树;最小树形图;最小直径生成树;最短路;差分约束;k 短路;同余最短路;连通性相关;环计数问题;2-SAT;欧拉图;哈密顿图;二分图;最小环;平面图;图着色;网络流;Stoer-Wagner 算法;图匹配;Prüfer 序列;LGV 引理;弦图;最大团搜索算法;支配树;图上随机游走。

计算几何:二维计算几何基础;三维计算几何基础;距离;Pick 定理;三角剖分;凸包;扫描线;旋转卡壳;半平面交;平面最近点对;随机增量法;反演变换。

杂项:离散化;双指针;离线算法;分数规划;随机化;悬线法;珂朵莉树。

我超,好多,感觉要挑选好烦啊()

除了上述自己学习知识以外还有可以自己做题,出去集训,或者做模拟赛等。

另外还有不同的 OJ 平台,如洛谷,Codeforces,Atcoder 等,解锁这些平台可以打比赛涨 rating,划水涨人气,或者做题提升水平,同时也有几率触发一些特殊事件。

另外文化课也可以作为机制?不太懂。

同时赛季也是随着回合数更新的,加上各种赛事 CSP,NOIP,THU/PKUWC,NOIWC,省选,THU/PKUSC,THUPC,NOISC/NOI,CTT,CTS,IOI。然后显然这些赛事对于结局很重要。

最后要是进 T/P 了,进不同学校也可能影响结局。

二周目可以通过完成的成就点数加天赋点数。

可能的结局:

  1. (传说结局)IOI 金牌爷+大学继续打 XCPC World Final 金牌爷,成为所有人的神话。
  2. (隐藏结局)成为某 OJ 站长,天天恰钱。
  3. (隐藏结局)成为 CCF 学生代表会员,国家集训队教练。
  4. (隐藏结局)自己开培训机构,恰钱。(有点像 2)
  5. 进了集训队,成为一名卓越的 T/P CS 本科生。
  6. (隐藏传说结局)因为某场重要比赛搞小动作被发现,被迫成为高考状元薄纱所有人。
  7. 没进集训队,文化课厉害/拿了约成为一名优秀的 T/P CS 本科生。
  8. 没进集训队,文化课一般成为一名优秀的 985/211 CS 本科生。
  9. 没进集训队,文化课很差,没有好大学读了,最后进大厂搬砖。
  10. (隐藏传说结局)NOI 爆了,被迫进入 MO 集训队。
  11. (隐藏悲惨结局)由于过于违背父母意愿,被送去了戒网瘾所。
  12. (隐藏逆天结局)虽然你进了集训队,但是你进队后就变得自大无比,天天沉迷打游戏,同时由于文化课基础不好,最后惨被 TP 退学。
  13. 你最后回到了母校当教练,这就叫做传承。
  14. (隐藏结局)成为了 rank51。
  15. (最悲惨结局)你因为竞赛的失利,加上身体心理素质都过于低下,最后选择了在某场比赛前结束了自己的生命。
  16. (???)你成为了知名出题人,由于你出的题目导致一些人失利严重,最后被选手捅死。

特殊事件:

  1. CTS 莫名其妙翻到 rk4,答辩爆了。
  2. (玩羟基玩的)你的 whk 不错,noi 也有 ag,但是你报了 nju 的羟基,于是就爆了。
  3. 省选前你的教练叫你出去让你做了两道题,结果省选出现了原题,你受不了自己良心谴责选择放弃这个赛季。
  4. 省选前你通过一些方法联系到了出题人,并且赛前搞到了代码,不过即便如此你还是没能进省队。
  5. 你在初赛前开了篇写初赛题解的博客,引起了恐慌禁赛三年。
  6. 你在代码中使用了暴戾语言惨遭禁赛一年。
  7. 搞 OI 顺便找了了 GF(???)(鉴定为学生成函数学的)。
  8. 两种情况:和 GF 一起进了集训队,成为了人赢;GF 进了集训队你没进,GF 把你甩了。
  9. (最好的结局捏)变成了人人都爱的小南梁捏。
  10. 成为了 P 话哥,天天搁群里嘲讽所有人。
  11. 打了俩号进前十,被 Mike ban 了。
  12. 养成了神秘作息。
  13. (传说事件)因为机缘巧合没学 OI,走上 whk 之路成为人赢。
  14. 由于天天浏览群里各种 P 话,然后竞赛文化课各方面失利,最后患上了抑郁症。(大概是强制休息4个赛季?)
  15. 被机惨发神贴,经典永流传。
  16. 试图盗取各大 OJ 管理员账号兴风作浪被爆。
  17. (太逆天了)用机房电脑挖矿把学校烧了。
  18. 搞三十个号盗各种出题组的题。
  19. 你本来进了省队线,但是由于你们学校教育集团的一个小朋友初赛作弊被抓扣了一个名额,没能去成 NOI。
  20. 你本来进了省队线,但是你们学校太强了你没能进校线,最后被卡 1/3 没能去成全国赛。
  21. CCF 突然更新了政策,结果你们省省队数量大减,进队难度激增。

更好的想法是可以有更多的拓展性,类似创意工坊那样可以由玩家自己定制一些模组之类的,不过这个暂时不管()

属性应该要有很多。

属性 作用
行动力 每回合最基本的点数,你需要这个来进行各种活动
心理状态 影响比赛发挥,影响行动力点数,同时过低可能触发隐藏结局
身体状态 影响比赛发挥,影响行动力点数,同时过低可能触发隐藏结局
RP 可以提升比赛表现
社交 可以涨人气,解锁一些特殊操作,同时影响结局
人气 体现了你在 OI 圈内的呼声/支持度,如果你触发一些特殊事件(如作弊)或许会乘 -1,同时人气过低可能触发隐藏事件或结局
技术 一些特殊事件可能需要一定技术支持,另外也会影响结局
心理素质 决定了心态的恢复以及遇到突发事件对心态的影响系数
文化课水平 决定了你回归文化课结局
家境 决定了你父母是否支持你外出集训以及买 C
父母/老师支持度 父母以及你的老师是否支持你搞 OI?
学校 强校弱校,决定各个点数的升降以及很多事件
暗黑 奇怪的属性,高了可以触发隐藏事件或者结局
出题灵感 办比赛需要
博客数量 就是博客数量啊
比赛经验 影响正赛水平
CF Rating 就是 rating 啊
CF 小号 Rating 就是 rating 啊
AT Rating 就是 rating 啊

姑且放六个维度的 OI 水平以及两个维度的特殊水平,然后这些大抵会决定比赛的表现。

OI 水平 作用
动态规划 比赛
字符串 比赛
数学 比赛
数据结构 比赛
图论 比赛
计算几何 比赛
代码能力 这个可以影响每道题目的完成时间
思维能力 这个可以影响每道题目的完成时间

比赛系统应该是比较核心的一个系统,直接影响比赛结果。

每个题的每个部分分可以抽象为一个六维向量,然后只有属性完全偏序才可能获得该部分分,同时拥有一定的完成时间。

开始比赛前六个维度的 OI 水平可能会根据 RP、心态等进行一个扰动。

方便起见,将每个题的完成过程抽象为两个部分,读题思考阶段与做题阶段,每个题/部分分首先需要经过读题思考才有可能得出思考结果(即该部分分的六维向量加上一个随机高斯扰动),得出思考结果过后才能选择是否完成代码,这些全部都是需要时间的,每场比赛都有一个总时间限制。

具体而言每场比赛设置为若干题目,每道题目的每个部分分都有属性,属性即为那六个维度加减一个最大偏移量,同时对于每个题目,可以选择读题/思考,或者完成某个部分分,或者检查、对拍,同时对于每道题目有一个期望得分,对于 OI 赛制,期望得分不一定就是最终得分,需要通过检查或者对拍来确保期望得分。

比赛结束后会有分数、排名以及奖项,这个大概用各个水平的人进行比赛模拟得出吧,感觉很复杂的样子()

可以一个月一个回合,一个赛季十二个回合,然后根据开始的年级决定回合数,同时年级低会导致行动力低以及学习能力低。

有关行动的设计

每个回合有不同的状态(时间+地点+课程安排),对应于可以执行不同的操作。

时间:周目(隐藏)+年级+月份。(暂定一周目只能从高一开始搞 OI,二周目及以后可以选择初一到初三开始)

地点;在学校,卧病在家,外出集训,在打正式比赛。

课程安排:文化课,半停课,停课。(这个东西会决定行动力数量)

网络上

  1. 洛谷 - 灌水
  2. 洛谷 - 做题 - 七个方向/任意
  3. 洛谷 - 打洛谷比赛
  4. 洛谷 - 办比赛
  5. 洛谷 - 审核干事(管理员限定)
  6. 洛谷 - 暴政(大管理限定)
  7. CF - 灌水(会被骂)
  8. CF - 打比赛
  9. CF - 做题 - 七个方向/任意
  10. CF - 办比赛
  11. AT - 打比赛
  12. 群聊 - Hello Luogu - 吹水
  13. 群聊 - LA 群 - 吹水
  14. 群聊 - LA 群 - 问学术问题
  15. 群聊 - UOJ 群 - 问学术问题
  16. 群聊 - 鲜花群 - 灌水
  17. 写博客 - 鲜花(?)
  18. 写博客 - 学习/解题笔记
  19. 其它 - 学点奇怪的技术

线下学校机房

  1. 搞颓 - 刷视频
  2. 搞颓 - 打游戏
  3. 复习文化课
  4. 打模拟赛
  5. 听讲课 - 七个方向/杂题
  6. 和同组同学团建 - 搞体育锻炼
  7. 和同组同学团建 - 一起出去玩
  8. 给小朋友讲课

外出集训 - 七个方向/杂题

  1. 上课
  2. 打模拟赛
  3. 和网友面基

特殊赛事 NOIWC 与 NOISC

  1. 听课
  2. 和网友面基
  3. 才艺表演(???)

OI 学习分为若干个节点,节点之间具有一定的依赖关系。

别学了,直接抽象为点数得了,还要设计课程,未免有点过于复杂了。

每个赛季的回合安排

回合编号 对应时间 正式比赛
1 7 月 NOISC/NOI,ISIJ
2 8 月
3 9 月
4 10 月 CSP-J/S
5 11 月 NOIP 普及组/提高组
6 12 月 CTT
7 1 月 NOIWC/CTS
8 2 月
9 3 月 省队选拔/NGOI
10 4 月
11 5 月 APIO
12 6 月

打正式比赛也视作一次行动。

信息栏设计

每次行动结束后会生成一条信息,每条信息由行动、感想、属性变化组成。(感想暂且咕掉吧)

特别的,正式比赛结束后还可以加上分数、排名以及获得的奖项。

每个回合结束后会生成一条信息,每条信息由状态变化组成。

每次生成信息后,可能会触发事件,方便收集结局起见,只要是满足了属性要求的事件都会被一次性触发,同时每次事件触发后也会生成信息。