规则Logic
说明
- 斜体表示Logic底层尚未(完全)实现
- []表示待决定
游戏简介
- 1位监管者对抗4位求生者的非对称竞技模式
- [本届THUAI电子系赛道为以4名同学和1名捣蛋鬼的求学与阻挠展开的非对称竞技模式,同学需要完成足够的家庭作业和考试,相互督促以避免沉迷娱乐生活,利用道具地形躲避捣蛋鬼的各种干扰诱惑,完成学业;捣蛋鬼则要极力阻止。]
- [我们的设计是一个非对称游戏,类似第五人格,分为学生、捣蛋鬼两个阵营。在游戏中,学生修完若干课程之后通过考试即可顺利毕业,捣蛋鬼试图干扰学生使其沉迷游戏,以致于无法修完规定课程,直至挂科、退学。]
[对于选手来说,需要提前制定好学生的学习方案以抵御对方捣蛋鬼的干扰,类似地,也需要制定好捣蛋鬼的行动策略以影响对方学生的学习,也即每队至少要写好两份代码以执行不同阵营的不同策略。]
[当一局比赛结束(场上的学生有且仅有两种状态:退学或毕业)时,分别记录双方总得分;之后双方换边进行下半场比赛。最终将每队的学生方、捣蛋鬼方的得分相加,比较总得分判断胜负。]
简要规则
地图
- 地图为矩形区域,地图上的游戏对象坐标为(x, y),且x和y均为整数。
- x坐标轴正方向竖直向下,y坐标轴正方向水平向右;
- 极坐标以x坐标轴为极轴,角度逆时针为正方向。
- 地图由50 * 50个格子构成,其中每个格子代表1000 * 1000的正方形。每个格子的编号(CellX,CellY)可以计算得到:
- 地图上的每个格子有自己的区域类型:陆地、墙、草地、电机、出口、紧急出口、门、窗、箱子
人物状态
游戏人物共有17种不可叠加的状态:(加为学生独有)
1.普通状态
2.学习
3*.被治疗
4*.在治疗
5.开或锁门
6.翻箱
7.使用技能
8*.正在毕业
9*.唤醒他人中
10*.被唤醒中(从沉迷状态中)
11*.沉迷
12*.退学
13*.毕业
14.被眩晕
15.前摇
16.后摇
17.翻窗
其中后8项为不可行动状态
-不加声明,不可行动状态中的玩家各项指令是无效的
交互
- 除了翻窗,交互目标与交互者在一个九宫格内则为可交互
破译与逃脱
- 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门(总所需时间为18秒)后从任意一个开启的大门逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱;
- 紧急出口会在电机破译完成3台的情况下在地图的3-5个固定紧急出口刷新点之一随机刷新。
- 当求生者只剩1名时,紧急出口将会自动打开,该求生者可从紧急出口逃脱。
- 大门开启的进度不清空
攻击
- 无论近战远程均产生子弹以表示攻击所至距离
- 攻击时,从播放攻击动作到可以开始产生伤害的期间,称为前摇。前摇期间攻击被打断时,子弹消失。
- 无论搞蛋鬼或学生,攻击后,通常会出现一段无伤害判定的攻击动作后置时间,称为后摇。击中物体时后摇更长
- 捣蛋鬼攻击或一些特定技能击中以下状态的求生者,将使求生者眩晕4.13s
- 处于前摇或后摇
- 治疗或解救他人
- 修理电机
- 开锁门
- 翻窗
- 开启箱子
治疗
- 治疗时每毫秒增加相当于治疗者治疗速度的被治疗程度
- 当达到被治疗程度达到1500000或者最大血量与当前血量的差值时,治疗结束。
- 治疗中断时,被治疗程度保留;被治疗者遭到攻击时被治疗程度清空
沉迷与唤醒
- 当求生者血量归零时,求生者自动原地进入沉迷状态,每毫秒增加1沉迷度
- 该学生可由其他的求生者唤醒,唤醒后,血量恢复至1/2并可以重新行动。沉迷程度不清空。
- 一般情况下,唤醒时间为1秒。
- 进入沉迷状态时。如果求生者原本沉迷程度在(0,其最大沉迷度/3)中,求生者沉迷程度直接变为其最大沉迷度/3;如果求生者原本沉迷程度在[其最大沉迷度/3,其最大沉迷度2/3)中,求生者沉迷程度直接变为其最大沉迷度2/3;如果求生者原本沉迷程度大于其最大沉迷度*2/3,从游戏中出局;
- 当求生者沉迷程度达到该玩家最大沉迷程度时,从游戏中出局
门
- 门分别属于三个教学区:三教,五教,六教
- 需要拿到对应教学区的钥匙才能打开或锁住对应的门
- 钥匙只会出现在箱子中,每个教学区都有2把钥匙
- 当门所在格子内有人时,无法锁门
窗
- 通常情况下监管者翻越窗户的速度高于求生者。
- 有人正在翻越窗户时,其他玩家均不可以翻越该窗户。
箱子
- 开启箱子后将有2个随机道具掉落在玩家位置。
- 开启箱子的基础持续时间为10秒。
- 箱子道具不刷新
得分
屠夫
- [Tricker对Student造成伤害时,得伤害*100/基本伤害(1500000)分。]
- [使用道具/技能得分]
- 需要造成一定效果才能获取分数,仅使用不得分
- 不同道具/技能有不同得分
- 使Student进入沉迷状态时,得50分。
- 使人类进入眩晕状态时,得25分。
- 每淘汰一个Student,得1000分
- 主动解除眩晕,得15分
- 开锁门
人类
- 修机得分
- 人类每修n%的电机,得n分
- 修完一台电机,额外得?分
- [牵制得分]
- 使用道具/技能得分
- 使屠夫进入特殊状态得分(如使之眩晕)
- 救人
- 治疗
- 逃脱
- 解除眩晕
- 开锁门
道具
| 道具 |
对学生增益 |
[学生得分条件] |
对搞蛋鬼增益 |
[搞蛋鬼得分条件] |
| Key3 |
能开启3教的门 |
不得分 |
能开启3教的门 |
不得分 |
| Key5 |
能开启5教的门 |
不得分 |
能开启3教的门 |
不得分 |
| Key6 |
能开启6教的门 |
不得分 |
能开启3教的门 |
不得分 |
| AddSpeed |
提高移动速度,持续10s |
得分? |
提高移动速度,持续10s |
得分? |
| AddLifeOrClairaudience |
若在10s内Hp归零,该增益消失以使Hp保留100 |
在10s内Hp归零,得分? |
10秒内下一次攻击增伤1800000 |
10秒内有一次攻击,得分? |
| AddHpOrAp |
回血1500000 |
回血成功 |
10秒内下一次攻击增伤1800000 |
10秒内有一次攻击,得分? |
| ShieldOrSpear |
10秒内能抵挡一次伤害 |
10秒内成功抵挡一次伤害 |
10秒内下一次攻击能破盾,如果对方无盾,则增伤900000 |
10秒内攻击中学生 |
| RecoveryFromDizziness |
使用瞬间从眩晕状态中恢复 |
成功从眩晕状态中恢复,得分? |
使用瞬间从眩晕状态中恢复 |
成功从眩晕状态中恢复,得分? |
职业与技能
捣蛋鬼
| 捣蛋鬼职业 |
基本量 |
Assassin |
Klee |
喧哗者ANoisyPerson |
| 移动速度 |
1,503 |
1.1 |
1 |
1.07 |
| 隐蔽度 |
1.0 |
1.5 |
1 |
0.8 |
| 警戒范围 |
17000 |
1.3 |
1 |
0.9 |
| 视野范围 |
15000 |
1.2 |
1 |
1 |
| 开锁门时间(ms) |
2500 |
1/1 |
1 |
1 |
| 翻窗速度 |
1270 |
1 |
1 |
1.1 |
| 翻箱时间(ms) |
10000 |
1/1 |
1/1.1 |
1 |
刺客
- 普通攻击为 CommonAttackOfGhost
- 主动技能
- 隐身
- CD:30s 持续时间:6s
- 在持续时间内玩家隐身
- 使用瞬间得分
- 使用飞刀
- CD:20s 持续时间:1s
- 在持续时间内,攻击类型变为飞刀
- 不得分
Klee
- 普通攻击为 CommonAttackOfGhost
- 主动技能
- 蹦蹦炸弹
- CD:15s 持续时间:3s
- 在持续时间内,攻击类型变为蹦蹦炸弹
- 当蹦蹦炸弹因为碰撞而爆炸,向子弹方向上加上90°,270° 发出2个小炸弹
- 2个小炸弹运动停止前会因为碰撞爆炸,停止运动后学生碰撞会造成眩晕3.07s
- 不得分
喧哗者
- 普通攻击为 CommonAttackOfGhost
- 主动技能
- 嚎叫
- CD:25s
- 使用瞬间,在视野半径范围内(不是可视区域)的学生被眩晕6110ms,自己进入3070ms的后摇
- 通过眩晕获得对应得分
- 被动技能
学生(&老师)
| 学生职业 |
基本量 |
教师Teacher |
健身狂Athlete |
学霸StraightAStudent |
开心果Sunshine |
| 移动速度 |
1,270 |
3 / 4 |
1.1 |
0.8 |
1 |
| 最大毅力值 |
3000000 |
10 |
1 |
1.1 |
32/30 |
| 最大沉迷度 |
60000 |
10 |
0.9 |
1.3 |
1.1 |
| 学习一科时间(ms) |
81800 |
1/0 |
10/6 |
10/11 |
1 |
| 治疗速度 |
100 |
0.7 |
0.8 |
0.8 |
2 |
| 隐蔽度 |
1.0 |
0.5 |
0.9 |
0.9 |
1 |
| 警戒范围 |
15000 |
0.5 |
1 |
0.9 |
1 |
| 视野范围 |
10000 |
0.9 |
1.1 |
0.9 |
1 |
| 开锁门时间(ms) |
2500 |
1/1 |
1 |
1 |
1 |
| 翻窗速度 |
1270 |
0.5 |
1.2 |
10/12 |
1 |
| 翻箱时间(ms) |
10000 |
1/1 |
1 |
1 |
1 |
运动员
- 主动技能
- 冲撞
- CD:24s 持续时间:5s
- 在持续时间内,速度变为三倍,期间撞到捣蛋鬼,会导致捣蛋鬼眩晕7.22s,学生眩晕2.09s
- 通过眩晕获得对应得分
教师
- 主动技能
- 惩罚
- CD:30s
- 使用瞬间,在可视范围内的使用技能状态中、攻击前后摇的捣蛋鬼会被眩晕(3070)ms,
- 通过眩晕获得对应得分
- 特性
学霸
- 被动技能
- 冥想
- 当玩家处于可接受指令状态且不在修机时,会积累学习进度,速度为(GameData.basicFixSpeed / 4)/ms
- 受到攻击(并非伤害)或眩晕或翻窗(或攻击他人)学习进度清零
- 主动技能
- 写答案
- CD:30s
- 使用瞬间,对于可互动范围内的一台电机增加这个学习进度
- 不得分
开心果
- 主动技能
- 唤醒
- CD:60s
- 使用瞬间,唤醒可视范围内一个沉迷中的人
- 通过唤醒获得对应得分
- 勉励
- CD:60s
- 使用瞬间,治疗完成可视范围内一个毅力不足中的人
- 通过治疗获得对应得分
- 鼓舞
- CD:60s
- 使用瞬间,可视范围内学生(包括自己)获得持续6秒的1.6倍速Buff
- 每鼓舞一个学生得分10
游戏数据
请自行查看Logic/Preparation/Utility/GameData.cs
细则
特殊说明
初始状态
交互
- 在指令仍在进行时,重复发出同一类型的交互指令是无效的,你需要先发出Stop指令终止进行的指令
破译与逃脱
- 紧急出口与大门对于人有碰撞体积
- 一个大门同时最多可以由一人开启
攻击
沉迷与唤醒
门
- 一扇门只允许同时一个人开锁门
- 开锁门未完成前,门状态表现为原来的状态
- 开锁门进度中断后清空
窗
- 攻击可以穿过窗,道具可以在窗上
- 翻越窗户是一种交互行为,翻窗一共有两个过程
- 跳上窗:从当前位置到窗边缘中点,位置瞬移,时间=距离/爬窗速度。中断时,停留在原位置
- 爬窗:从窗一侧边缘中点到另一侧格子中心,位置渐移,时间=距离/爬窗速度。中断时,停留在另一侧格子中心
箱子
- 同一时刻只允许一人进行开启
- 未开启完成的箱子在下一次需要重新开始开启。
- 箱子开启后其中道具才可以被观测和拿取
游戏内Logic底层的枚举类型、类与属性
- 底层实现中的属性,不代表界面全部都需要展示,也可能需要额外展示信息
- 只展示外部需要的属性,部分属性被省略
BgmType
- 枚举类BgmType
- 不详的感觉:监管者进入(求生者的警戒半径/监管者的隐蔽度)时,求生者收到;监管者距离求生者越近,Bgm音量越大。bgmVolume=(警戒半径/二者距离)
- 期待搞事的感觉:求生者进入(监管者的警戒半径/求生者的隐蔽度)时,监管者收到;监管者距离求生者越近,Bgm音量越大。bgmVolume=(警戒半径/可被发觉的最近的求生者距离)
- 修理电机的声音: 监管者警戒半径内有电机正在被修理时收到;bgmVolume=(警戒半径*电机修理程度/二者距离)/10300000
public enum BgmType
{
Null = 0,
GhostIsComing = 1,
StudentIsApproaching = 2,
GeneratorIsBeingFixed = 3,
}
技能
public enum ActiveSkillType // 主动技能
{
Null = 0,
BecomeInvisible = 1,
...
UseKnife = 5,
BeginToCharge = 6
}
public enum PassiveSkillType
{
Null = 0,
}
物体
- 位置
- 位置地形
- ID
- 类型
- 面向角度
- 形状
- 半径
- 是否可移动
- 是否在移动
- 移动速度
人物:物体
- 装弹CD
- 持有子弹数量
- 血量
- 最大血量
- 玩家状态(不可叠加)
- Bgm(字典)
- 得分
- 当前子弹类型
- 原始子弹类型
- 持有道具 (最多三个)(数组)
- 是否隐身
- 队伍ID
- 玩家ID
- 当前Buff
- 职业类型
- 拥有的被动技能(列表)
- 拥有的主动技能(列表)
- 各个主动技能CD(字典)
- 警戒半径
- double 隐蔽度
- 翻窗时间
- 开锁门速度
- 开箱速度
- 视野范围
学生:人物
- 修理电机速度
- 治疗速度
- 沉迷游戏程度
- 最大沉迷游戏程度
- 被治疗程度
- 被救援程度
搞蛋鬼:人物
无
队伍:
所有物:
子弹:所有物
- 子弹攻击范围
- 子弹爆炸范围
- 子弹攻击力
- 是否可以穿墙
- 是否为远程攻击
- 移动速度
- 子弹类型
爆炸中的子弹:物体
道具:所有物
被捡起的道具:物体
出口:物体
紧急出口:物体
墙:物体
窗:物体
箱子:物体
门:物体
- 属于那个教学区
- 是否锁上
- 开锁门进度
- 不提供是否可以锁上的属性
电机(建议称为homework):物体
键鼠控制
| 键位 |
效果 |
| W/NumPad8 |
(Both)向上移动 |
| S/NumPad2 |
(Both)向下移动 |
| D/NumPad6 |
(Both)向右移动 |
| A/NumPad4 |
(Both)向左移动 |
| J |
(Tri)攻击,方向向上 |
| 鼠标双击某点 |
(Tri)攻击,方向与从Tricker指向该点的向量相同 |
| K |
(Stu)开始学习 |
| R |
(Stu)开始营救(陷入沉迷状态的同伴) |
| T |
(Stu)开始治疗(学习毅力下降的同伴) |
| G |
(Stu)发出毕业请求 |
| H |
(Stu)申请毕业(或称为开大门) |
| O |
(Both)开(教学楼)门 |
| P |
(Both)关(教学楼)门 |
| U |
(Both)翻窗 |
| I |
(Both)翻箱子 |
| E |
(Both)结束当前行动,回到Idle状态 |
| F |
(Both)随机捡起一个在周围的道具 |
| C |
(Both)随机扔下一个已经持有的道具 |
| V |
(Both)随机使用一个已经持有的道具 |
| B |
(Both)使用0号技能 |
| N |
(Both)使用1号技能 |
| M |
(Both)使用2号技能 |