xy il y a 1 semaine
Parent
commit
c91990549f
2 fichiers modifiés avec 52 ajouts et 15 suppressions
  1. 23 0
      src/server/game/ludo/battle_manager.go
  2. 29 15
      src/server/game/ludo/ludo_room_data.go

+ 23 - 0
src/server/game/ludo/battle_manager.go

@@ -62,3 +62,26 @@ func getRandomRobotCoin() int32 {
 	}
 	return int32(n.Int64()) + 1000
 }
+
+func GetNextRole(currentRole msg.RoleType) msg.RoleType {
+	// 定义角色顺序
+	roleOrder := []msg.RoleType{
+		msg.RoleType_GREEN,
+		msg.RoleType_YELLOW,
+		msg.RoleType_BLUE,
+		msg.RoleType_RED,
+	}
+
+	// 查找当前角色在顺序中的位置
+	for i, role := range roleOrder {
+		if role == currentRole {
+			// 如果是最后一个角色,返回第一个角色(循环)
+			if i == len(roleOrder)-1 {
+				return roleOrder[0]
+			}
+			return roleOrder[i+1]
+		}
+	}
+
+	return msg.RoleType_ROLE_TYPE_UNKNOWN
+}

+ 29 - 15
src/server/game/ludo/ludo_room_data.go

@@ -99,28 +99,42 @@ func (room_info *RoomInfoWrapper) findNextColor() msg.RoleType {
 	cur := room_info.CurRoundColor
 	colors := room_info.getColors()
 
-	i := roleIndexOf(colors, room_info.getColorDataByColor(cur))
-	if i == (len(colors) - 1) {
-		i = 0
-	} else {
-		i = (i + 1)
-	}
+	if room_info.RoomType == msg.RoomType_SHUANG_REN {
+		i := roleIndexOf(colors, room_info.getColorDataByColor(cur))
+		if i == (len(colors) - 1) {
+			i = 0
+		} else {
+			i = (i + 1)
+		}
 
-	for index := i; index < len(colors); index++ {
-		element := colors[index]
-		if !element.IsFinish && !element.IsKick {
-			return element.MColor
+		for index := i; index < len(colors); index++ {
+			element := colors[index]
+			if !element.IsFinish && !element.IsKick {
+				return element.MColor
+			}
 		}
-	}
 
-	for index := 0; index < i; index++ {
-		element := colors[index]
-		if !element.IsFinish && !element.IsKick {
-			return element.MColor
+		for index := 0; index < i; index++ {
+			element := colors[index]
+			if !element.IsFinish && !element.IsKick {
+				return element.MColor
+			}
 		}
+	} else if room_info.RoomType == msg.RoomType_SIREN_REN {
+		return room_info.getNextColor()
 	}
+
 	return msg.RoleType_ROLE_TYPE_UNKNOWN
 }
+func (room_info *RoomInfoWrapper) getNextColor() msg.RoleType {
+	cur := room_info.CurRoundColor
+	next_color := GetNextRole(cur)
+	nex_color_data := room_info.getColorDataByColor(next_color)
+	if nex_color_data.IsFinish || nex_color_data.IsKick {
+		return room_info.getNextColor()
+	}
+	return next_color
+}
 
 // 当前玩家是否是机器人
 func (room_info *RoomInfoWrapper) containsRobot(color msg.RoleType) bool {