面向人类的 Java 构建 GUI 格斗游戏}

面向人类的 Java 构建 GUI 格斗游戏}

原文:https://medium.com/hackernoon/java-for-humans-building-a-gui-fighting-game-2f8576fe1b44

View Table of Contents | Download Supporting Code| Subscribe to ModernNerd Youtube Channel for Coding Videos | By Lincoln W Daniel

恭喜你走到这一步。真,你完成了一项伟大的壮举。对你的最终测试是用 Java 开发你的第一个图形用户界面游戏。我已经为你开发了整个游戏,在这一章中,我会提到每个职业的目的。有了这些知识,你将能够从头开始重建整个项目。

用图形用户界面构建格斗游戏

如果你记得我们在抽象类和接口章节讨论的游戏,你会很高兴知道我们在游戏中使用了我们创建的角色类。我们将模仿“征服”MMORPG 游戏。在《征服》中,每个角色都有一个名字,一些特殊技能,一个宠物,健康,攻击力,防御力和说话能力。此外,每个用户可以选择他们想成为的角色类型。然而,有两种类型的角色,用户只能选择成为人类角色。人类角色可以有一个宠物角色。每个角色都在战斗,直到有一个胜利者。我们的游戏将模仿所有这些。

因为我们利用了多态、模型-视图-控制器编程模式和接口,所以应用程序很容易导航。我通过注释几乎每一行代码并为每个方法、类和接口提供 javadocs 详细记录了这个项目的源代码。也就是说,在这一章中,我不会花太多时间来解释该项目的代码库的复杂性。

本章支持代码的包名为“ buildingAGame ”。请打开它,让我们从更高的层面了解发生了什么。让我们看看游戏的 14 个类和一个界面,浏览每个类,看看我们如何应用我们在本书中积累的所有知识。

人物

我们游戏中最重要的部分是角色,因为没有他们就不会有很多动作。游戏中的每个玩家都是一个角色,所以我们有一个角色界面。任何打算创建一个模板来构造可以在我们的游戏中玩的角色的类都必须实现我们的角色接口。为了使实现更容易,我们有一个abstractabstract Character 类,它实现了 Character 接口的大多数通用方法。

AbstarctCharacter 类必须由任何打算创建模板的类来扩展,该模板用于构造可以在我们的游戏中玩的角色。AbstractCharacter 类实现了 Character 接口中除两个方法之外的所有方法。这意味着任何扩展我们的 AbstractCharacter 类的类只需要从 Character 接口实现 attack()train() 实例方法。我们将这两个方法留给子类来实现,因为直觉上不同类型的角色以不同的方式攻击和训练:弓箭手用箭攻击,战士用剑攻击,道家用魔法攻击。虽然每个角色都有不同的防御能力,但他们都以相同的方式防御——也许是举起武器阻挡即将到来的攻击。此外,有两种基本类型的字符,他们是非常不同的。因此,我们有两个抽象类来扩展 AbstractCharacter 类。

对于用户可以选择成为的人类角色,我们有抽象人类类,所有打算创建人类角色模板的类都必须从这个类扩展。Human 类是直接扩展 AbstractCharacter 类的两种方法之一。人类角色可以有宠物和人类朋友。除此之外,一个人类角色和其他角色非常相似。因此,与 Human 类唯一不同的字段是一个保存实例宠物的宠物实例字段和一个用于实例积累朋友的人类对象的 final LinkedList。朋友列表是最终的,因为我们希望我们的人类实例总是有一个朋友列表;它决不能被设置为空值或被意外替换。人类类的两个不同功能与设置获得朋友和宠物有关。弓箭手、火弓箭手、战士和道士是扩展人类职业的具体职业。同样重要的是要注意火射手是一种特殊类型的射手,它扩展了射手类。它唯一的区别是它额外的火力实例场增加了它的攻击力。

abstract Pet 类是另一个直接扩展 AbstractCharacter 类的类。所有打算创建一个构造宠物角色的模板的类都必须扩展为我们游戏中的有效游戏角色。pet 类唯一不同的字段是 Human instance 字段,用于存储实例的所有者。它唯一独特的方法是它的 cry() 实例方法,这是所有宠物发出特殊声音的接口;调用 cry() 狗可以叫,狮子可以吼。Dog 和 Lion 具体类是目前唯一扩展 Pet 类的类。

比赛

游戏很简单。用户为玩家选择最大数量的战斗。每次用户点击“下一场战斗”,下一场战斗就在两个角色之间开始——一个随机攻击者和一个随机防御者。攻击者试图对防御者造成伤害,只有防御者的防御力低于攻击者的攻击力时才会成功。谁赢得这场战斗,谁就获得经验。为了获得一个动作的经验,角色必须调用 gainExperience() 实例方法,并提供一个表示他们已经完成的动作的字符串作为参数。动作将被用作从 AbstractCharacter 类的action experiences staticHashMap 字段中获得相应数量经验的键。这样,所有的角色在完成相同的动作时都会获得相同的经验。

最后站着的人是游戏的赢家。这个游戏有一个字符串数组保存了每场游戏的获胜者历史。用户每次启动我们的应用程序时最多只能玩 100 个游戏,因为我们的历史数组有固定长度的一个元素。这只是为了说明一个数组的用法,如果你想让用户想玩多少次就玩多少次,可以把它改成一个 LinkedList。最后,游戏有一个图形用户界面(GUI ),每次我们的应用程序启动时,它都必须设置一次。

GameGUI

GUI 允许游戏实例向用户显示关于游戏状态及其玩家的实时信息;游戏类使用我们的 GameGUI 类来实现这个目的。如前所述,每个游戏实例必须有一个 GameGUI 类的实例才能运行。GameGUI 利用了 JavaFX ,它允许开发者创建比以往任何时候都更好的桌面、移动和网络应用,以在其视图中向用户显示来自相关游戏实例的信息。

我们的 GameGUI 目前设计有三个文本区用于显示游戏和游戏中正在进行的战斗的信息,一个文本区用于捕捉用户输入,一个列表视图用于显示游戏中所有角色的排名,一个按钮用于统计游戏,还有两个按钮用于在游戏中前进。设置所有这些内容有点复杂,但是当您阅读代码中的文档时,您将能够理解每个部分。

JavaFX 应用程序

我们的应用程序运行在 JavaFX 组件上,因为它的 GUI 和 JavaFX 提供的一个漂亮的抽象应用程序类很容易启动和启动应用程序。我们的 GUIGameApplication 类扩展了 JavaFX Application 类,是我们项目的基础。它的唯一职责是掌握我们项目的主要方法。它的 main 方法有一个简单的职责,就是从 Application 类中调用 launch()实例方法。当调用该方法时,它将从 Application 类中调用抽象 start() 实例方法来启动我们的应用程序。我们的 GUIGameApplication 必须实现 start() 方法,该方法允许我们访问应用程序的 primaryStage Stage 字段。我们必须为我们的游戏提供 primaryStage 参考,它将提供我们的 GameGUI 类的实例来显示我们游戏的 JavaFX GUI。

收尾工作

就这样,我们结束了。您已经了解了很多关于 Java 的知识。事实上,您已经知道了开始构建自己的 Java 应用程序所需要知道的一切。记住,最好的学习方式是边做边玩。您的下一步是玩我们的游戏,查看本章支持代码中的每个类,阅读文档,然后再次尝试编写整个项目。在那之后,试着建立你自己的游戏,或者在我们已经有的基础上再增加一些。你在路上了。在下一章中,我们将看看一些更有趣的项目,我们可以继续应用您对 Java 编程的新知识。

下一章

[## 人类的 Java 结论:有趣的项目和就业市场}

至此,您已经学习了所有您需要了解的 Java 知识,可以开始开发您自己的项目了……

medium.com](/p/6b83a037a9d4)

目录

[## 人类的 Java 目录}

我写这本书是为了教任何对计算机科学、软件工程有一点点兴趣的人…

medium.com](/p/457306e6bc1c)


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除