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

本文关键字:最佳 方法 是什么 游戏 | 更新日期: 2023-09-27 18:32:01

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

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

一个充满用户控件的窗体,通过公共属性和管理器类公开其对象以处理"引擎"?可以使用什么样的设计模式?该游戏是SicBo的c#版本。

提前非常感谢

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

您已经完成了将接口与引擎分离的第一个关键步骤。通过将发动机和接口拆分为更小的组件,可以获得进一步的收益。例如输入控制器,渲染器,动画管理器,转弯系统,单位/卡/件或其他任何东西。

人们可以告诉你一些东西,但我的建议是不要潜入第一个游戏,期望得到正确的设计。计划改进您编写的每个游戏的设计,并从个人经验中学习。接受你的早期游戏会有糟糕的设计,这将使你更有效率。更重要的是保持节奏,不要陷入设计决策和思考模式的泥潭。一个代码混乱的成品游戏就是游戏。一个设计良好的游戏永远不会完成,但事实并非如此。我所知道的一些最有生产力的(业余)游戏开发者在他们最初的游戏中编写了可怕的代码。他们只是犁过它并完成了它。

如果你的游戏比简单的迷宫或其他东西更复杂,你会想要分开关注点。另一位评论者提到了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
}

现在,您拥有了可以操纵游戏状态的命令。如何设计这些将在很大程度上取决于您的模型方法(可变、不可变、包含内容更改事件等)

互动

现在,你有一个表示游戏状态的模型以及用于操作状态的工具。最后阶段是设计一种方法,通过该方法,用户可以开始使用该方法,即 UI/控制台。

这将发生很大变化,具体取决于您完成其他两个步骤的确切程度,但我强烈建议您执行前面的步骤,而不必担心您的交互。

也许您正在寻找 MVC 模式。我不是游戏开发人员,但这是应用程序的标准,我将其用于大多数项目。

有很多关于如何使用这种模式的资源。此链接将展示如何在游戏设计中专门使用它的示例。

MVC 模式将帮助您使用"管理器"将"引擎"与"用户控件"分开。

根据您的问题,听起来您已经这样做了......?为什么您对当前的解决方案不满意?