目录
一般来说,一款比较流行的斗地主游戏主要功能如下:
- 实现了最经典的斗地主玩法,叫地主抢地主等功能。
- 支持随机匹配模式,主动创建房间邀请微信好友模式两种。
这款《斗地主》游戏分为客户端和服务端两个部分,client 是使用 Egret 实现的,server 是使用 matchvs gameServer nodejs版实现。项目目录结构如下:
┌-client Egret实现的客户端代码
├-gs-server Matchvs gameServer nodejs 实现的服务端代码
├-matchvs Matchvs客户端SDK
├-wxshare 封装的微信小游戏接口
└-README
排行榜实现
Poker 排行榜实现方法如下:
client 上报分数到 gameServer,gameServer 再将分数上报给 Matchvs Rank System,Rank System 是通过gameID 和 userID 来计算用户排行数据,并不关心用户的 nickname 、avatar 等信息。 所以需要将 user information 另外的使用Matchvs Store System 存储系统保存。
接入描述
接入排行榜之前,可以先看看 Matchvs Rank System API Doc 描述了所有可使用的排行接口。gs-server 中主要使用到了 创建排行榜、上报分数、查询指定用户排行信息接口。
gs-server 使用的 axios 框架做 http 请求。在代码中有做好了排行榜接口的封装工作。在 gs-server/src
目录下可看到如下两个文件:
- gs-server/src/HttpRequest.js:对 axios 接口再次封装,使用 get、post、put、delete 等请求函数明确了Restful 接口请求方式。因为 Matchvs Rank API 严格按照 Restful 模式设置的。
- gs-server/src/ReportDataNew.js:排行榜数据上报接口,是对Matchvs Rank API 请求接口的封装, 把http 请求和 sign 签名都实现好了,只需要传入相应的参数即可。
排行榜接口 host 和 path
接口地址和对应请求 path 定义在 ReportDataNew.js 中,这个列出部分代码:
const rank_host = (GameData.Conf.DATA_STORAGE_ENV == 1 ? GameData.HttpApi.RELEASE_HOST : GameData.HttpApi.ALPHA_HOST); // 排行榜接口地址
const rank_config = "/rank/ranking_list_configs?"; // 排行榜配置
const rank_score = "/rank/scores?"; // 上传排行榜分数
const rank_snapshot = "/rank/snapshot?"; // 创建排行榜快照
const rank_grades = "/rank/grades?"; // 查询用户排行
const rank_list = "/rank/ranking_list?"; // 排版列表
const rank_delete = "/rank/ranking_list_configs?"; // 删除排行
创建排行榜
在 ReportDataNew.js 可以看到 CreatorRankConfig 函数,这个函数是请求 Matchvs Rank System 创建一个排行榜。该排行榜参数由用户设置,设置参数可参考 this.rankconfig 变量值:
class ReportDataNew{
......
constructor(){
this.rankconfig = {
gameID: this.gameID,
rankinglistName: "totlal_rank",
rankGist: "score",
sortOrder: 0,
updatePeriodType: 3,
customStartTime: 0,
customPeriod: