当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何才能最好地将OOP原则应用于游戏和其他输入驱动的GUI应用程序?》经验,为你挑选了1个好方法。

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

每个tile应该从JButton还是JComponent继承并处理绘图本身?

或者瓷砖是否应该存储为一些非图形的MinesweeperTile对象和其他一些类处理它们?

是8段显示倒数计时器(至少在Vista之前)是一个单独的类来处理绘图本身?

当用户点击时,瓷砖是否有鼠标事件监听器,或者是否有其他一些碰撞检测方法在瓷砖上循环并检查每个瓷砖以查看它是否被点击?

我意识到编写GUI应用程序不仅仅有一种方法,但是我可以开始做些什么非常基本的事情来使我的代码更有条理,更易于管理,面向对象,而且只是编写更好的程序?


编辑:我想我应该补充一点,我对MVC很熟悉,而且我原本打算将其纳入我的问题,但我想我不想把自己搞砸到MVC,如果那不一定是我需要的.我确实用GUI应用程序搜索了关于MVC的主题,但是没有找到任何能够回答我特定问题的内容.


edit2:感谢所有回答的人.我希望我能接受不止一个答案..



1> mbrodersen..:

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

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

然后创建一个单独的UI对象,该对象对Game对象一无所知.它完全独立,完全依赖于平台.它有自己的UIBoard,UITile,UITimer等,可以告诉它如何改变它的状态.UI对象负责用户界面(输出到屏幕/声音和用户输入).

最后,添加从UI对象读取输入的顶级Application对象,根据输入告知Game要做什么,由Game通知状态更改然后转向并告诉UI如何更新自身.

这是(顺便说一下)MVP(模型,视图,演示者)模式的适应.而且(顺便说一下)MVP模式实际上只是Mediator模式的一个特化.而且(顺便说一句哦)MVP模式基本上是MVC(模型,视图,控制)模式,其中View无法访问模型.这是一个很大的改进恕我直言.

玩得开心!

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有