gpt4 book ai didi

java - 如何最好地将 OOP 原则应用于游戏和其他输入驱动的 GUI 应用程序?

转载 作者:行者123 更新时间:2023-12-03 02:41:37 24 4
gpt4 key购买 nike

每当我尝试编写图形程序(无论是游戏还是任何 GUI 应用程序)时,我总是会遇到一两个具有太多方法(而且方法也很长)的上帝类,并且每个类都有太多方法责任。我在计算和逻辑的同时完成图形,我觉得这是组织代码的一种非常糟糕的方式。我想更好地组织我的代码并将职责抽象到不同的类。这是我想开始的一个例子 - 我想编写一个扫雷克隆,只是作为练习并尝试提高我的软件工程技能。我该如何让它变得漂亮并且面向对象?为了便于讨论,我们假设我正在使用 Java(因为我可能会使用 Java 或 C#)。以下是我会考虑的一些事情:

  • 每个图 block 是否应该继承自 JButton 或 JComponent 并自行处理绘制?
  • 或者这些图 block 是否应该存储为一些非图形的 MinesweeperTile 对象,并由其他一些类来处理它们的绘制?
  • 8 段显示倒计时器(至少在 Vista 之前)是一个单独的类来处理绘图本身吗?
  • 当用户点击时,图 block 是否有鼠标事件监听器,或者其他碰撞检测方法是否循环遍历图 block 并检查每个图 block 以查看是否已被击中?

我意识到编写 GUI 应用程序的方法不只有一种,但是我可以开始做一些非常基本的事情来使我的代码更有组织性、更易于管理、面向对象,并且总体上编写出更好的程序?

<小时/>

编辑:我想我应该补充一点,我熟悉 MVC,我最初打算将其合并到我的问题中,但我想我不想把自己硬塞进 MVC,如果这不一定是我需要的。我确实搜索了有关带有 GUI 应用程序的 MVC 的主题,但没有真正找到任何可以回答我的具体问题的内容。

<小时/>

edit2:感谢所有回答的人。我希望我能接受多个答案..

最佳答案

这是一个简单(但有效)的面向对象设计,可以帮助您入门:

首先创建一个纯 Java/C# 代码的 Game 对象。没有 UI 或任何其他特定于平台的内容。 Game 对象处理 Board 对象和 Player 对象。 Board 对象管理许多 Tile 对象(地雷所在的位置)。 Player 对象跟踪“回合数”、“得分”等。您还需要一个 Timer 对象来跟踪游戏时间。

然后创建一个单独的 UI 对象,它不知道有关 Game 对象的任何信息。它是完全独立的并且完全依赖于平台。它有自己的 UIBoard、UITile、UITimer 等,并且可以被告知如何更改其状态。 UI 对象负责用户界面(输出到屏幕/声音以及用户输入)。

最后,添加顶级应用程序对象,该对象从 UI 对象读取输入,告诉游戏根据输入做什么,由游戏通知状态更改,然后告诉 UI 如何更新本身。

(顺便说一句)这是 MVP(模型、 View 、演示者)模式的改编。 (哦顺便说一下)MVP 模式实际上只是中介者模式的特化。 (顺便说一句)MVP 模式基本上是 MVC(模型、 View 、控制)模式,其中 View 无法访问模型。恕我直言,这是一个很大的进步。

玩得开心!

关于java - 如何最好地将 OOP 原则应用于游戏和其他输入驱动的 GUI 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/380046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com