AI计时器整理

This commit is contained in:
meixiongfeng 2023-10-20 11:37:08 +08:00
parent 1ea7fb31bb
commit 86111c04ea
3 changed files with 44 additions and 32 deletions

View File

@ -20,7 +20,7 @@ func (this *apiComp) MatchCheck(session comm.IUserSession, req *pb.EntertainMatc
func (this *apiComp) Match(session comm.IUserSession, req *pb.EntertainMatchReq) (errdata *pb.ErrorData) {
// 随便找个在线的人
var (
bMatch bool
//bMatch bool
s2 comm.IUserSession
p1 *pb.PlayerData // 玩家1
p2 *pb.PlayerData // 玩家2
@ -57,7 +57,7 @@ func (this *apiComp) Match(session comm.IUserSession, req *pb.EntertainMatchReq)
// }
roomid = this.module.gameMgr.CreateRoom(session, s2, p1, p2)
session.SendMsg(string(this.module.GetType()), "match", &pb.EntertainMatchResp{
Maych: bMatch,
Maych: true,
Player: p2,
Roomid: roomid,
})

View File

@ -30,7 +30,7 @@ func (this *gameMgrComp) Init(service core.IService, module core.IModule, comp c
func (this *gameMgrComp) CreateRoom(s1 comm.IUserSession, s2 comm.IUserSession, p1 *pb.PlayerData, p2 *pb.PlayerData) (roomid string) {
room := new(Room) //初始化房间
room.InitRoom(this.module, s1, s2, p1, p2)
room = room.InitRoom(this.module, s1, s2, p1, p2)
this.lock.Lock()
this.rooms[room.Id] = room

View File

@ -100,6 +100,12 @@ func (this *Room) AiTimeOut(task *timewheel.Task, args ...interface{}) {
szMap = append(szMap, m...)
}
this.player2.Score += curScore
// 清理旧的计时器 开启一个新的
if this.operatetimer != nil {
timewheel.Remove(this.operatetimer)
}
this.operatetimer = timewheel.Add(time.Second*8, this.operateTimeOut) // 开启新的定时器
// 广播消息
if err := this.SendMsgToSession(string(this.module.GetType()), "operatorrst", &pb.EntertainOperatorRstPush{
Mpadata: szMap,
@ -125,33 +131,8 @@ func (this *Room) ReceiveMessage(session comm.IUserSession, stype string, msg pr
if session.GetUserId() != this.power { // 校验是不是你的权限
return
}
if this.power == this.player1.Uid { //权限校验
this.player1.Ps--
if this.player1.Ps <= 0 { // 权限给下一个人
this.power = this.player2.Uid
if len(this.szSession) == 1 { // 校验2号玩家是不是AI
// 起一个定时器
if this.aiTimer != nil {
timewheel.Remove(this.aiTimer)
}
this.operatetimer = timewheel.Add(time.Second*3, this.AiTimeOut)
}
this.round++
}
this.player2.Ps = MaxPs
} else if this.power == this.player2.Uid {
this.player2.Ps--
if this.player2.Ps <= 0 { // 权限给下一个人
this.power = this.player1.Uid
this.round++
}
this.player1.Ps = MaxPs
} else { // err 未知权限
return
if this.operatetimer != nil {
timewheel.Remove(this.operatetimer)
}
// 交换元素
this.chessboard.SwapGirde(req.Curid, req.Targetid) // 交换格子
@ -162,7 +143,7 @@ func (this *Room) ReceiveMessage(session comm.IUserSession, stype string, msg pr
curScore += score
szMap = append(szMap, m...)
}
this.player2.Score += curScore
//this.player2.Score += curScore
// 开启新的定时器
if this.operatetimer != nil {
timewheel.Remove(this.operatetimer)
@ -172,7 +153,33 @@ func (this *Room) ReceiveMessage(session comm.IUserSession, stype string, msg pr
session.SendMsg(string(this.module.GetType()), "operator", &pb.EntertainOperatorResp{
Success: true,
})
if this.power == this.player1.Uid { //权限校验
this.player1.Score += curScore
this.player1.Ps--
if this.player1.Ps <= 0 { // 权限给下一个人
this.power = this.player2.Uid
if len(this.szSession) == 1 { // 校验2号玩家是不是AI
// 起一个定时器
if this.aiTimer != nil {
timewheel.Remove(this.aiTimer)
}
this.aiTimer = timewheel.Add(time.Second*3, this.AiTimeOut)
}
this.round++
}
this.player2.Ps = MaxPs
} else if this.power == this.player2.Uid {
this.player2.Score += curScore
this.player2.Ps--
if this.player2.Ps <= 0 { // 权限给下一个人
this.power = this.player1.Uid
this.round++
}
this.player1.Ps = MaxPs
} else { // err 未知权限
return
}
// 广播消息
if err := this.SendMsgToSession(string(this.module.GetType()), "operatorrst", &pb.EntertainOperatorRstPush{
Mpadata: szMap,
@ -218,7 +225,12 @@ func (this *Room) StartGame() (errdata *pb.ErrorData) {
// 游戏结束
func (this *Room) GameOver() (errdata *pb.ErrorData) {
if this.aiTimer != nil {
timewheel.Remove(this.aiTimer)
}
if this.operatetimer != nil {
timewheel.Remove(this.operatetimer)
}
this.SendMsgToSession(string(this.module.GetType()), "gameover", &pb.EntertainGameOverPush{
User1: this.player1,
User2: this.player2,