你如何构建一个java程序?

时间:2010-01-06 15:20:52

标签: java

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

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

  • 我应该有一个单独的课程来监听鼠标点击吗?
  • 当我收到点击时,我应该将其发送到代表该框的其他对象并让它决定它想要做什么,或者只是调用一些使该框移动的功能?

我真的想学习所有这些“何时使用什么”的东西,所以任何链接或一般建议都表示赞赏。

8 个答案:

答案 0 :(得分:7)

您真正要问的是如何开发游戏,这与典型的Java应用程序明显不同。但是,我会给你一些想法,至少指出你正确的方向。

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

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

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

祝你好运!

答案 1 :(得分:5)

良好的软件开发的一个主要原则是Single Responsibility Priciple。它声明一个函数或类应该只有一个责任。

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

这里的一个问题是,所有规则都有一些余地,你必须使用自己最好的判断。

例如,您现在描述的应用程序在我看来如此简单,我可能会在一个类中执行它,可能有几个嵌套的,也许是匿名类。无论如何,我可以将整个事物整合到一个源文件中,声称多个源文件实际上会增加整个事物的复杂性。

但是如果您的GUI有许多不同的控件,也许每个控件都控制着不同的行为,那么就可以将功能分开,这样您就不会得到一大堆意大利面条代码了。

Java GUI库尝试自然地将(视图+控制器)与模型分开。建议您在一个模块(=文件)中定义和显示GUI,但要将数据模型和功能放在另一个模块中。对于复杂的GUI,可能还有多个通过代码连接在一起的GUI实现模块。

保持“干净”的一种方法是在“层”中工作,其中每个层“只知道”它需要知道的内容。具体而言,GUI层需要知道其底层模型的存在 - 表和列表以及需要连接到TableModelListModel等的东西等。它不需要虽然知道这些模型的细节,但它可以通过界面简单地引用这些模型。

另一方面,模型层不需要了解GUI。知道的越少越好,理论上这将使您无需触摸模型即可交换GUI。

我的模型还可以包含ActionListener来响应例如按下GUI中的按钮。

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

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

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

答案 4 :(得分:1)

  

...用户点击并且方块将移动到用户点击的四舍五入到最近的网格方块。

这是在缩放视图中执行此操作的example

答案 5 :(得分:0)

第1步 - 找到Sun提供的演示applet。 http://java.sun.com/applets/jdk/

第2步 - 阅读那些演示小程序。至少三个。最好是全部。

你已经阅读了几个小程序,你应该更清楚地看到如何组织程序。然后,您可以更专注地提出问题,指出特定的applet示例和您的特定编程问题。

答案 6 :(得分:0)

是的,我自己是初学程序员。是的,在多个类之间隔离功能是降低复杂性和增加单个类的凝聚力的好方法。

提高内聚力是因为通过使用更复杂的数据结构,您的算法变得不那么复杂,而且您的代码对彼此的依赖性也会降低。

例如,在您的情况下,根据MVC(Model View Controler)分隔类可能是个好主意。

  • 您有一个代表游戏数据结构的模型。
  • 您有一个查看器,可以按您喜欢的形式展示您的模型。
  • 让控制器获取模型中的更改(通过监听器),然后更新查看器

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

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

答案 7 :(得分:0)

每个初级Java程序员都应该从Sun教程开始。他们非常好。

另一个好消息来源,尤其是免费消息来源,是Bruce Eckel的“Thinking in Java”,可从http://www.mindview.net/Books/TIJ/获得。

但后者与前者相比有点过时了。这就是我推荐两者的原因。