分享
  1. 首页
  2. 文章

LollipopGo开源游戏服务器框架--匹配模块更新

Golang语言社区 · · 1899 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

大家好,我是彬哥,本节给大家讲下LollipopGo游戏服务器match相关,抛砖引玉了,主要是针对Go语言游戏服务器对战匹配做了基础优化。

package match
import (
 "LollipopGo/LollipopGo/player"
 "LollipopGo/LollipopGo/util"
 "fmt"
 "time"
)
//------------------------------------------------------------------------------
var (
 Match_Chan chan *player.PlayerSt
 MatchData_Chan chan map[string]*RoomMatch
 Imax int = 0
 ChanMax int = 1000
 MatchSpeed = time.Millisecond * 500
 MatchData map[string]*RoomMatch
)
//------------------------------------------------------------------------------
type RoomMatch struct {
 RoomUID string // 房间号
 PlayerAOpenID string // A 阵营的OpenID
 PlayerBOpenID string // B 阵营的OpenID
 RoomLimTime uint64 // 房间的时间限制
 RoomPlayerMap map[string]*player.PlayerSt // 房间玩家的结构信息
}
//------------------------------------------------------------------------------
func init() {
 Match_Chan = make(chan *player.PlayerSt, ChanMax)
 MatchData = make(map[string]*RoomMatch)
 MatchData_Chan = make(chan map[string]*RoomMatch, ChanMax)
 go Sort_timer()
}
func Putdata(data *player.PlayerSt) {
 Match_Chan <- data
 return
}
func GetChanLength() int {
 Imax = len(Match_Chan)
 return Imax
}
func DoingMatch() {
 Imax = len(Match_Chan)
 icount := Imax
 Data := make(map[string]*player.PlayerSt)
 iicount := 1
 roomid := ""
 for i := 0; i < Imax; i++ {
 if icount == 1 {
 fmt.Println(Match_Chan, "等待匹配")
 // 30s 就剔除
 continue
 }
 if data, ok := <-Match_Chan; ok {
 fmt.Println(data)
 Data[util.Int2str_LollipopGo(i+1)] = data
 // 获取房间ID信息
 if iicount%2 == 1 {
 roomid = util.Int2str_LollipopGo(int(util.GetNowUnix_LollipopGo()))
 MatchData[roomid].PlayerAOpenID = data.OpenID
 }
 MatchData[roomid].RoomUID = roomid
 MatchData[roomid].RoomLimTime = 10
 MatchData[roomid].RoomPlayerMap[util.Int2str_LollipopGo(i+1)] = Data[util.Int2str_LollipopGo(i+1)]
 MatchData[roomid].PlayerBOpenID = data.OpenID
 if iicount%2 == 0 {
 iicount = 0
 MatchData_Chan <- MatchData
 }
 iicount++
 } else {
 fmt.Println("wrong")
 break
 }
 if icount >= 1 {
 icount--
 }
 }
 if len(Data) > 0 {
 fmt.Println("-------", Data)
 }
}
func Sort_timer() {
 timer := time.NewTimer(MatchSpeed)
 for {
 select {
 case <-timer.C:
 {
 DoingMatch()
 }
 }
 }
}

社区交流群:221273219
Golang语言社区论坛 :
www.Golang.Ltd
LollipopGo游戏服务器地址:
https://github.com/Golangltd/LollipopGo
社区视频课程课件GIT地址:
https://github.com/Golangltd/codeclass


Golang语言社区

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Golang语言社区

查看原文:LollipopGo开源游戏服务器框架--匹配模块更新

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1899 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏