fixed problem in pong handler

This commit is contained in:
2020-03-20 12:52:31 +08:00
parent 46ab36ca96
commit 60a1a2d84a
3 changed files with 86 additions and 97 deletions
+80 -96
View File
@@ -105,11 +105,84 @@ func (m *MahjongManager) Draw(tableOrder int) {
}
func (m *MahjongManager) handleDiscard(msg message.GameMsgRecv) {
//currentOrder := msg.TableOrder
currentOrder := msg.TableOrder
m.lastTableOrder = msg.TableOrder
//从手牌中删除
hand := m.playerTile[msg.TableOrder].HandTiles
m.playerTile[msg.TableOrder].HandTiles = model.RemoveTile(hand, msg.Tile, 1)
// 检查是否有人胡牌
for i := 1; i <= 3; i++ {
hand := m.playerTile[(currentOrder+i)%4].HandTiles
shown := m.playerTile[(currentOrder+i)%4].ShownTiles
if m.rules.CanWin(hand, shown, msg.Tile) {
//send msg to this potential winner
msgSend := message.GameMsgSend{
MsgType: -1,
TableOrder: -1,
CurrentTurn: (currentOrder + i) % 4,
CurrentTile: msg.Tile,
AvailableActions: []int{message.Win},
LastTurn: msg.TableOrder,
LastAction: message.Discard,
PlayerTile: m.playerTile,
WallCount: m.wall.Length(),
}
m.gameSendCh <- msgSend
return
}
}
// 检查是否有人碰、杠
for i := 1; i <= 3; i++ {
hand := m.playerTile[(currentOrder+i)%4].HandTiles
if m.rules.CanExposedKong(hand, msg.Tile) {
msgSend := message.GameMsgSend{
MsgType: message.GameMsgType,
TableOrder: -1,
CurrentTurn: (currentOrder + i) % 4,
CurrentTile: msg.Tile,
AvailableActions: []int{message.Pong, message.ExposedKong},
LastTurn: msg.TableOrder,
LastAction: message.Discard,
PlayerTile: m.playerTile,
WallCount: m.wall.Length(),
}
m.gameSendCh <- msgSend
return
}
if m.rules.CanPong(hand, msg.Tile) {
msgSend := message.GameMsgSend{
MsgType: message.GameMsgType,
TableOrder: -1,
CurrentTurn: (currentOrder + i) % 4,
CurrentTile: msg.Tile,
AvailableActions: []int{message.Pong},
LastTurn: msg.TableOrder,
LastAction: message.Discard,
PlayerTile: m.playerTile,
WallCount: m.wall.Length(),
}
m.gameSendCh <- msgSend
return
}
}
// 检查是否有人吃
nextHand := m.playerTile[(currentOrder+1)%4].HandTiles
if m.rules.CanChow(nextHand, msg.Tile) {
msgSend := message.GameMsgSend{
MsgType: message.GameMsgType,
TableOrder: -1,
CurrentTurn: (currentOrder + 1) % 4,
CurrentTile: msg.Tile,
AvailableActions: []int{message.Chow},
LastTurn: msg.TableOrder,
LastAction: message.Discard,
PlayerTile: m.playerTile,
WallCount: m.wall.Length(),
}
m.gameSendCh <- msgSend
return
}
// 都没有
// 加入打牌区
dropTile := m.playerTile[msg.TableOrder].DropTiles
@@ -133,100 +206,6 @@ func (m *MahjongManager) handleDiscard(msg message.GameMsgRecv) {
}
m.gameSendCh <- msgSend
// end
//// 检查是否有人胡牌
//for i := 1; i <= 3; i++ {
// hand := m.playerTile[(currentOrder+i)%4].HandTiles
// shown := m.playerTile[(currentOrder+i)%4].ShownTiles
// if m.rules.CanWin(hand, shown, msg.Tile) {
// //send msg to this potential winner
// msgSend := message.GameMsgSend{
// MsgType: -1,
// TableOrder: -1,
// CurrentTurn: (currentOrder + i) % 4,
// CurrentTile: msg.Tile,
// AvailableActions: []int{message.Win},
// LastTurn: msg.TableOrder,
// LastAction: message.Discard,
// PlayerTile: m.playerTile,
// WallCount: m.wall.Length(),
// }
// m.gameSendCh <- msgSend
// return
// }
//}
//// 检查是否有人碰、杠
//for i := 1; i <= 3; i++ {
// hand := m.playerTile[(currentOrder+i)%4].HandTiles
// if m.rules.CanExposedKong(hand, msg.Tile) {
// msgSend := message.GameMsgSend{
// MsgType: message.GameMsgType,
// TableOrder: -1,
// CurrentTurn: (currentOrder + i) % 4,
// CurrentTile: msg.Tile,
// AvailableActions: []int{message.Pong, message.ExposedKong},
// LastTurn: msg.TableOrder,
// LastAction: message.Discard,
// PlayerTile: m.playerTile,
// WallCount: m.wall.Length(),
// }
// m.gameSendCh <- msgSend
// return
// }
// if m.rules.CanPong(hand, msg.Tile) {
// msgSend := message.GameMsgSend{
// MsgType: message.GameMsgType,
// TableOrder: -1,
// CurrentTurn: (currentOrder + i) % 4,
// CurrentTile: msg.Tile,
// AvailableActions: []int{message.Pong},
// LastTurn: msg.TableOrder,
// LastAction: message.Discard,
// PlayerTile: m.playerTile,
// WallCount: m.wall.Length(),
// }
// m.gameSendCh <- msgSend
// return
// }
//}
//// 检查是否有人吃
//nextHand := m.playerTile[(currentOrder+1)%4].HandTiles
//if m.rules.CanChow(nextHand, msg.Tile) {
// msgSend := message.GameMsgSend{
// MsgType: message.GameMsgType,
// TableOrder: -1,
// CurrentTurn: (currentOrder + 1) % 4,
// CurrentTile: msg.Tile,
// AvailableActions: []int{message.Chow},
// LastTurn: msg.TableOrder,
// LastAction: message.Discard,
// PlayerTile: m.playerTile,
// WallCount: m.wall.Length(),
// }
// m.gameSendCh <- msgSend
// return
//}
//// 都没有
//// 加入打牌区
//dropTile := m.playerTile[msg.TableOrder].DropTiles
//m.playerTile[msg.TableOrder].DropTiles = append(dropTile, msg.Tile)
////为下一位玩家发牌
//m.lastTableOrder = msg.TableOrder
//m.currentTableOrder = (msg.TableOrder + 1) % 4
//newTile := m.wall.FrontDraw()
//m.playerTile[m.currentTableOrder].HandTiles = append(m.playerTile[m.currentTableOrder].HandTiles, newTile)
//model.SortTiles(m.playerTile[m.currentTableOrder].HandTiles)
//msgSend := message.GameMsgSend{
// MsgType: message.GameMsgType,
// TableOrder: -1,
// CurrentTurn: (msg.TableOrder + 1) % 4,
// CurrentTile: model.Tile{},
// AvailableActions: []int{message.Discard},
// LastTurn: msg.TableOrder,
// LastAction: message.Discard,
// PlayerTile: m.playerTile,
// WallCount: m.wall.Length(),
//}
//m.gameSendCh <- msgSend
}
func (m *MahjongManager) handleChow(msg message.GameMsgRecv) {
@@ -279,11 +258,14 @@ func (m *MahjongManager) handleChow(msg message.GameMsgRecv) {
// handlePong收到碰的消息,通知每个玩家,并等待该玩家发出打牌的消息
func (m *MahjongManager) handlePong(msg message.GameMsgRecv) {
m.lastTableOrder = m.currentTableOrder
m.currentTableOrder = msg.TableOrder
hand := m.playerTile[msg.TableOrder].HandTiles
shown := m.playerTile[msg.TableOrder].ShownTiles
// 更新明牌
m.playerTile[msg.TableOrder].ShownTiles = append(shown, model.ShownTile{
ShownType: model.Pong,
ShownType: message.Pong,
Tiles: []model.Tile{msg.Tile, msg.Tile, msg.Tile},
})
// 更新手牌
@@ -305,6 +287,8 @@ func (m *MahjongManager) handlePong(msg message.GameMsgRecv) {
}
func (m *MahjongManager) handleExposedKong(msg message.GameMsgRecv) {
m.lastTableOrder = m.currentTableOrder
m.currentTableOrder = msg.TableOrder
// 更新手牌和明牌
hand := m.playerTile[msg.TableOrder].HandTiles
shown := m.playerTile[msg.TableOrder].ShownTiles
+4 -1
View File
@@ -2,4 +2,7 @@ module github.com/c-my/MahjongServer
go 1.14
require github.com/gorilla/websocket v1.4.1
require (
github.com/gorilla/mux v1.7.4
github.com/gorilla/websocket v1.4.1
)
+2
View File
@@ -1,2 +1,4 @@
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=