123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- package ludo
- import (
- "fmt"
- "server/console"
- "server/msg"
- "time"
- )
- var wait_room map[int32]time.Time = make(map[int32]time.Time)
- var namesArray [10]string = [10]string{
- "Alice", "Bob", "Charlie", "David", "Eve",
- "Frank", "Grace", "Henry", "Ivy", "Jack",
- }
- func AddWaitRoomList(room_id int32) {
- wait_room[room_id] = time.Now()
- }
- func RemoveWaitRoomList(room_id int32) {
- delete(wait_room, room_id)
- }
- func StartMatchRobotTask() {
- // 创建每秒触发一次的定时器
- ticker := time.NewTicker(1 * time.Second)
- defer ticker.Stop() // 确保退出时释放资源
- for {
- select {
- case <-ticker.C:
- Scheduling()
- }
- }
- }
- func Scheduling() {
- for room_id, start_time := range wait_room {
- room_info := gameConfig.RoomMap[room_id]
- if room_info == nil {
- RemoveWaitRoomList(room_id)
- } else {
- if room_info.RoomStatus != msg.RoomStatus_AWAIT {
- RemoveWaitRoomList(room_id)
- } else {
- cur_time := time.Now()
- // 计算整数秒(直接截断小数部分)
- seconds := int(cur_time.Sub(start_time).Seconds())
- fmt.Printf("Scheduling seconds %d:\n", seconds)
- if seconds > 5 { //5秒还没匹配完成就给玩家匹配机器人
- room_info.RoomStatus = msg.RoomStatus_START
- lack_num := 0
- if room_info.RoomType == msg.RoomType_SHUANG_REN {
- lack_num = 2 - len(room_info.Colors)
- } else {
- lack_num = 4 - len(room_info.Colors)
- }
- addRobotsToRoom(room_info, lack_num)
- }
- }
- }
- }
- }
- func RemoveColorByColor(temp []msg.RoleType, color msg.RoleType) []msg.RoleType {
- result := make([]msg.RoleType, 0, len(temp))
- for _, item := range temp {
- if item != color {
- result = append(result, item)
- }
- }
- return result
- }
- func getRoomLackColor(room_info *msg.RoomInfo) msg.RoleType {
- var select_color msg.RoleType
- if room_info.RoomType == msg.RoomType_SHUANG_REN {
- if room_info.Colors[0].MColor == msg.RoleType_BLUE {
- select_color = msg.RoleType_GREEN
- } else {
- select_color = msg.RoleType_BLUE
- }
- } else if room_info.RoomType == msg.RoomType_SIREN_REN {
- var temp []msg.RoleType = make([]msg.RoleType, 4)
- temp = append(temp, msg.RoleType_BLUE)
- temp = append(temp, msg.RoleType_GREEN)
- temp = append(temp, msg.RoleType_RED)
- temp = append(temp, msg.RoleType_YELLOW)
- for i := 0; i < len(room_info.Colors); i++ {
- color_data := room_info.Colors[i]
- temp = RemoveColorByColor(temp, color_data.MColor)
- }
- console.Log("temp:", temp)
- if len(temp) > 0 {
- select_color = temp[0]
- }
- }
- return select_color
- }
- func addRobotsToRoom(room_info *msg.RoomInfo, num int) {
- console.Log("addRobotsToRoom:", num)
- for i := 0; i < num; i++ {
- matchInfo := &msg.MatchLudo{
- RoomLevel: room_info.RoomLevel,
- SelectRoomType: room_info.RoomType,
- SelectColor: getRoomLackColor(room_info),
- }
- robot_user_id := fmt.Sprintf("robot_%d", i)
- fmt.Printf("matchInfo:%v\n", matchInfo)
- isFullPlayer, err_info := JoinRoom(room_info, matchInfo, robot_user_id)
- if err_info == nil {
- if isFullPlayer {
- start_room := startGame(room_info)
- fmt.Printf("%v:匹配成功开始游戏!", start_room)
- NotifyRoomPlayerMatch(start_room)
- }
- }
- }
- }
- func getNewRobotPlayer(userId string, room_id int32) (*msg.UserInfo, error) {
- robot_player := &msg.UserInfo{
- UserId: userId,
- MCoin: getRandomRobotCoin(),
- MHead: getRandomRobotHead(),
- Name: getRandomRobotName(),
- RoomId: room_id,
- }
- return robot_player, nil
- }
|