我一直在为我的游戏编写服务器代码。它工作得非常好,但 90% 的功能都属于 1 类。
通常我发现很容易知道如何划分事物。每个对象都是一个类,或者每个对话框都是一个类并为其子级处理逻辑。
在这种情况下,服务器收到一个请求,然后要么告诉其他玩家,要么处理并通知适当的玩家。
这是头文件:
class ServerCore : public ServerHost, public NetEventListener,
public ServerEventProvider
{
NetEventDecoder m_dec;
NetEventEncoder m_enc;
LoginManager m_login;
ServerPlayerManager m_playerMan;
ServerTableManager m_tableMan;
void sendToTarget();
void sendToAllActive();
void sendToActiveNotTarget();
void sendToTable(int tableNo);
public:
ServerCore();
virtual void onConnect (Lacewing::Server::Client &client);
virtual void onDisconnect (Lacewing::Server::Client &client);
virtual void onError (Lacewing::Error &error);
virtual void onReceive (Lacewing::Server::Client &client, char * data, int size);
virtual void sendChatMessageC(const std::string& message,ChatAreaEnum area);
virtual void requestTableC(int tableNo, int seatNo);
virtual void playerRequestSitC(int tableNumber, int seatNumber);
virtual void playerStoodUpC();
virtual void hostGameC(const SpadesGameInfo& info);
virtual void gameMessageC(SpadesCSMessageEnum message, const std::vector<int>& params);
virtual void modifyListC(const std::string& player, GroupTypeEnum group, bool add);
virtual void canceledHostingRequestC();
virtual void sendInviteC(int tableNo, const std::string& player);
virtual void loginResult(const std::string& name, ServerPlayer* player,
const std::string& sessionID, bool success, bool newSession);
virtual void readyToReceiveLobbyDataC();
virtual void playerAbandonedGameC();
virtual void watchTableC(int tableNo);
virtual void gameCompleted(int tableId);
virtual void playerWantsPlayAgainC();
virtual ~ServerCore(void);
};
}
我真的不知道如何将其分解为较小的班级。他们执行的任务被交给其他对象,例如身份验证和从数据库中检索数据,但所有事件当前都在这个 1 文件中处理。
网络事件解码器在从通过网络接收的字符串转换之后调用适当的方法。
这样做效果很好,但游戏会变得更大,我想保持干净和模块化。
这个设计是个好主意吗?如果不是,那么在游戏服务器开发中通常使用什么类型的模式来使事情更加面向对象?
谢谢