当前位置: 首页 > news >正文

【老白学 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(五)》
http://www.lryc.cn/news/493107.html

相关文章:

  • LLM之学习笔记(一)
  • C# 反射详解
  • pgadmin安装后运行不能启动界面的问题
  • 跳表(Skip List)
  • 前端实现把整个页面转成PDF保存到本地(DOM转PDF)
  • Vue 3 学习文档(一)
  • 【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配
  • 牛客周赛 Round 69(A~E)
  • Spring Boot 实战:分别基于 MyBatis 与 JdbcTemplate 的数据库操作方法实现与差异分析
  • 【jmeter】服务器使用jmeter压力测试(从安装到简单压测示例)
  • 使用Python实现自动化邮件通知:当长时程序运行结束时
  • 框架学习07 - SpringMVC 其他功能实现
  • NAT:连接私有与公共网络的关键技术(4/10)
  • RabbitMQ2:介绍、安装、快速入门、数据隔离
  • 衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录
  • 【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置
  • C++设计模式行为模式———策略模式
  • Spring Cloud 中 bootstrap.yml 配置文件详解
  • Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)
  • ASP网络安全讲述
  • DFS 创建分级菜单
  • HDU Go Running(最小点覆盖 + 网络流优化)
  • C++设计模式-中介者模式
  • 文件上传与下载服务 | Flask 实战
  • MySQL 中的排序:索引排序与文件排序
  • 深入理解React Hooks:使用useState和useEffect
  • AWS codebuild + jenkins + github 实践CI/CD
  • Android PMS(Package Manager Service)源码介绍
  • 运维面试整理总结
  • 图数据库 Cypher语言