golang制作一个斗地主游戏服务器[10]:房间、桌子、玩家

什么房间那些先暂时不管吧.最简单的方法就是先快速加入桌子,也不要准备了.加入就算自动准备,断线重连什么的也都不管,现在的目标就是先跑通流程

一个斗地主房间 (高级场 中级场 初级场, 通常是倍率不同) 里面有很多桌子

package mainimport "log"// TRoom 房间类 type TRoom struct { }// NewRoom 新建房间 func NewRoom() *TRoom { p := &TRoom{} return p }// QuickJoin 快速加入一张桌子 // pPlayer *TPlayer 玩家指针 func (self *TRoom) QuickJoin(pPlayer *TPlayer) bool { // 1 快速找到一个新桌子 pTable := FindEmptyTable() if pTable == nil { log.Println("没有空桌子了. 需要新建一个空桌子") pTable = NewTable() } // 桌子里加入个新玩家 pTable.playerJoin(pPlayer) // 如果桌子坐满了. 那么就开局 if pTable.isFull() { pTable.playing() } return true }


每个桌子可以“坐” 3个人,再来的人就是“站着”观战, 目前不考虑观战
// table.go // package mainimport ( "log" "sync" )var nTableAutoInc = 0// 自增的桌子ID var mpTableList sync.Map // 桌子列表 TTable// TTable 桌子类 type TTable struct { nIndexint// 桌子索引 bFullbool// 是否满了 pPlayerList[3]*TPlayer // 里面的玩家 nPlayerCount int ddz*TDDZ // 斗地主 }// NewTable 新建一个桌子 func NewTable() *TTable { nTableAutoInc++ nIndex := nTableAutoInc p := &TTable{} p.init() mpTableList.Store(nIndex, p) // 插入到队列中 return p }// FindEmptyTable 找一个空的桌子 func FindEmptyTable() *TTable { var pTable *TTable mpTableList.Range(func(k, v interface{}) bool { // 在这里判断每一个map里的桌子是否为空 if v.(*TTable).isEmpty() { pTable = v.(*TTable) return false } return true }) return pTable }// 桌子开始玩耍 func (self *TTable) playing() { go func() { log.Println("游戏正式开始")self.ddz = NewDDZ() log.Println("游戏正式结束") }() }// 假构造函数 func (self *TTable) init() { self.nPlayerCount = 0 }// 桌子是否满了 func (self *TTable) isFull() bool { return self.nPlayerCount >= 3 }// 桌子是否空的 func (self *TTable) isEmpty() bool { return self.nPlayerCount < 3 }// 桌子上加入一个新玩家 func (self *TTable) playerJoin(pPlayer *TPlayer) { self.nPlayerCount++ // 循环找空位插入 for i := 0; i < 3; i++ { if self.pPlayerList[i] == nil { self.pPlayerList[i] = pPlayer return } } }

玩家 目前就记录一个昵称就行。 剩下的就是玩家的客户端连接, 其他暂时都不要
package mainimport connection "github.com/266game/goserver/Connection"// TPlayer 玩家类 type TPlayer struct { NickName string// 昵称 Conn*connection.TConnection // 连接 }// NewPlayer 创建一个新玩家 func NewPlayer() *TPlayer { p := &TPlayer{} return p }

【golang制作一个斗地主游戏服务器[10]:房间、桌子、玩家】

    推荐阅读