【老白学 Java】Warship v2.0(四)
Warship v2.0(四)
文章来源:《Head First Java》修炼感悟。
上一篇文章中,老白仔细分析了 v2.0 的设计思路以及实现手段,如果大家有好的设计方案也可以自行尝试。 本篇文章的主要内容是对 Warship 类进行最后的修改,增加了战舰名称变量 name
以及 Setter,用来显示被打掉战舰的名称。
项目进度:
- 解决 v1.0 遗留问题
- 分析 v2.0 的设计思路及实现技术
- 重新设计的 Warship 战舰类
- 更加专业的 WarshipManager 调度类
- 功能更强的 GameHelper 辅助类
任务三、重新设计的 Warship 战舰类
老白在介绍 ArrayList 数组列表时,曾对 Warship 类进行了替换数组的修改演示。 其实那时就已经接近最终版本了,只是还没有加入战舰名称的 Setter。 我们来看看 Warship 的完整代码:
/*** 文件:Warship.java* 描述:战舰类,主要提供名称设置、坐标设置以及攻击检测等功能。* 版本:v2.0*/// 引入包
import java.util.ArrayList;public class Warship {// 保存战舰名称private String name;// Setter,用来设置战舰名称public void setName(String name) {this.name = name;}// 用来保存战舰格子的位置列表private ArrayList<String> cellsLocation;// 设置战舰格子坐标的数组public void setCellsLocation(ArrayList<String> locs) {this.cellsLocation = locs;}// 检查玩家输入位置是否命中战舰,然后返回攻击结果public String returnFireResult(String userInput) {// 用于保存每次攻击的效果,默认为「未命中」String result = "miss";// 查询玩家输入的位置是否在列表中,如果不在列表中则返回 -1int index = cellsLocation.indexOf(userInput);// 如果索引值大于或者等于零,表示本次攻击命中,// 首先删除命中位置,然后检查列表是否为空if (index >= 0) {cellsLocation.remove(index);if (cellsLocation.isEmpty()) {result = "kill";System.out.println("Ouch, You sunk " + name + " !");} else {result = "hit";}}// 返回本次攻击结果return result;}
}
可以看到,Warship 类基本上没有太多改变,只是增加了战舰名称变量 name
以及它的 Setter:
// 保存战舰名称private String name;// Setter,用来设置战舰名称public void setName(String name) {this.name = name;}
这样,每艘战舰就会有自己的名字,如果有战舰「sunk」时,命令行窗口就会显示一条带有战舰名称的信息:
System.out.println("Ouch, You sunk " + name + " !");
代码很简单,老白不做过多解释,大家应该都会明白。 在下一篇文章中,我们会设计一个新类 WarshipManager,专门用于战舰调度,请保持关注。
《 上一篇 Warship v2.0(三) | 下一篇 Warship v2.0(五)》 |
---|