270
社区成员
发帖
与我相关
我的任务
分享第二次作业结构较为基础,完成aa、ab、ae、rb、re五个指令即可。利用ArrayList来管理所有冒险者,并添加Adventurer、Bottle和Equipment三个类来完成基本的增删操作。
在第三次作业里就开始引入子类和接口了,同时在题目里引入“携带”、“可用物品”和“法术”等概念。
对于背包问题,利用ArrayList来管理携带物品并完成增删操作;“可用物品”则增设Usable接口来管理Spell、Bottle和Equipment;同时添加HpBottle、AtkBottle、DefBoottle和ManaBottle四个子类继承Bottle。
同时由于引入冒险者死亡概念,增设Adventurer类里的一个函数checkDead()即可。需要注意的是:冒险者的hitPoint值不能为负;每个指令(aa除外)执行前都需要先检查有关冒险者是否死亡;对于use指令较为特殊,因为需要检查两个冒险者,如果都死亡的话需要判断一下他们的顺序。
第五次作业主要引入以下概念:
1.背包的数量限制。针对这一问题,改用LinkedHashSet来专门管理药水瓶,因为便于管理进入背包的顺序,同时对于装甲、武器两类装备的携带,在Adventurer里添加String型属性,用来管理携带的装甲和武器的名称,并专门设置方法来找到携带的装备的className。
2.装备细化。添加Armour、Sword和MagicBook作为Equipment的子类。
3.战斗系统。这个就比较复杂了,用ArrayList来管理被攻击的冒险者,并记录def的最大值,传入isfight函数,判断是否战斗成功,若成功则将被攻击者的hitPoint减去相应的值。
4.金钱系统。用factory。
第六次作业主要引入了雇佣关系,针对雇佣关系,在Adventurer里面新增几个属性:
private final ArrayList<Adventurer> directFollowers; //直系下属
private boolean hasBoss;
private boolean hasFollower;
再通过构造方法来实时获得直系下属和所有下属以及所有盟友即可。
第七次作业主要是lr这个指令,用到了递归下降解析,主要方法如下:
看到 ID → 调用 parseAdventurer
看到 ( → 调用 buildRelations
看到 , → 继续解析序列
看到 ) → 结束当前层级
以上合起来就是最终架构,在此不再赘述。
JUnit似乎是代码风格的另一种测试,需要保证覆盖率高的话就不得不需要打包一下了。
面向对象编程教会我一种新的思想:面向对象。在类里添加属性并构造方法,从而在main里new新对象,这是与C语言编程的一个很大的区别。
此外,这门课也教会我们怎样去开发项目,看到自己的代码一步步迭代到现在的一千多行(尤其是看到它强测全绿的时候)也是很有成就感的,hh~
总之是很有收获哒
建议只有一个,能不能把截止时间跟计组上机错开啊QAQ,不要周一晚截止哇,周一还有机组上机,孩子因为做oopre作业结果上机迟到了QAQ