123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package ludo
- import (
- "errors"
- "fmt"
- redismgr "server/db/redis"
- "server/msg"
- )
- // 判断是否已存在选择的阵营
- func IsMatchColor(room_info *msg.RoomInfo, select_color msg.RoleType) bool {
- for c := range room_info.Colors {
- if room_info.Colors[c].MColor == select_color {
- return false
- }
- }
- return true
- }
- func AddRoom(room *msg.RoomInfo) {
- gameConfig.mu.Lock()
- defer gameConfig.mu.Unlock()
- gameConfig.RoomMap[room.Id] = room
- }
- func RemoveRoom(roomID int32) {
- gameConfig.mu.Lock()
- defer gameConfig.mu.Unlock()
- delete(gameConfig.RoomMap, roomID)
- }
- func GetRoom(roomID int32) *msg.RoomInfo {
- gameConfig.mu.RLock()
- defer gameConfig.mu.RUnlock()
- return gameConfig.RoomMap[roomID]
- }
- func GetRoomsByType(roomType msg.RoomType) []*msg.RoomInfo {
- gameConfig.mu.RLock()
- defer gameConfig.mu.RUnlock()
- var result []*msg.RoomInfo
- for _, room := range gameConfig.RoomMap {
- if room.RoomType == roomType {
- result = append(result, room)
- }
- }
- return result
- }
- func GetRoomsByLevel(matchInfo *msg.MatchLudo, roomStatus msg.RoomStatus) []*msg.RoomInfo {
- gameConfig.mu.Lock()
- defer gameConfig.mu.Unlock()
- fmt.Printf("RoomMap: %+v\n", gameConfig.RoomMap) // 打印 RoomMap 内容
- fmt.Printf("Query: roomType=%v, roomLevel=%v, roomStatus=%v, color=%v\n",
- matchInfo.SelectRoomType, matchInfo.RoomLevel, roomStatus, matchInfo.SelectColor)
- var result []*msg.RoomInfo
- for _, room := range gameConfig.RoomMap {
- fmt.Printf("Checking room: %+v\n", room) // 打印每个 room 的信息
- if room.RoomType == matchInfo.SelectRoomType &&
- room.RoomLevel == matchInfo.RoomLevel &&
- room.RoomStatus == roomStatus &&
- IsMatchColor(room, matchInfo.SelectColor) {
- result = append(result, room)
- }
- }
- return result
- }
- func CreateRoom(matchInfo *msg.MatchLudo, userId string) *msg.RoomInfo {
- gameConfig.mu.Lock()
- defer gameConfig.mu.Unlock()
- userInfo, err_info := redismgr.GetUserInfoFromRedis(userId)
- if err_info != nil {
- return nil
- }
- newRoom := &msg.RoomInfo{
- Id: generateRoomID(),
- RoomLevel: int32(matchInfo.RoomLevel),
- RoomType: matchInfo.SelectRoomType,
- RoomMode: msg.RoomMode_WAN_JIA, //设置为玩家pvp模式
- RoomStatus: msg.RoomStatus_AWAIT,
- Colors: []*msg.ColorData{
- {
- MId: userId,
- MColor: matchInfo.SelectColor, //所属阵营
- IsKick: false, //是否被踢
- IsFinish: false, //是否完成了比赛
- TimeOutNum: 0, //超时次数
- MName: userInfo.Name, //玩家名字
- MHead: userInfo.MHead, //头像
- RankNum: 0, //本局游戏的名次
- MCoin: userInfo.MCoin, //玩家拥有的金币
- },
- },
- }
- gameConfig.RoomMap[newRoom.Id] = newRoom
- return newRoom
- }
- func JoinRoom(room *msg.RoomInfo, matchInfo *msg.MatchLudo, userId string) (bool, error) {
- gameConfig.mu.Lock()
- defer gameConfig.mu.Unlock()
- userInfo, err_info := redismgr.GetUserInfoFromRedis(userId)
- if err_info != nil {
- return false, errors.New("not find user at JoinRoom time ")
- }
- user_agent := getAgentByUserId(userId)
- if user_agent == nil {
- return false, errors.New("not find user ")
- }
- room.Colors = append(room.Colors, &msg.ColorData{
- MId: userId,
- MColor: matchInfo.SelectColor, //所属阵营
- IsKick: false, //是否被踢
- IsFinish: false, //是否完成了比赛
- TimeOutNum: 0, //超时次数
- MName: userInfo.Name, //玩家名字
- MHead: userInfo.MHead, //头像
- RankNum: 0, //本局游戏的名次
- MCoin: userInfo.MCoin, //玩家拥有的金币
- })
- ud := &msg.UserInfo{
- UserId: userInfo.UserId,
- Name: userInfo.Name,
- MCoin: userInfo.MCoin,
- MHead: userInfo.MHead,
- RoomId: room.Id,
- }
- redismgr.SaveUserInfoToRedis(ud)
- user_agent.SetUserData(ud)
- isFullPlayer := false
- if room.RoomType == msg.RoomType_SHUANG_REN { //说明是两人的房间
- isFullPlayer = len(room.Colors) == 2
- } else if room.RoomType == msg.RoomType_SIREN_REN { //说明是四人的房间
- isFullPlayer = len(room.Colors) == 4
- }
- return isFullPlayer, nil
- }
- func generateRoomID() int32 {
- gameConfig.mu.RLock()
- defer gameConfig.mu.RUnlock()
- return int32(len(gameConfig.RoomMap) + 1)
- }
- func getPlayerCount(room_info *msg.RoomInfo) int {
- if room_info.RoomType == msg.RoomType_SHUANG_REN {
- return 2
- }
- return 4
- }
- func setPlayersRoomId(room_info *msg.RoomInfo) {
- for i := range room_info.Colors {
- user_id := room_info.Colors[i].MId
- user_agent := getAgentByUserId(user_id)
- if user_agent != nil {
- user_agent.SetUserData(&msg.UserInfo{})
- }
- }
- }
- func initRoles(room_info *msg.RoomInfo) {
- for i := range room_info.Colors {
- color_data := room_info.Colors[i]
- color := color_data.MColor
- for i := range 4 {
- room_info.Roles = append(room_info.Roles, &msg.RoleData{
- MColor: color,
- MSeat: int32(i),
- MId: fmt.Sprintf("%d_%d", color, i),
- MCurRoad: msg.RoadType_HOME,
- })
- }
- }
- }
- func setFirstColor(room_info *msg.RoomInfo) {
- // if room_info.RoomType == msg.RoomType_SHUANG_REN {
- // room_info.CurRoundColor =
- // }
- room_info.CurRoundColor = room_info.Colors[0].MColor
- }
- func getCurColorEventKey(room_info *msg.RoomInfo) string {
- return fmt.Sprintf("%d_%s", room_info.Id, room_info.CurRoundColor)
- }
|