Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在客户端和服务器之间共享代码以消除彼此之间的依赖关系_C#_Oop_Xna_Structure - Fatal编程技术网

C# 在客户端和服务器之间共享代码以消除彼此之间的依赖关系

C# 在客户端和服务器之间共享代码以消除彼此之间的依赖关系,c#,oop,xna,structure,C#,Oop,Xna,Structure,我正在用C#和XNA开发一个多人游戏,它由一个客户端和服务器项目组成。大部分代码是在客户机项目中生成的(服务器端验证仍在进行中),因此,服务器可执行文件要求客户机在运行时位于同一目录中。(这不是一个大问题,但对于应用程序来说有点不常见)这是因为服务器(GameName.server)引用了另一个项目中的GameName.Client命名空间 我认为合乎逻辑的想法是将代码分为3部分: 客户端(使用“共享”项目的呈现和特定于客户端的代码) 服务器(利用“共享”项目的服务器端逻辑) 共享/通用代码(例

我正在用C#和XNA开发一个多人游戏,它由一个客户端和服务器项目组成。大部分代码是在客户机项目中生成的(服务器端验证仍在进行中),因此,服务器可执行文件要求客户机在运行时位于同一目录中。(这不是一个大问题,但对于应用程序来说有点不常见)这是因为服务器(
GameName.server
)引用了另一个项目中的
GameName.Client
命名空间

我认为合乎逻辑的想法是将代码分为3部分:

  • 客户端(使用“共享”项目的呈现和特定于客户端的代码)
  • 服务器(利用“共享”项目的服务器端逻辑)
  • 共享/通用代码(例如:消息类型、块类型、实体类)
  • 目前(我对问题的长度表示歉意)我的(简化)结构布局如下:

    ├───Client
    │   ├───Entities
    │   ├──────Player.cs
    │   ├───Interface
    │   ├──────Window.cs
    │   ├───Networking
    │   ├──────MessageHandler.cs
    │   ├──────MessageType.cs
    │   ├──────LoginPacket.cs
    │   ├───World
    │   ├──────Map.cs
    │   ├──────TileTypes.cs
    ├───Server
    │   ├───MessageHandler.cs
    │   ├───Program.cs
    │   ├───Other Server Stuff, etc etc
    
    服务器需要能够在内部运行
    Map
    ,其中包含播放器和发送给客户端的块数组。如您所见,它的代码中不包含映射,而是在客户机项目中

    本例中的
    Map
    还包含在客户端绘制地图的渲染代码(服务器没有使用这些方法,但它仍然使用相同的
    Map
    类)


    我已经开始创建一个“共享”类库,客户端和服务器都可以使用它。许多东西,如消息类型、简单枚举、块属性等,都很容易在项目之间共享

    我的问题是
    Map
    Player
    类。它们都包含属性,例如(在地图的情况下)玩家列表。玩家列表可以在客户端和服务器端共享。但是,小地图之类的东西呢?服务器实际上不需要小地图,也不需要仅在客户端上显示地图所需的渲染代码

    我该怎么把班级分开呢?我的想法是使用接口或抽象类来处理基础(例如:玩家列表、当前状态、玩家位置),并让服务器和客户机根据需要实现自己的代码。(例如:客户端将实现绘制地图的方法,服务器可以实现查找发送消息所需的玩家ID的方法)

    我的问题是:如何有效地将代码与客户机和服务器分开,这样我只需编写一次,就可以实现两者的自定义功能,而无需相互依赖


    如果你想看得更清楚的话,我应该提到项目是。

    如果我正确理解了你的问题,那么在创建共享资源库和寻求继承以解决问题方面,你似乎走的是正确的道路。如果像Map或Player这样的类实际上在客户端和服务器实现中都有共同的功能,那么抽象类似乎是正确的选择。我知道我有一些项目有这样的共享功能,我们就是这样完成的