- 对打游戏
- 有两个人,下称玩家
- 每个人都有血值
- 有攻击力
- 没有防御力
- 有名字
- 可以互相对打
- 游戏开始,双方互殴,你一下我一下,直到一人死亡,打印出 xx 被打败了。
- 只需要写核心逻辑,不需要考虑界面。
输出
李四被打败了.
- 每次攻击输出谁攻击了谁,被攻击的人掉了多少血,剩多少血。
输出:
张三攻击了李四,李四受到了8点伤害,李四剩余生命:12
李四攻击了张三,张三受到了9点伤害,张三剩余生命:1
张三攻击了李四,李四受到了8点伤害,李四剩余生命:4
李四攻击了张三,张三受到了9点伤害,张三剩余生命:-8
张三被打败了
- 要有职业分为:普通人和战士。
- 攻击要输出职业+名字
- 被攻击时也输出
- 战士可以装备武器,武器有名字。所以要输出用武器攻击了对方。
- 武器有额外的攻击力。
- 战士和普通人可以互相攻击。
- 战士可以装备防具
- 普通人不可以装备防具或武器
- 战士受到的伤害是对方的攻击力减去防御力
- 第二问的单行输出需求被废弃。(下列输出没有包含防具,但是记得要实现防具的防御功能,下列输出只是例子,不见得做题时要写的完全一样)
输出 1:
战士张三用优质木棒攻击了普通人李四,李四受到了 8 点伤害,李四剩余生命:12
输出 2:
普通人李四攻击了战士张三,张三受到了 9 点伤害,张三剩余生命:1
输出 3:
普通人张三攻击了普通人李四,李四受到了 8 点伤害,李四剩余生命:4
要求设计出 Solider
和 Player
两个类,体现继承,消除重复。 这个题目最大的练习点在于最小知识原则,又称迪米特法则。尤其到了第四问,很重要。
- 武器有特性,产生各种效果:
- 毒性伤害,每轮损血,属于延时伤害
- 火焰伤害,每轮损血,属于延时伤害
- 冰冻伤害,每两轮无法攻击一轮,属于延时伤害
- 击晕伤害,两轮无法攻击,属于延时伤害
- 全力一击,三倍伤害,是伤害乘以 3,不是攻击力。
- 有的武器有特性,有的武器没有,一个武器只有一个特性
- 效果触发是随机的。不同的武器有不同的触发几率。
- 发动时要打印受了 xx 伤害
- 延时伤害结算在每局受到延时伤害的人攻击前,发动时打印伤害。
- 延时伤害都有伤害效果发动的次数,不同的武器造成的伤害发动的次数不同,次数归零就不再伤害,状态也会消失。
- 除了眩晕伤害之外,其他的不显示还剩几轮。
- 每种延时伤害都可以跟自己累加,一个人中了两次同一种延时伤害,其效果会累加。冰冻或眩晕各自累加的是发动次数,毒性或火焰各自累加的是伤害值和发动次数。
- 第三问的需求依然有效。
注:下面的//只是示意,实际要求跟正常的攻击输出一样。
输出 1(毒性):
战士张三用优质毒剑攻击了普通人李四,李四受到了 8 点伤害,李四中毒了,李四剩余生命:12
李四受到 2 点毒性伤害, 李四剩余生命:10
//李四进攻
//张三进攻
李四受到 2 点毒性伤害, 李四剩余生命:x
//李四进攻
输出 2(冰冻):
战士张三用火焰剑攻击了普通人李四,李四受到了 8 点伤害,李四着火了,李四剩余生命:12
李四受到 2 点火焰伤害, 李四剩余生命:10
//李四进攻
//张三进攻
李四受到 2 点火焰伤害, 李四剩余生命:x
//李四进攻
输出 3(冰冻):
战士张三用寒冰剑攻击了普通人李四,李四受到了 8 点伤害,李四冻僵了,李四剩余生命:12
//李四进攻
//张三进攻
//李四进攻
//张三进攻
李四冻得直哆嗦,没有击中张三
//张三进攻
输出 4(眩晕):
战士张三用晕锤攻击了普通人李四,李四受到了 8 点伤害,李四晕倒了,李四剩余生命:12
李四晕倒了,无法攻击, 眩晕还剩:1 轮
//张三进攻
李四晕倒了,无法攻击, 眩晕还剩:0 轮
//张三进攻
//李四进攻
输出 5(全力):
战士张三用利剑攻击了普通人李四,张三发动了全力一击,李四受到了 24 点伤害,李四剩余生命:-4
输出 6(累加):
战士张三用晕锤攻击了普通人李四,李四受到了 8 点伤害,李四晕倒了,李四剩余生命:12
李四晕倒了,无法攻击, 眩晕还剩:1 轮
战士张三用晕锤攻击了普通人李四,李四受到了 8 点伤害,李四晕倒了,李四剩余生命:4
李四晕倒了,无法攻击, 眩晕还剩:2 轮
//张三进攻
李四晕倒了,无法攻击, 眩晕还剩:1 轮
//张三进攻
李四晕倒了,无法攻击, 眩晕还剩:0 轮
//张三进攻
//李四进攻
- 有的武器有多种特性,但是每次只触发一种伤害,当有多种伤害的时候,以第一个触发的为本次触发伤害。
- 多种特性可以是相同种类的也可以是不同种类的。
- 每个特性触发伤害效果的几率,伤害和发动次数一般不同。比如武器超级火焰剑,拥有两个火焰特性,第一个火焰特性触发效果的几率是 0.2,伤害为 2,发动次数为 3,第二个火焰特性的触发几率是 0.3,伤害为 5,发动次数为 2。不同的与上例类似。
- 每种延时伤害不能跟其他延时伤害累加。一个人同一时间只能处于一个延时伤害状态,获得一种延时伤害,另一种延时伤害就会消失。但是非延时伤害不会取消延时伤害,例如全力一击因为没有延时伤害,所以不会取消另一种伤害。
- 武器再分化为长中短
- 职业再分化为 刺客,战士,骑士
- 这三个职业都可以装备防具
- 刺客只可以装备中短武器
- 战士只可以装备中武器
- 骑士只可以装备中长武器
- 如果装备了不可以装备的武器,那么会抛出异常
- 长中短武器有各自的职业技能效果
- 只有刺客可以发动短武器技能效果
- 只有战士可以发动中武器技能效果
- 只有骑士可以发动长武器技能效果
- 引入攻击距离与靠近概念,平时双方默认的距离为 1
- 普通武器的攻击距离是 1,长兵器的攻击距离为 2
- 长武器有击退效果,不同的长武器击退距离不一样,但最多为 2, 击退距离+现在的距离=击退后的距离,比如现在的距离为 1,击退距离为 2,则击退后的距离为 3
- 被击退的人下一局要先移动至可以进行攻击的范围,称之为靠近.靠近与攻击,一局内只能发生其中之一.骑士例外,骑士在一轮中既能靠近也能攻击
- 战士的一局只能移动 1,而刺客和骑士一局可以移动 2
- 短武器有连击效果,发动连击的人会发动两次攻击,打印两次攻击在同一行里
- 中武器有防御力,且可以隔挡反击,兵器的防御力平时不记入防御力,当发生隔挡反击的时候计算入防御力.同时完成一次额外的攻击,如果在攻击距离之外,只隔当不反击
- 触发几率都是 1/4
输出 1:
刺客张三用峨眉刺攻击了骑士李四,李四受到了 8 点伤害,张三发动了连击,李四收到了 8 点伤害,李四剩余生命: 4
输出 2:
刺客张三用冰雪峨眉刺攻击了骑士李四,李四受到了 8 点伤害,李四冻僵了,张三发动了连击,李四收到了 8 点伤害,李四剩余生命: 4
输出 3:
骑士张三用长枪攻击了刺客李四,李四受到了 8 点伤害,李四被击退了,李四剩余生命: 12
李四靠近了张三
//张三进攻
//李四进攻
输出 4:
骑士张三用长枪攻击了战士李四,李四受到了 6 点伤害,李四发动了隔挡反击,张三受到了 9 点伤害.李四剩余生命:14,张三剩余生命:11
//李四攻击
输出 5:
骑士张三用长枪攻击了战士李四,李四受到了 6 点伤害,李四发动了隔挡反击,张三不在攻击范围内.李四剩余生命:14,张三剩余生命:11
//李四攻击
- 角斗场所
- 场所会对各个属性都有影响
- 屋顶和弄堂对刺客有加成
- 战场和关隘对骑士有加成
- 庭院和都市大道对战士有加成
- 加成的方式是当触发技能效果的时候,各自收到更多的影响
- 屋顶和弄堂里,刺客会因为敏捷的动作而获得额外的一轮进攻
- 战场和关隘,骑士击退距离为武器标注的两倍
- 庭院和都市大道,战士可以隔挡后,连续进攻两次,如果对方不在攻击范围内,则会移动