You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

规则Logic.md 19 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. # 规则Logic
  2. ## 说明
  3. - *斜体表示Logic底层尚未(完全)实现*
  4. - []表示待决定
  5. ## 游戏简介
  6. - 1位监管者对抗4位求生者的非对称竞技模式
  7. - [本届THUAI电子系赛道为以4名同学和1名捣蛋鬼的求学与阻挠展开的非对称竞技模式,同学需要完成足够的家庭作业和考试,相互督促以避免沉迷娱乐生活,利用道具地形躲避捣蛋鬼的各种干扰诱惑,完成学业;捣蛋鬼则要极力阻止。]
  8. - [我们的设计是一个非对称游戏,类似第五人格,分为学生、捣蛋鬼两个阵营。在游戏中,学生修完若干课程之后通过考试即可顺利毕业,捣蛋鬼试图干扰学生使其沉迷游戏,以致于无法修完规定课程,直至挂科、退学。]
  9. [对于选手来说,需要提前制定好学生的学习方案以抵御对方捣蛋鬼的干扰,类似地,也需要制定好捣蛋鬼的行动策略以影响对方学生的学习,也即每队至少要写好两份代码以执行不同阵营的不同策略。]
  10. [当一局比赛结束(场上的学生有且仅有两种状态:退学或毕业)时,分别记录双方总得分;之后双方换边进行下半场比赛。最终将每队的学生方、捣蛋鬼方的得分相加,比较总得分判断胜负。]
  11. ## 简要规则
  12. ### 地图
  13. - 地图为矩形区域,地图上的游戏对象坐标为(x, y),且x和y均为整数。
  14. - **x坐标轴正方向竖直向下,y坐标轴正方向水平向右**;
  15. - **极坐标以x坐标轴为极轴,角度逆时针为正方向**。
  16. - 地图由50 * 50个格子构成,其中每个格子代表1000 * 1000的正方形。每个格子的编号(CellX,CellY)可以计算得到:
  17. - 略
  18. - 地图上的每个格子有自己的区域类型:陆地、墙、草地、电机、出口、紧急出口、门、窗、箱子
  19. ### 人物状态
  20. 游戏人物共有17种不可叠加的状态:(加*为学生独有)
  21. 1.普通状态
  22. 2*.学习
  23. 3*.被治疗
  24. 4*.在治疗
  25. 5.开或锁门
  26. 6.翻箱
  27. 7.使用技能
  28. 8*.正在毕业
  29. 9*.唤醒他人中
  30. 10*.被唤醒中(从沉迷状态中)
  31. 11*.沉迷
  32. 12*.退学
  33. 13*.毕业
  34. 14.被眩晕
  35. 15.前摇
  36. 16.后摇
  37. 17.翻窗
  38. 其中后8项为不可行动状态
  39. -不加声明,不可行动状态中的玩家各项指令是无效的
  40. ### 交互
  41. - 除了翻窗,交互目标与交互者在一个九宫格内则为可交互
  42. - 翻窗时玩家应当在目标前后左右一个格子内
  43. #### 破译与逃脱
  44. - 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门(总所需时间为18秒)后从任意一个开启的大门逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱;
  45. - 紧急出口会在电机破译完成3台的情况下在地图的3-5个固定紧急出口刷新点之一随机刷新。
  46. - 当求生者只剩1名时,紧急出口将会自动打开,该求生者可从紧急出口逃脱。
  47. - 大门开启的进度不清空
  48. #### 攻击
  49. - 无论近战远程均产生子弹以表示攻击所至距离
  50. - 攻击时,从播放攻击动作到可以开始产生伤害的期间,称为前摇。前摇期间攻击被打断时,子弹消失。
  51. - 无论搞蛋鬼或学生,攻击后,通常会出现一段无伤害判定的攻击动作后置时间,称为后摇。击中物体时后摇更长
  52. - 捣蛋鬼攻击或一些特定技能击中以下状态的求生者,将使求生者眩晕4.13s
  53. 1. 处于前摇或后摇
  54. 2. 治疗或解救他人
  55. 3. 修理电机
  56. 4. 开锁门
  57. 5. 翻窗
  58. 6. 开启箱子
  59. #### 治疗
  60. - 治疗时每毫秒增加相当于治疗者治疗速度的被治疗程度
  61. - 当达到被治疗程度达到1500000或者最大血量与当前血量的差值时,治疗结束。
  62. - 治疗中断时,被治疗程度保留;被治疗者遭到攻击时被治疗程度清空
  63. #### 沉迷与唤醒
  64. - 当求生者血量归零时,求生者自动原地进入沉迷状态,每毫秒增加1沉迷度
  65. - 该学生可由其他的求生者唤醒,唤醒后,血量恢复至1/2并可以重新行动。沉迷程度不清空。
  66. - 一般情况下,唤醒时间为1秒。
  67. - 进入沉迷状态时。如果求生者原本沉迷程度在(0,其最大沉迷度/3)中,求生者沉迷程度直接变为其最大沉迷度/3;如果求生者原本沉迷程度在[其最大沉迷度/3,其最大沉迷度*2/3)中,求生者沉迷程度直接变为其最大沉迷度*2/3;如果求生者原本沉迷程度大于其最大沉迷度*2/3,从游戏中出局;
  68. - 当求生者沉迷程度达到该玩家最大沉迷程度时,从游戏中出局
  69. #### 门
  70. - 门分别属于三个教学区:三教,五教,六教
  71. - 需要拿到对应教学区的钥匙才能打开或锁住对应的门
  72. - 钥匙只会出现在箱子中,每个教学区都有2把钥匙
  73. - 当门所在格子内有人时,无法锁门
  74. - 锁门时其他人可以进入门所在格子,锁门过程中断
  75. #### 窗
  76. - 通常情况下监管者翻越窗户的速度高于求生者。
  77. - 有人正在翻越窗户时,其他玩家均不可以翻越该窗户。
  78. #### 箱子
  79. - 开启箱子后将有2个随机道具掉落在玩家位置。
  80. - 开启箱子的基础持续时间为10秒。
  81. - 箱子道具不刷新
  82. ### 得分
  83. #### 屠夫
  84. - [Tricker对Student造成伤害时,得伤害*100/基本伤害(1500000)分。]
  85. - *[使用道具/技能得分]*
  86. - 需要造成一定效果才能获取分数,仅使用不得分
  87. - 不同道具/技能有不同得分
  88. - 使Student进入沉迷状态时,得50分。
  89. - 使人类进入眩晕状态时,得25分。
  90. - 每淘汰一个Student,得1000分
  91. - 主动解除眩晕,得15分
  92. - 开锁门
  93. #### 人类
  94. - 修机得分
  95. - 人类每修n%的电机,得n分
  96. - 修完一台电机,额外得?分
  97. - [牵制得分]
  98. - 使用道具/技能得分
  99. - 不同道具/技能有不同得分
  100. - 使屠夫进入特殊状态得分(如使之眩晕)
  101. - 救人
  102. - 治疗
  103. - 逃脱
  104. - 解除眩晕
  105. - 开锁门
  106. ## 道具
  107. | 道具 | 对学生增益 | [学生得分条件] | 对搞蛋鬼增益 | [搞蛋鬼得分条件] |
  108. | :-------- | :-------------------------------------- | :-----------------| :-------------------------------------- |:-----------------|
  109. | Key3 | 能开启3教的门 |不得分| 能开启3教的门 |不得分|
  110. | Key5 | 能开启5教的门 |不得分| 能开启3教的门 |不得分|
  111. | Key6 | 能开启6教的门 |不得分| 能开启3教的门 |不得分|
  112. | AddSpeed | 提高移动速度,持续10s |得分?| 提高移动速度,持续10s |得分?|
  113. | AddLifeOrClairaudience |若在10s内Hp归零,该增益消失以使Hp保留100|在10s内Hp归零,得分? |10秒内下一次攻击增伤1800000|10秒内有一次攻击,得分? |
  114. | AddHpOrAp |回血1500000 | 回血成功 | 10秒内下一次攻击增伤1800000|10秒内有一次攻击,得分? |
  115. | ShieldOrSpear | 10秒内能抵挡一次伤害 | 10秒内成功抵挡一次伤害 |10秒内下一次攻击能破盾,如果对方无盾,则增伤900000| 10秒内攻击中学生|
  116. | RecoveryFromDizziness | 使用瞬间从眩晕状态中恢复 | 成功从眩晕状态中恢复,得分?|使用瞬间从眩晕状态中恢复 | 成功从眩晕状态中恢复,得分?|
  117. ## 职业与技能
  118. ### 捣蛋鬼
  119. | 捣蛋鬼职业 | 基本量 | Assassin | Klee | 喧哗者ANoisyPerson |
  120. | :------------ | :--------------------- | :--------------------- | :--------------------- | :--------------------- |
  121. | 移动速度 | 1,503 | 1.1 | 1 | 1.07 |
  122. | 隐蔽度 | 1.0 | 1.5 | 1 | 0.8 |
  123. | 警戒范围 | 17000 | 1.3 | 1 | 0.9 |
  124. | 视野范围 | 15000 | 1.2 | 1 | 1 |
  125. | 开锁门时间(ms)| 2500 | 1/1 | 1 | 1 |
  126. | 翻窗速度 | 1270 | 1 | 1 | 1.1 |
  127. | 翻箱时间(ms) | 10000 | 1/1 | 1/1.1 | 1 |
  128. #### 刺客
  129. - 普通攻击为 CommonAttackOfGhost
  130. - 主动技能
  131. - 隐身
  132. - CD:30s 持续时间:6s
  133. - 在持续时间内玩家隐身
  134. - 使用瞬间得分
  135. - 使用飞刀
  136. - CD:20s 持续时间:1s
  137. - 在持续时间内,攻击类型变为飞刀
  138. - 不得分
  139. #### Klee
  140. - 普通攻击为 CommonAttackOfGhost
  141. - 主动技能
  142. - 蹦蹦炸弹
  143. - CD:15s 持续时间:3s
  144. - 在持续时间内,攻击类型变为蹦蹦炸弹
  145. - 当蹦蹦炸弹因为碰撞而爆炸,向子弹方向上加上90°,270° 发出2个小炸弹
  146. - 2个小炸弹运动停止前会因为碰撞爆炸,停止运动后学生碰撞会造成眩晕3.07s
  147. - 不得分
  148. #### 喧哗者
  149. - 普通攻击为 CommonAttackOfGhost
  150. - 主动技能
  151. - 嚎叫
  152. - CD:25s
  153. - 使用瞬间,在视野半径范围内(不是可视区域)的学生被眩晕6110ms,自己进入3070ms的后摇
  154. - 通过眩晕获得对应得分
  155. - 被动技能
  156. - 在场所有学生Bgm系统被设为无用的值
  157. ### 学生(&老师)
  158. | 学生职业 | 基本量 | 教师Teacher | 健身狂Athlete | 学霸StraightAStudent | 开心果Sunshine |
  159. | :------------ | :--------------------- | :--------------------- | :--------------------- | :--------------------- | :--------------------- |
  160. | 移动速度 | 1,270 | 3 / 4 | 1.1 | 0.8 | 1 |
  161. | 最大毅力值 | 3000000 | 10 | 1 | 1.1 | 32/30 |
  162. | 最大沉迷度 | 60000 | 10 | 0.9 | 1.3 | 1.1 |
  163. | 学习一科时间(ms) | 81800 | 1/0 | 10/6 | 10/11 | 1 |
  164. | 治疗速度 | 100 | 0.7 | 0.8 | 0.8 | 2 |
  165. | 隐蔽度 | 1.0 | 0.5 | 0.9 | 0.9 | 1 |
  166. | 警戒范围 | 15000 | 0.5 | 1 | 0.9 | 1 |
  167. | 视野范围 | 10000 | 0.9 | 1.1 | 0.9 | 1 |
  168. | 开锁门时间(ms)| 2500 | 1/1 | 1 | 1 | 1 |
  169. | 翻窗速度 | 1270 | 0.5 | 1.2 | 10/12 | 1 |
  170. | 翻箱时间(ms) | 10000 | 1/1 | 1 | 1 | 1 |
  171. #### 运动员
  172. - 主动技能
  173. - 冲撞
  174. - CD:24s 持续时间:5s
  175. - 在持续时间内,速度变为三倍,期间撞到捣蛋鬼,会导致捣蛋鬼眩晕7.22s,学生眩晕2.09s
  176. - 通过眩晕获得对应得分
  177. #### 教师
  178. - 主动技能
  179. - 惩罚
  180. - CD:30s
  181. - 使用瞬间,在可视范围内的使用技能状态中、攻击前后摇的捣蛋鬼会被眩晕(3070)ms,
  182. - 通过眩晕获得对应得分
  183. - 特性
  184. - 教师无法获得牵制得分
  185. #### 学霸
  186. - 被动技能
  187. - 冥想
  188. - 当玩家处于可接受指令状态且不在修机时,会积累学习进度,速度为(GameData.basicFixSpeed / 4)/ms
  189. - 受到攻击(并非伤害)或眩晕或翻窗(或攻击他人)学习进度清零
  190. - 主动技能
  191. - 写答案
  192. - CD:30s
  193. - 使用瞬间,对于可互动范围内的一台电机增加这个学习进度
  194. - 不得分
  195. #### 开心果
  196. - 主动技能
  197. - 唤醒
  198. - CD:60s
  199. - 使用瞬间,唤醒可视范围内一个沉迷中的人
  200. - 通过唤醒获得对应得分
  201. - 勉励
  202. - CD:60s
  203. - 使用瞬间,治疗完成可视范围内一个毅力不足中的人
  204. - 通过治疗获得对应得分
  205. - 鼓舞
  206. - CD:60s
  207. - 使用瞬间,可视范围内学生(包括自己)获得持续6秒的1.6倍速Buff
  208. - 每鼓舞一个学生得分10
  209. ## 游戏数据
  210. 请自行查看Logic/Preparation/Utility/GameData.cs
  211. ## 细则
  212. ### 特殊说明
  213. - 不加说明,这里“学生”往往包括职业“教师”
  214. ### 初始状态
  215. - 玩家出生点固定且一定为空地
  216. ### 交互
  217. - 在指令仍在进行时,重复发出同一类型的交互指令是无效的,你需要先发出Stop指令终止进行的指令
  218. - 实际上救援或治疗不同的人是有效的
  219. ### 破译与逃脱
  220. - 紧急出口与大门对于人有碰撞体积
  221. - 一个大门同时最多可以由一人开启
  222. ### 攻击
  223. - 每次求生者受到攻击后会损失对应子弹的攻击力的血量
  224. ### 沉迷与唤醒
  225. - 在被救时沉迷度不增加
  226. - 不能两人同时唤醒一个人
  227. ### 门
  228. - 一扇门只允许同时一个人开锁门
  229. - 开锁门未完成前,门状态表现为原来的状态
  230. - 开锁门进度中断后清空
  231. ### 窗
  232. - 攻击可以穿过窗,道具可以在窗上
  233. - 翻越窗户是一种交互行为,翻窗一共有两个过程
  234. - 跳上窗:从当前位置到窗边缘中点,位置瞬移,时间=距离/爬窗速度。中断时,停留在原位置
  235. - 爬窗:从窗一侧边缘中点到另一侧格子中心,位置渐移,时间=距离/爬窗速度。中断时,停留在另一侧格子中心
  236. ### 箱子
  237. - 同一时刻只允许一人进行开启
  238. - 未开启完成的箱子在下一次需要重新开始开启。
  239. - 箱子开启后其中道具才可以被观测和拿取
  240. ## 游戏内Logic底层的枚举类型、类与属性
  241. - 底层实现中的属性,不代表界面全部都需要展示,也可能需要额外展示信息
  242. - 只展示外部需要的属性,部分属性被省略
  243. ### BgmType
  244. - 枚举类BgmType
  245. 1. 不详的感觉:监管者进入(求生者的警戒半径/监管者的隐蔽度)时,求生者收到;监管者距离求生者越近,Bgm音量越大。bgmVolume=(警戒半径/二者距离)
  246. 2. 期待搞事的感觉:求生者进入(监管者的警戒半径/求生者的隐蔽度)时,监管者收到;监管者距离求生者越近,Bgm音量越大。bgmVolume=(警戒半径/可被发觉的最近的求生者距离)
  247. 3. 修理电机的声音: 监管者警戒半径内有电机正在被修理时收到;bgmVolume=(警戒半径*电机修理程度/二者距离)/10300000
  248. ~~~csharp
  249. public enum BgmType
  250. {
  251. Null = 0,
  252. GhostIsComing = 1,
  253. StudentIsApproaching = 2,
  254. GeneratorIsBeingFixed = 3,
  255. }
  256. ~~~
  257. ### 技能
  258. ~~~csharp
  259. public enum ActiveSkillType // 主动技能
  260. {
  261. Null = 0,
  262. BecomeInvisible = 1,
  263. ...
  264. UseKnife = 5,
  265. BeginToCharge = 6
  266. }
  267. public enum PassiveSkillType
  268. {
  269. Null = 0,
  270. }
  271. ~~~
  272. ### 物体
  273. - 位置
  274. - 位置地形
  275. - ID
  276. - 类型
  277. - 面向角度
  278. - 形状
  279. - 半径
  280. - 是否可移动
  281. - 是否在移动
  282. - 移动速度
  283. ### 人物:物体
  284. - 装弹CD
  285. - 持有子弹数量
  286. - 血量
  287. - 最大血量
  288. - 玩家状态(不可叠加)
  289. - Bgm(字典)
  290. - 得分
  291. - 当前子弹类型
  292. - 原始子弹类型
  293. - 持有道具 (最多三个)(数组)
  294. - 是否隐身
  295. - 队伍ID
  296. - 玩家ID
  297. - 当前Buff
  298. - 职业类型
  299. - 拥有的被动技能(列表)
  300. - 拥有的主动技能(列表)
  301. - 各个主动技能CD(字典)
  302. - 警戒半径
  303. - double 隐蔽度
  304. - 翻窗时间
  305. - 开锁门速度
  306. - 开箱速度
  307. - 视野范围
  308. ### 学生:人物
  309. - 修理电机速度
  310. - 治疗速度
  311. - 沉迷游戏程度
  312. - 最大沉迷游戏程度
  313. - 被治疗程度
  314. - 被救援程度
  315. ### 搞蛋鬼:人物
  316. ### 队伍:
  317. - 队伍ID
  318. - 队伍得分
  319. - 队伍成员
  320. ### 所有物:
  321. - 主人
  322. ### 子弹:所有物
  323. - 子弹攻击范围
  324. - 子弹爆炸范围
  325. - 子弹攻击力
  326. - 是否可以穿墙
  327. - 是否为远程攻击
  328. - 移动速度
  329. - 子弹类型
  330. ### 爆炸中的子弹:物体
  331. - 原来的子弹ID
  332. - 爆炸范围
  333. - 子弹类型
  334. ### 道具:所有物
  335. - 道具类型
  336. ### 被捡起的道具:物体
  337. - 原来的道具ID
  338. - 道具类型
  339. ### 出口:物体
  340. - 电力供应(是否可以被打开)
  341. - 开启进度
  342. ### 紧急出口:物体
  343. - 是否显现
  344. - 是否打开
  345. ### 墙:物体
  346. ### 窗:物体
  347. - 正在翻窗的人
  348. ### 箱子:物体
  349. - 开箱进度
  350. ### 门:物体
  351. - 属于那个教学区
  352. - 是否锁上
  353. - 开锁门进度
  354. - 不提供是否可以锁上的属性
  355. ### 电机(建议称为homework):物体
  356. - 修理程度
  357. ## 键鼠控制
  358. | 键位 | 效果 |
  359. | ------------ | ---------------------------------------------- |
  360. | W/NumPad8 | (Both)向上移动 |
  361. | S/NumPad2 | (Both)向下移动 |
  362. | D/NumPad6 | (Both)向右移动 |
  363. | A/NumPad4 | (Both)向左移动 |
  364. | J | (Tri)攻击,方向向上 |
  365. | 鼠标双击某点 | (Tri)攻击,方向与从Tricker指向该点的向量相同 |
  366. | K | (Stu)开始学习 |
  367. | R | (Stu)开始营救(陷入沉迷状态的同伴) |
  368. | T | (Stu)开始治疗(学习毅力下降的同伴) |
  369. | G | (Stu)发出毕业请求 |
  370. | H | (Stu)申请毕业(或称为开大门) |
  371. | O | (Both)开(教学楼)门 |
  372. | P | (Both)关(教学楼)门 |
  373. | U | (Both)翻窗 |
  374. | I | (Both)翻箱子 |
  375. | E | (Both)结束当前行动,回到Idle状态 |
  376. | F | (Both)随机捡起一个在周围的道具 |
  377. | C | (Both)随机扔下一个已经持有的道具 |
  378. | V | (Both)随机使用一个已经持有的道具 |
  379. | B | (Both)使用0号技能 |
  380. | N | (Both)使用1号技能 |
  381. | M | (Both)使用2号技能 |