Loading... **题目 :《保卫JAVA》塔防游戏程序设计** ## 一、基本信息 | 设计时间 | 2025.5.9-2025.6.10 | | -------------- | -------------------------------------------- | | 设计题目 | 《保卫JAVA》塔防游戏程序设计 | | Github开源地址 | https://github.com/LittleYanlin/Protect-Java | | 团队协作方式 | Git+Github | | 主要用到的库 | JFrame、Timer、Image、Toolkit等 | ## 二、需求分析 ### 2.1 课题设计问题分析 塔防游戏旨在让玩家通过布置防御塔,抵御一波又一波敌人的进攻,保护核心目标不被敌人摧毁。游戏需实现以下核心功能: **地图与场景**:创建可容纳防御塔和敌人移动的游戏地图,显示游戏场景。 **防御塔系统**:玩家可在地图指定位置建造、升级、出售防御塔,防御塔具备攻击范围、攻击力、等属性。 **敌人系统**:敌人按照预设路线移动,拥有生命值、移动速度、攻击目标等属性,成功抵达终点会对核心目标造成伤害。 **游戏进程控制**:控制敌人的刷新波次,随着波次推进,敌人数量和强度增加,设定游戏胜利和失败条件。 **用户交互**:提供界面让玩家进行建造、升级、出售、使用道具操作,显示游戏状态信息,如金币数量、剩余生命值等。 **技能设置** :玩家可以合理使用金钱,在适当的时候发动技能来帮助赢得游戏,增加了游戏的趣味性 ### 2.2 问题分解 **地图模块**:负责地图的创建、显示,以及防御塔可建造区域的判定。 **防御塔模块**:管理防御塔的建造、升级、出售逻辑,计算防御塔的攻击行为。 **敌人模块**:控制敌人的生成、移动、攻击和死亡逻辑。 **子弹模块**:控制子弹的位置、移动、伤害。 **技能模块**:设置技能的释放、伤害、范围。 **游戏控制模块**:协调各模块工作,控制游戏波次,判定游戏胜负。 **用户界面模块**:实现用户交互功能,展示游戏相关信息。 **图片设计模块:** 负责地图样式,敌人,子弹,特效等方面的制作,展现游戏特色。 ## 三、概要设计 ### 3.1 类的设计 **Panel** **类**:是所有面板的超类,继承自JPanel类,实现定时器(每秒刷新62.5次界面),添加了鼠标点击、移动监听器以及组件监听器(通过面板的显示与否来开始或停止计时器)其子类有:GamePanel(游戏面板类)、MenuPanel(菜单面板类)、StartPanel(开始面板类)、IntroductionPanel(游戏介绍面板类) **App类**:是程序的主入口,负责管理卡片布局、切换卡片、删除卡片等操作。 **Tower类**:是所有防御塔的超类,拥有攻击力、攻击范围、攻击速度、价格等属性,以及攻击敌人、升级、发射子弹等方法。 其子类有:ArrayTower(箭塔类)、MagicTower(法师塔类) **Enemy类**:表示敌人,包含生命值、移动速度、移动路线、攻击力等属性,以及移动、受到攻击、死亡等方法。 其子类有:PaoChe(炮车类)、XiaoBing(小兵类)、Boss(Boss类) **Player类**:存储玩家的金钱和生命值、有扣钱、加钱、扣血量等方法 **ImageGather类**:存储所有图片的集合,供其他类调用 **Bullet类**:表示子弹,包含子弹速度、移动路线、攻击力等属性,以及受到攻击等方法。 ### 3.2 类图(UML 图) ###  **图 1 程序UML图** ### 3.3 程序流程图与模块层次关系 #### **程序流程图**  **图 2 主要流程图** #### **模块层次关系**  **图 3 模块层次关系图** ## 四、详细设计 ### 4.1 数据类型具体实现 #### GamePanel为主要逻辑类 类 GamePanel 继承 Panel: 属性: player: Player towers: Tower[] enemies: List<Enemy> bullets: List<Bullet> 关卡地图、敌人波次、金钱、状态等 构造方法(cardSwitcher): 初始化各种游戏数据 设置定时器,每帧调用 updategame() 和 repaint() 方法 paint(g): 绘制背景、塔、敌人、子弹、按钮、金钱、血量等 方法 updategame(): 如果游戏未开始,直接返回 处理敌人生成(按波次、计时器) 检查金钱是否足够发动技能 处理技能效果(灭霸、冰冻等) 敌人移动,若到达终点则扣血 塔自动攻击范围内敌人 子弹移动并处理命中 敌人死亡奖励金钱 判断胜利或失败,弹窗提示并结束本关 方法 handleMouseClicked(e): 判断是否点击返回按钮,切换到菜单 判断是否点击塔位,进入建造/升级状态 判断是否点击建造/升级按钮,扣钱并建造/升级 判断是否点击开始按钮,开始新一波敌人 判断是否点击技能按钮,发动技能 方法 handleMouseMoved(e): 处理鼠标悬停高亮、按钮状态等 方法 enemiesNotSpawnSum(): 返回当前未生成敌人总数 ### 4.2 核心算法 #### **敌人移动算法**  **图 4 敌人移动算法示意图** #### **防御塔攻击算法**  **图 5 防御塔攻击算法示意图** #### **子弹追踪算法**  **图 6 子弹追踪算法示意图** ## 五、调试分析 ### 5.1 问题解决与回顾讨论 **问题**:在游戏初期,敌人移动出现路径偏移现象。 **解决**:检查发现是敌人移动速度计算和路径点更新逻辑存在问题,如果离转折点的距离小于速度的时候会导致敌人偏离设计的路线,之后我们重新优化路径计算算法,采用更精确的坐标计算和时间间隔控制,解决了偏移问题。 **问题**:防御塔攻击范围判定不准确,存在误判。 **解决**:修改距离计算方式,分别进行两次循环,第一次循环筛选出防御塔攻击范围内血量最低的敌人,第二次循环筛选出离java距离最近的对象进行攻击。 ## 六、用户使用说明 1. **启动游戏**:运行游戏程序,进入游戏主界面。 2. **建造防御塔**:在界面中点击 “建造” 按钮,选择想要建造的防御塔类型(),然后在地图可建造区域点击鼠标左键完成建造。建造需要消耗金币,若金币不足则无法建造。 3. **升级防御塔**:选中已建造的防御塔,点击 “升级” 按钮,若金币足够则可提升防御塔属性与外观。 4. **开始游戏**:点击 “开始” 按钮,敌人开始刷新并按照预设路线移动,用户可建造防御塔,防御塔自动攻击进入攻击范围的敌人。 5. **游戏道具:**点击“冰冻”,“灭霸”按钮,敌人会按照预设受到相应效果,用户可根据实际情况,合理运用道具。 6. **查看游戏状态**:界面上会实时显示金币数量、剩余生命值、当前波次等信息。 7. **游戏结束**:当核心目标(java)生命值降为 0 时,游戏失败;成功抵御所有波次敌人进攻,则游戏胜利。 ## 七、测试结果 | **编号** | **测试场景** | **输入操作** | **预期输出** | **实际输出** | **测试结果** | | -------- | -------------- | ------------------------------------------ | -------------------------------------------- | -------------------------------------------- | ------------ | | 1 | 初始游戏界面 | 启动游戏 | 显示完整游戏界面,金币、生命值等初始化 | 显示完整游戏界面,金币、生命值等初始化 | 通过 | | 2 | 建造防御塔 | 点击建造按钮,选择防御塔,在可建造区域点击 | 成功建造防御塔,金币减少 | 成功建造防御塔,金币减少 | 通过 | | 3 | 升级防御塔 | 选中已建造防御塔,点击升级按钮 | 防御塔属性提升,金币减少 | 防御塔属性提升,金币减少 | 通过 | | 4 | 敌人移动与攻击 | 开始游戏,等待敌人刷新和移动 | 敌人按路线移动,攻击核心目标,防御塔攻击敌人 | 敌人按路线移动,攻击核心目标,防御塔攻击敌人 | 通过 | | 5 | 道具使用 | 选择右下角道具,并选择释放位置 | 敌人按预期受到相应效果,减速或扣除一定血量 | 敌人按预期受到相应效果,减速或扣除一定血量 | 通过 | | 6 | 游戏胜利 | 成功抵御所有波次敌人进攻 | 显示游戏胜利界面 | 显示游戏胜利界面 | 通过 | | 7 | 游戏失败 | 核心目标生命值降为 0 | 显示游戏失败界面 | 显示游戏失败界面 | 通过 | ## 八、总结与收获 通过本次塔防游戏项目开发,对 Java 语言的面向对象编程特性有了更深刻的理解,学会了如何设计和实现类之间的关系,以及如何运用封装、继承、多态等特性优化代码结构。在项目开发过程中,掌握了从需求分析、设计到实现和测试的完整流程,提升了解决实际问题的能力。同时,认识到团队协作的重要性,通过合理分工和沟通,提高了项目开发效率。也意识到算法优化和代码质量的重要性,为今后的软件开发积累了宝贵经验。 ## 九、附录 代码目录: \>Bullet Bullet.java \>Enemy Enemy.java Boss.java PaoChe.java XiaoBing.java \>Game App.java CardSwicher.java \>Panel GamePanel.java IntroductionPanel.java MenuPanel.java Mission1.java Mission2.java Mission3.java Panel.java StartPanel.java \>Player ImageGather.java Player.java \>Tower ArrayTower.java MagicTower.java Tower.java 最后修改:2025 年 06 月 12 日 © 允许规范转载 赞 不用打赏哦!