我的第一个机器人是作为一个大类文件编写的。 最初,这种方法效果很好,但是随着我在机器人中添加更多智能,它逐渐变得难以管理。 我很快意识到,如果我想与顶级机器人作战,我将不得不想出一个更好的设计。
我想出的解决方案是将机器人分解为可重复使用的模块化部件,每个部件管理着机器人行为的不同方面。 我每个人都创建了一个班级来控制运动,雷达,枪支和瞄准。 我创建了用于跟踪敌方机器人信息的类和用于存储所有敌方机器人信息的类。 紧接着其他课程。
我编写每个类的目的是使它们尽可能独立,因此我可以在不同的机器人中重用它们,或者更改主要机器人类的总体设计,而不必重写扫描,移动,瞄准和其他功能。
即使采用这种模块化设计,仍然有太多代码使主要的机器人类文件混乱。 很大一部分代码将各种模块简单地编织在一起,并且掩盖了机器人的实际操作。
解决方案? 我创建了一个名为AbstractBot
的Abstract机器人类,以隐藏编织代码,标准初始化和其他令人讨厌的细节。
AbstractBot
类具有几种有用的方法,这些方法可以简化雷达的操作,移动,目标选择,瞄准,发射等操作。 现在,无需编写代码来评估所有可能的目标,而是选择最佳目标,打开雷达,计算要使用的能量,确定要执行的动作等等,我只需扩展AbstractBot
类并编写类似以下代码:
EnemyBot target = pickTarget();
scan(target);
ram(target);
blast(target);
或像这样:
EnemyBot target = pickTarget();
scan(rammingBot);
evadeRam(rammingBot);
aimAndShoot(target);
很明显,机器人是做什么的,而不是如何做到的。 这些细节方便地隐藏在AbstractBot
和其他控制雷达,移动,目标选择,发射等的类中。 该代码更容易阅读,因此更容易更改。 任务完成。 现在我只需要专注于击败铁血战士!
翻译自: https://www.ibm.com/developerworks/java/library/j-tipreuse/index.html