C#服务端的微信小游戏——多人在线角色扮演(二)

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

C#服务端的微信小游戏——多人在线角色扮演(二)

任何一个具备人机交互的软件,无非就是解决输入、运算和输出三大问题,即,数据是什么,从哪里来,到哪里去。
——茂叔

一个打怪练级的游戏也不例外。

总体思路

简单的讲,就是我们要预设一个世界(World),然后里面有若干的空间,或者就2D游戏而言就是若干地图(Map),然后每个地图(Map)里面有一些内容(Object),这个世界里面各个空间的每个内容按照约定的方式运行,同时用户从客户端发起一些命令来控制某些内容,例如玩家角色,最后再将内容以一定的方式反馈呈现给用户。这样的流程如果一直循环下去,游戏就完成了。

服务端
世界
空间
空间
空间
客户端
输入
输出
接口
接口
循环运行机制
内容
内容
内容
用户

这么一看,是不是很简单?
所有复杂的事情都是由简单的事情构成的,所以善于分解问题,就没有复杂的事情了。

服务端

接下来,我们先世界该如何构成和运行呢?

首先,我们应该定义一个游戏类Game和一个世界类GameWorld,然后当然还有地图类GameMap,然后还有内容类GameObject。

Game类用来集中处理GameWorld与外界的交互,使得GameWorld可以在相对独立而封闭的状态下运行。外界只需要对Game类进行交互即可,不必考虑具体GameWorld是如何运转的;而GameWorld只需要提供一些方法给Game类,不必考虑外界交互的状态。这样规划的好处就是,我们编写和优化代码的时候考虑的范围会相对集中,而不至于四面挖坑,效率低下。

然后定义一个GameServer,用来处理客户端发来的请求,与Game类进行交互,根据客户端情况来反馈数据。

我们还需要一个运行在Windows服务端的监控界面,.Net提供了多种可视化界面的解决方案,直接把GameServer做成Windows Service当然比较方便,但是具体操作起来就不够直观。Console App当然是比较简单的,不过界面实在不是很友好,所以么,我们还是用个简单的Windows Forms App来解决,就叫GameMonitor吧。

为了避免所有操作都必须登服务器,我们还应该提供一个Web管理网站AdminWeb。这样可以随时随地对服务端进行操作。

好了,服务端主要就是这么几块了。
Game - 游戏类
GameWorld - 世界类
GameServer - 游戏服务类
GameMonitor - 服务器控制界面
AdminWeb - 远程控制界面

交互
本机管理
远程管理
交互
交互
交互
交互
管理员
用户
GameMonitor
AdminWeb
GameServer
Game
GameWorld

客户端

客户端相对而言要简单一些。主要就是完成数据传输、用户输入以及界面渲染三个功能。而微信小游戏的API提供了足够的支持来满足我们的需要。

首先,我们需要一个net.js来处理网络通信,毕竟是网游啊,兄嘚~
然后,用一个setTouch.js来处理用户输入,将用户的设备点击翻译为界面点击并启动相应的处理。
最后,用一个refresher.js来处理服务器轮询,将用户指令传递给服务端,并取回渲染界面所需要的数据。

客户端启动后调用小游戏API自动完成用户的注册和登录,直接与微信公众平台分配的openid绑定,授权这一块,就交给马化腾了,微信被黑了可别找我。
登录后立即启动refresher开始轮询并渲染界面,直到用户退出或网络断开。

主要就这么三块了。

net - 网络通信
setTouch - 输入处理
refresher - 轮询和渲染

调用
渲染信息
控制信息
交互
渲染界面
处理输入
用户
setTouch
refresher
net
服务端

通信方式

基于网络游戏的实时性,和微信小游戏所提供的能力,我们选择基于wss协议的WebSocket作为主要的客户端与服务端的交互协议。同时也提供基于https协议的WebApi非双工交互模式。
WebSocket主要用于需要较高传输效率的渲染信息传递,而WebApi主要是处理一些服务器不会主动下发的资料,例如从服务器取得最新的通告什么的……
对于AdminWeb管理端,还会用到WCF接口,用来完成管理端页面与GameServer之间的交互。

到此为止,我们大概有点清楚该如何下手了。
下一篇,我们将讨论如何开始写服务端代码,因为,废话,先写客户端容易懵逼好不好!

上一篇:C#服务端的微信小游戏——多人在线角色扮演(一)
下一篇:C#服务端的微信小游戏——多人在线角色扮演(三)

请用微信扫描查看游戏最终效果演示

演示入口

猜你喜欢

转载自blog.csdn.net/foomow/article/details/92080416