设计这种c#游戏的最佳方法是什么?

时间:2013-09-19 10:40:27

标签: c# .net winforms design-patterns game-engine

我正在开发一个单一形式的c#游戏,它由许多用户控件,信用面板,游戏动作历史面板等组成。 我开发了一个Manager类来将Interface与“游戏引擎”分开,这个Manager类负责所有游戏逻辑。但我对我的解决方案不满意。

所以这里有一个问题,对于这种情况最好的方法是什么?

一个充满用户控件的表单通过公共属性公开其对象,还有一个Manager类来处理“引擎”?可以使用什么样的设计模式?游戏是SicBo的c#版本。

非常感谢提前

3 个答案:

答案 0 :(得分:2)

您已经完成了将界面与引擎分离的第一个关键步骤。通过将发动机和接口分成较小的部件可以进一步获得。例如,输入控制器,渲染器,动画管理器,转弯系统,单位/卡/件等等。

人们可以告诉你一些事情,但我的建议是不要潜入第一款希望设计正确的游戏。计划通过您编写的每个游戏改进设计并从个人经验中学习。接受你的早期游戏会有糟糕的设计会让你更有效率。保持节奏更重要,不要陷入设计决策和思考模式。一个混乱的代码完成的游戏是一个游戏。一个从未完成的精心设计的游戏不是。我所知道的一些最富有成效(业余)的游戏开发者在他们最初的游戏中编写了可怕的代码。他们只是通过它完成了它。

答案 1 :(得分:1)

如果您的游戏比简单的迷宫或其他东西更复杂,您会想要分开关注点。另一位评论者提到了MVC。我也推荐这个建议(虽然有经验的游戏开发者肯定会有更合适的方法)。

我将通过几个步骤来处理它:模型操纵交互

模型

首先,考虑一下你将允许你的游戏进入的状态。例如,在国际象棋中,有一个包含8x8平方位置,两个玩家和属于 必须占用未占用方格的播放器。因此,您的第一步是考虑如何模拟游戏所允许的状态:

interface IChessGame
{
    IPlayer PlayerA { get; }
    IPlayer PlayerB { get; }
    IChessBoard ChessBoard { get; }
}
// Etc etc.

那部分是非常基础的。模型的稳健性将对实施后续步骤的容易程度产生很大影响。

操纵

接下来,考虑一下你的游戏,应用程序等状态如何操纵。这些最终将成为你命令的组成部分。举一个静态的例子:

static IChessGame MovePiece(IChessGame oldState, IChessPiece chessPiece, int[,] newLocation)
{
    // Check the chess piece.
    // See if the new coordinates are allowed for that piece.
    // Deal with any collisions (e.g. if an opponents piece is in the square then kill it, if it's your piece then block the move, etc.)
    // Generate a new, allowed, state
}

现在你有了可能操纵游戏状态的命令。你如何设计这些将取决于严重你的模型方法(可变,不可变,包含contentChanged事件等)

相互作用

现在你有一个模型代表游戏的状态操纵该状态的工具。最后一步是设计一种方法,您的用户可以通过该方法开始使用它,即UI /控制台。

这会根据您完成其他两个步骤的具体情况而有所改变,但我强烈建议您执行前面的步骤,不要担心您的互动。

答案 2 :(得分:0)

也许您正在寻找 MVC模式。我不是游戏开发者,但这是应用程序的标准,我在大多数项目中使用它。

关于如何使用此模式有很多资源。 This link will show an example如何在游戏设计中使用它。

MVC模式将帮助您使用“经理”将“引擎”与“用户控件”分开。

基于你的问题,听起来你已经这样做了吗?为什么你对目前的解决方案不满意?