如果您的游戏比简单的迷宫或其他东西更复杂,您需要分离关注点。另一位评论者提到了 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/控制台。
这将根据您完成其他两个步骤的准确程度而发生很大变化,但我强烈建议您执行前面的步骤而不必担心您的交互。