有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何构造java程序?

很长一段时间以来,我一直在尝试用Java制作一个简单的“游戏”,它实际上只是一个带有正方形和网格的小程序。我希望它最终做的是用户单击,正方形将移动到用户单击的位置,四舍五入到最近的网格正方形

问题是我是一个自学成才的初学者,我很难弄清楚如何实际构建程序,例如:

  • 我应该有一个单独的班级听鼠标点击吗
  • 当我收到一个点击时,我应该把它发送给代表盒子的其他对象,让它决定它想要做什么,还是仅仅调用一些函数来移动盒子

我真的很想学习所有这些“什么时候使用什么”的东西为自己,所以任何链接或一般性的建议是感激的


共 (6) 个答案

  1. # 1 楼答案

    是的,我自己也是一个初学者。是的,在多个类之间分离功能是降低复杂性和增加单个类的内聚性的好方法

    增加内聚性很好,因为通过更复杂的数据结构,算法变得更简单,代码之间的依赖性也更小

    例如,在您的例子中,根据MVC(Model View Controler)分隔类可能是一个好主意

    • 你有一个模型,它代表了你的游戏数据的结构
    • 你有一个查看器,可以以你喜欢的任何形式呈现你的模型
    • 有一个控制器(通过侦听器)拾取模型中的更改,然后更新查看器

    现在,您可以更改模型并添加额外的功能,只需对查看器的工作方式进行微小的更改

    有很多Patterns在那里,但没有一个严格的规则,当使用一个超过另一个。在某些情况下,您可以使用多种设计模式,在某些情况下,您需要选择一种设计模式而不是另一种

  2. # 2 楼答案

    第1步-查找Sun提供的演示小程序http://java.sun.com/applets/jdk/

    2.阅读演示小程序。至少三个。最好是全部

    如果你读过几个小程序,你应该会更清楚地了解如何组织程序。然后,您可以针对特定的小程序示例和特定的编程问题提出更多的问题

  3. # 3 楼答案

    你真正想问的是如何开发一款游戏,它与典型的Java应用程序有着显著的不同。不过,我会给你一些想法,至少能为你指明正确的方向

    • 利用Java是一种面向对象的语言这一事实。也就是说,每个对象都应该有own responsibility
    • 将游戏分为三个关键层:应用层、游戏逻辑层和表示层

      • 应用层应该包含所有助手和通用子系统,比如随机数生成器、文本解析器、文件访问模块、网格加载程序等
      • 游戏逻辑层应该实现游戏的所有规则,并负责维护规范状态。基本上,当你按下键盘上的“W”键向前移动时,游戏逻辑层应该从UI接收MOVE_FORWARD_REQUEST
      • 表示层应该负责两件事:获取输入和渲染世界。当它得到输入时,比如“W”键,它应该将其映射到一个动作,并将其发送到游戏逻辑层进行处理。然后,它应该根据游戏逻辑告诉它做什么来呈现世界

    游戏开发显然是一个完整的领域,有很多专门的书籍。我最喜欢的游戏之一是Game Coding Complete,它的确关注C/C++,但它应该能让你很好地了解应该如何构建游戏

    祝你好运

  4. # 4 楼答案

    这里的一个问题是,所有规则都有一定的回旋余地,你必须使用自己的最佳判断

    例如,您现在描述的应用程序在我看来非常简单,我可能会在一个类中完成它,可能有几个嵌套的、可能是匿名的类。在任何情况下,我都可以提出一个合理的理由,将整个过程整合到一个源文件中,声称多个源文件实际上会增加整个过程的复杂性

    但是,如果你的GUI有很多不同的控件,也许每个控件都控制着不同的行为,那么现在就应该将功能拆分,这样你就不会得到一大碗意大利面代码

    JavaGUI库试图自然地将(视图+控制器)从模型中分离出来。我们鼓励您在一个模块(=文件)中定义和显示GUI,但在另一个模块中有您的数据模型和功能。对于复杂的GUI,也可能有多个GUI实现模块通过代码连接在一起

    保持事物“干净”的一种方法是在“层”中工作,其中每一层只“知道”它需要知道的东西。具体来说,GUI层需要知道其底层模型的存在——表和列表等不需要连接到TableModelListModel等。不过,它不需要知道这些模型的细节,所以它可以通过接口简单地引用这些模型

    另一方面,模型层不需要了解GUI。它知道的越少越好,从理论上讲,这将使您能够在不接触模型的情况下交换GUI

    我的模型还可以包含ActionListener来响应GUI中的按钮等操作

    当然,对模型的操作和更改通常会导致GUI的更改。如果模型层不知道GUI,如何将这些更改传达给GUI?您可以在这里使用绑定bean属性。这里有一个简短的教程:http://www.javalobby.org/java/forums/t19476.html。因此,您有相同的结构:模型中发生了更改,它们通过模型中的属性更改支持与bean通信,GUI可以将侦听器附加到这些属性,以发现更改的内容

    您是否在模型代码中执行实际有效的操作(例如,编写文件、转换数据等),或者是否将“处理”代码拆分为另一个模块,这取决于您的模型已经有多混乱。如果有一小撮字段和方法在其中感到孤独,您可能会决定将它们混合在一起,但当它开始看起来很混乱时,您会希望将处理代码重构到自己的模块中。处理听起来像是一种不想了解其他模块的模块;最终可能只是从模型级别调用它的方法

    我已经描述了我进行GUI开发的基本风格。当然还有其他建议,你很可能会根据自己的经验发展自己的风格。这只是为了给你一个想法和一个可能的起点

  5. # 5 楼答案

    好的软件开发的一个主要原则是Single Responsibility Priciple。它规定一个函数或类应该只有一个职责

    这样,你的类和对象就不会变得太大和难以管理

  6. # 6 楼答案

    我认为在开发软件时,最重要的概念之一就是Orthogonality。这不是最简单的定义,但本质上它意味着一个组件(比如读鼠标点击)不应该直接绑定到一个不相关的组件(在屏幕上移动一个方块)

    在您的情况下,读取代码的鼠标点击应该与实际移动框的代码分开。是否将其实现为内部/匿名类取决于您。但是如果你遵循正交原则,如果你改变主意,以后很容易改变