package catchbugs import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" "time" "google.golang.org/protobuf/proto" ) type Room struct { module *CatchBugs data *pb.DBCatchBugsRoom sessions []comm.IUserSession starttime time.Time round int32 handleplayer string currindex int32 } func (this *Room) GameStart() (err error) { this.starttime = configure.Now() if err = this.Broadcast("gameready", &pb.CatchbugsGameReadyPush{ ServicePath: fmt.Sprintf("%s/%s", this.module.service.GetType(), this.module.service.GetId()), Room: this.data, Countdown: 60, }); err != nil { this.module.Errorln(err) } return } func (this *Room) PlayerLoadEnd(uid string) (err error) { if uid == this.data.Red.Info.Uid { this.data.Red.Ready = true } else { this.data.Blue.Ready = true } if this.data.Rules.Headstart == 0 { this.handleplayer = this.data.Red.Info.Uid } else { this.handleplayer = this.data.Blue.Info.Uid } if this.data.Red.Ready && this.data.Blue.Ready { //两个人都准备了 if err = this.Broadcast("roundstart", &pb.CatchbugsRoundStartPush{ Round: this.round, Handleplayer: this.handleplayer, }); err != nil { this.module.Errorln(err) } } return } //玩家操作 func (this *Room) PlayerHandle(uid string, handle *pb.CatchbugsHandleReq) (err error) { if uid != this.handleplayer { err = fmt.Errorf("It's not your operation!") return } var ( issucc bool ) if this.data.Red.Info.Uid == uid { if this.data.Red.Lastopencard == 0 { this.data.Red.Lastopencard = handle.Index } else { if this.data.Card[this.data.Red.Lastopencard].Cid == this.data.Card[handle.Index].Cid { issucc = true this.data.Card[this.data.Red.Lastopencard].Isopen = true this.data.Card[handle.Index].Isopen = true this.data.Red.Cards = append(this.data.Red.Cards, this.data.Card[this.data.Red.Lastopencard].Cid) } } } else { if this.data.Blue.Lastopencard == 0 { this.data.Blue.Lastopencard = handle.Index } else { if this.data.Card[this.data.Blue.Lastopencard].Cid == this.data.Card[handle.Index].Cid { issucc = true this.data.Card[this.data.Red.Lastopencard].Isopen = true this.data.Card[handle.Index].Isopen = true this.data.Blue.Cards = append(this.data.Red.Cards, this.data.Card[this.data.Blue.Lastopencard].Cid) } } } if err = this.Broadcast("gameover", &pb.CatchbugsOpenCardPush{ Roomid: this.data.Rid, Index: handle.Index, Issucc: issucc, }); err != nil { this.module.Errorln(err) } return } //玩家操作 func (this *Room) PlayerHandleEnd(uid string, handle *pb.CatchbugsHandleEndReq) (err error) { if uid != this.handleplayer { err = fmt.Errorf("It's not your operation!") return } this.round++ if this.data.Red.Info.Uid == uid { this.handleplayer = this.data.Blue.Info.Uid } else { this.handleplayer = this.data.Red.Info.Uid } if err = this.Broadcast("roundstart", &pb.CatchbugsRoundStartPush{ Round: this.round, Handleplayer: this.handleplayer, }); err != nil { this.module.Errorln(err) } return } func (this *Room) Broadcast(stype string, msg proto.Message) (err error) { if err = this.module.SendMsgToSession(string(this.module.GetType()), stype, msg, this.sessions...); err != nil { this.module.Errorln(err) } return } //技能效果1 随机2x2的区域 旋转 func Skill1Effect(cards []*pb.DBCatchBugsCard) (ramdonCard []*pb.DBCatchBugsCard) { var ( cardsSlice []int32 ramdon int32 //随机点 x int32 y int32 offsetX, offsetY int32 ) for _, v := range cards { if !v.Isopen { cardsSlice = append(cardsSlice, v.Index) } } ramdon = cardsSlice[comm.RandShuffle(len(cardsSlice))[0]] x = ramdon % 4 y = ramdon / 4 offsetX = 1 if x == 3 { offsetX = -1 } offsetY = 1 if y == 6 { offsetY = -1 } ramdonCard = append(ramdonCard, cards[y*6+x]) ramdonCard = append(ramdonCard, cards[y*6+x+offsetX]) ramdonCard = append(ramdonCard, cards[(y+offsetY)*6+x+offsetX]) ramdonCard = append(ramdonCard, cards[(y+offsetY)*6+x]) index0 := ramdonCard[0].Index for i, v := range ramdonCard { if i < len(ramdonCard) { v.Index = ramdonCard[i+1].Index } else { v.Index = index0 } } return }