一、最终架构
1、最终框架
2、架构思路
Main
由于初期偷懒将输入解析放在了Main里,后续考虑不周仅将部分输入处理集成至Methods导致Main较为臃肿,要引以为戒。
Adv
在adventure拥有的物品存储方面我大量使用了HashMap。HashMap存储数据功能强大,用来储存取用adventure的bottle、equipment、food和hire(雇佣的adventure)都十分方便,而三个携带操作由于仅包含携带物品的id,我认为由建立新的ObjectInBag HashMap比单独创建Bag类再赋予Adv更方便故没有创建。特别是携带武器时使用HashMap<String,Equ>能无需其他操作直接实现同名武器仅携带最新的。
Bottle和Equipment
简单的继承即可轻松实现,还能顺手给Bot和Equ“瘦个身”,单独添加String标签无需对代码进行大幅改动。
Dairy和Store
将dairy和store选择放在一起来讲是由于两者有三个共性:1、全局仅一个;2、所有Adv都可能参与;3、参与者间有多类型互动。这也是我单独建立dairy和store而非给每个adv单独记录与其相关的战斗日志的原因。
Dairy
我对自己的Dairy代码较为满意,良好的扩展性与详尽的战斗日志让我在home_work7非常简单就完成了assist援助模块的添加
case 14:
System.out.println("Enter Fight Mode");
int m = input.nextInt();
int k = input.nextInt();
String[] participator = new String[m];
Dairy total = new Dairy();
for (int i = 0;i < m;++i) {
participator[i] = input.next();
}
total.read1(participator,advs);//读取战斗前HP
for (int i = 0;i < k;++i) {
dairy[dNum] = new Dairy();
dNum = dairy[dNum].writeDairy(input.next(),participator,advs,m, dNum);
}
total.read2(participator,advs);//读取战斗后HP
total.assist(m);//援助
break;
public class Dairy {
private int[] before = new int[1000]; //存储战斗前HP
private int[] after = new int[1000]; //存储战斗后HP
private Adv[] attend = new Adv[1000]; //存储所有参与者
private String time; //记录事件时间
public String getTime() {
return this.time;
}
private int mod; //事件种类
public int getMod() {
return this.mod;
}
private Adv host; //事件主人公(攻击发起者,喝药者)
public Adv getHost() {
return this.host;
}
private Adv attacked; //被单独攻击者
public Adv getAttacked() {
return this.attacked;
}
private Adv[] aoe = new Adv[1000]; //被AOE攻击者
public Adv[] getAoe() {
return this.aoe;
}
private String used; //使用的武器名
public String getUsed() {
return this.used;
}
private Equ equ; //使用武器数据
public Equ getEqu() {
return this.equ;
}
}
Store
Store开始并不存在商品,输入代码保证购买的一定是Adv卖出过的,故整个Store功能可以看作仅仅是增加了Adv_Cash数值变化的原“删除”现售卖功能,将售卖所得添加改为负数即为购买。
二、Junit心得体会
Junit测试代码是本科让我受益良多的一个项目,编写Junit测试代码能让同学们更好地理解自己的代码并发现自己构思初期的漏洞,从编写代码之前就能帮助大家规避一些bug。一个好的JunitTestCode能迅速反馈bug的位置与触发前提,相比一步步调试节省了大量时间。
三、OOpre心得体会
1、收获
首先是Java开发的经验,通过实践也算是初步掌握了Java语言。
其次是对Demo模块重要性的认识,Demo模块将输入进行单独处理,这不仅方便JunitTest的编写,也能保持一个清爽的Main,这对代码的可扩展性也有莫大意义。
最后最重要的是Junit测试教会我的“谋而后动”,面向对象顾名思义需要我们面向对象去开发项目,比开发更重要的是在开发前理清我们开发的代码应该具有的功能,应当如何实现这些功能,我们可能需要的能更加方便对象达成目的的功能。这也是本课我最大的收获。
2、遗憾
OO课程进度较快,我们没有时间开发一个能体现所有知识点都能很好地发挥的项目,为了追求更快完成任务没有思考比较各功能的优势与劣势,我的代码并没有用上接口与工厂等模式。
四、对OO课程的简单建议
1、提前Demo教学
希望未来的课程能提早输入解析模块的教程,一开始就教学输入解析Demo模块能更好地规范同学们的开发风格,也有助于后续通过Junittest,初期设置Demo对后续测试有很大帮助。