C#服务端的微信小游戏——多人在线角色扮演(四)
时间、空间和物质,这就是宇宙的全部,让世界在你的服务器上运转起来吧。
——茂叔
GameServer的第一个工作。
在上一篇里,服务端的GameServer
启动后,并没有进行任何实际的工作,只是通知GameMonitor
它已经启动了。这个相当于我们上班打卡,然后在座位上补瞌睡……现在,让我们看看有什么活需要干吧。
首先,我们知道GameServer
的功能主要有三个:
- 让游戏跑起来
- 接受和处理客户端发过来的请求
- 把客户需要的信息发回客户端
现在我们先处理让游戏跑起来
的工作。后面两项工作将来配合客户端开发来一起完成。
所以,我们要有个Game
类对吧。
然后这个Game
类要可以创建一个空间,把控时间,调动空间里的物质。
好的,在VS方案里面创建一个新的项目,类型为Class Library(.NET Framework)
,命名为GameLib
,然后把自动生成的Class1
更名为Game
。
另外在新建一个用以保存全局信息的类G
,在G
里面定义一个静态成员GlobeTime
,这就是我们在游戏里面的时间了。游戏世界的任何动作都应该以这个时间为尺度。
对于世界上所有的内容,时间,都是平等的,不仅仅是在游戏里。
在游戏类创建的时候,将时间归零,一切从头开始……这个只有游戏里面可以做到。
接下来创建一个新的类GameWorld
这就是我们游戏世界的空间
因为我们是做的2D游戏,所以空间是由若干地图构成的,因此还需要一个GameMap
类。
另外再创建一个GameObject
这个是空间里的内容
有了全局的时间,Game
里面还必须有个GameWorld
,而GameWorld
里面有一堆GameMap
,然后GameMap
里面又有一堆GameObject
,所以,这几个类应该是这样的:
public class G
{
public static uint GlobeTime;
}
public class Game
{
private readonly GameWorld gWorld;
public Game()
{
G.GlobeTime = 0;
gWorld = new GameWorld();
}
}
class GameWorld
{
private readonly List<GameMap> gMaps;
public GameWorld()
{
gMaps = new List<GameMap>();
}
}
class GameMap
{
private readonly List<GameObject> gObjects;
public GameMap()
{
gObjects = new List<GameObject>();
}
}
class GameObject
{
public GameObject()
{
}
}
当游戏服务器GameServer
启动的时候,我们需要让游戏跑起来,那就需要访问Game
类,所以要为GameMonitor
项目添加引用GameLib
,右键选取GameMonitor
,选择添加
->引用
->‘工程’,然后给GameLib
打上勾勾,确定。再到GameServer
里面添加一行using GameLib;
就可以了。
给GameServer
增加一个成员private readonly Game gGame
,这个就是我们的游戏了。
在GameServer
的StartUp
方法里面,添加gGame.Run()
,这样游戏就跑起来了。VS会提醒gGame
没有Run
这个方法,没关系,选中Run然后alt+enter,选择自动生成一个就可以了。
GameServer.cs
里面:
public void StartUp()
{
if (Status == 0)
{
gGame.Run(