public bool joinPlayer(DDZ_PlayerData playerData) { if (m_playerDataList.Count < 4) { m_playerDataList.Add(playerData); return(true); } return(false); }
private void SendData(IntPtr connId, string data) { byte[] bytes = Encoding.UTF8.GetBytes(data); byte[] len = BitConverter.GetBytes((ushort)bytes.Length); byte[] flag = BitConverter.GetBytes(m_packEndFlag); byte[] sendBytes = CombineBytes(flag, CombineBytes(len, bytes)); //LogUtil.getInstance().addDebugLog($"发送数据长度:{sendBytes.Length},body:{bytes.Length},flag:{flag.Length},data:{data}"); if (m_tcpServer.Send(connId, sendBytes, sendBytes.Length)) { // 日志 { PlayerData playerData = GameUtil.getPlayerDataByConnId(connId); if (playerData != null) { RoomData room = GameUtil.getRoomByUid(playerData.m_uid); if (room != null) { LogUtil.getInstance().writeRoomLog(room, "发送消息给客户端:" + data); } else { LogUtil.getInstance().addDebugLog("发送消息给客户端:" + data); } } else { DDZ_PlayerData ddz_playerData = DDZ_GameUtil.getPlayerDataByConnId(connId); if (ddz_playerData != null) { DDZ_RoomData room = DDZ_GameUtil.getRoomByUid(ddz_playerData.m_uid); if (room != null) { LogUtil.getInstance().writeRoomLog(room, "发送消息给客户端:" + data); } else { LogUtil.getInstance().addDebugLog("发送消息给客户端:" + data); } } else { LogUtil.getInstance().addDebugLog("发送消息给客户端:" + data); } } } } else { Debug.WriteLine("发送给客户端失败:" + data); } }
public void clearData() { m_fapaiIndex = 0; m_isStartGame = false; m_roomState = DDZ_RoomState.RoomState_waiting; m_curOutPokerPlayer = null; m_DiPokerList.Clear(); for (int i = 0; i < m_playerDataList.Count; i++) { m_playerDataList[i].clearData(); } }
public static DDZ_PlayerData getPlayerDataByConnId(IntPtr connId) { DDZ_PlayerData playerData = null; for (int i = 0; i < PlayLogic_DDZ.getInstance().getRoomList().Count; i++) { List <DDZ_PlayerData> playerDataList = PlayLogic_DDZ.getInstance().getRoomList()[i].getPlayerDataList(); for (int j = 0; j < playerDataList.Count; j++) { if (playerDataList[j].m_connId == connId) { playerData = playerDataList[j]; return(playerData); } } } return(playerData); }
public static DDZ_PlayerData getPlayerDataByUid(string uid) { DDZ_PlayerData playerData = null; for (int i = 0; i < PlayLogic_DDZ.getInstance().getRoomList().Count; i++) { List <DDZ_PlayerData> playerDataList = PlayLogic_DDZ.getInstance().getRoomList()[i].getPlayerDataList(); for (int j = 0; j < playerDataList.Count; j++) { if (playerDataList[j].m_uid.CompareTo(uid) == 0) { playerData = playerDataList[j]; return(playerData); } } } return(playerData); }
// 托管:抢地主 public static void trusteeshipLogic_QiangDiZhu(DDZ_GameBase gameBase, DDZ_RoomData room, DDZ_PlayerData playerData) { try { LogUtil.getInstance().writeRoomLog(room, ":托管:帮" + playerData.m_uid + "抢地主"); JObject data = new JObject(); data["tag"] = room.m_tag; data["uid"] = playerData.m_uid; data["playAction"] = (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_QiangDiZhu; // 机器人叫分 if (playerData.m_isAI) { if (room.m_maxJiaoFenPlayerData == null) { int r = RandomUtil.getRandom(1, 3); data["fen"] = r; } else { int r = RandomUtil.getRandom(room.m_maxJiaoFenPlayerData.m_jiaofen + 1, 3); data["fen"] = r; } } // 真人托管不叫分 else { data["fen"] = 0; } DDZ_GameLogic.doTask_QiangDiZhu(gameBase, playerData.m_connId, data.ToString()); } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error(m_logFlag + "----" + ".trusteeshipLogic_QiangDiZhu: " + ex); } }
// 托管:出牌 public static void trusteeshipLogic_OutPoker(DDZ_GameBase gameBase, DDZ_RoomData room, DDZ_PlayerData playerData) { try { // 轮到自己出牌 { if (playerData.getPokerList().Count > 0) { JObject backData = new JObject(); backData.Add("tag", room.m_tag); backData.Add("uid", playerData.m_uid); backData.Add("playAction", (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_PlayerOutPoker); { List <TLJCommon.PokerInfo> listPoker = LandlordsCardsHelper.GetTrusteeshipPoker(room, playerData); //// 打印托管出的牌 //{ // string str = ""; // for (int i = 0; i < listPoker.Count; i++) // { // str += (listPoker[i].m_num + "、"); // } // TLJ_PlayService.PlayService.log.Warn(m_logFlag + "----托管出牌:" + playerData.m_uid + ":" + str); //} JArray jarray = new JArray(); for (int i = 0; i < listPoker.Count; i++) { int num = listPoker[i].m_num; int pokerType = (int)listPoker[i].m_pokerType; { JObject temp = new JObject(); temp.Add("num", num); temp.Add("pokerType", pokerType); jarray.Add(temp); } } backData.Add("pokerList", jarray); if (listPoker.Count > 0) { backData.Add("hasOutPoker", true); } else { backData.Add("hasOutPoker", false); } } //LogUtil.getInstance().addDebugLog(m_logFlag + "----" + "托管出牌:" + playerData.m_uid + " " + backData.ToString()); DDZ_GameLogic.doTask_ReceivePlayerOutPoker(gameBase, playerData.m_connId, backData.ToString()); } } } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error(m_logFlag + "----" + ":trusteeshipLogic_OutPoker:" + ex); } }
// 托管:加棒 public static void trusteeshipLogic_JiaBang(DDZ_GameBase gameBase, DDZ_RoomData room, DDZ_PlayerData playerData) { try { LogUtil.getInstance().writeRoomLog(room, ":托管:帮" + playerData.m_uid + "加棒"); JObject data = new JObject(); data["tag"] = room.m_tag; data["uid"] = playerData.m_uid; data["playAction"] = (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_JiaBang; data["isJiaBang"] = 1; DDZ_GameLogic.doTask_JiaBang(gameBase, playerData.m_connId, data.ToString()); } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error(m_logFlag + "----" + ".trusteeshipLogic_JiaBang: " + ex); } }
void timerCallback_fapai(object obj) { try { switch ((TimerType)obj) { case TimerType.TimerType_fapai: { m_timerUtil_FaPai.stopTimer(); for (int i = 0; i < getPlayerDataList().Count; i++) { int num = getPlayerDataList()[i].getPokerList()[m_fapaiIndex].m_num; int pokerType = (int)getPlayerDataList()[i].getPokerList()[m_fapaiIndex].m_pokerType; //if (!getPlayerDataList()[i].isOffLine()) { JObject jo2 = new JObject(); jo2.Add("tag", m_tag); jo2.Add("uid", getPlayerDataList()[i].m_uid); jo2.Add("playAction", (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_FaPai); jo2.Add("num", num); jo2.Add("pokerType", pokerType); if (m_fapaiIndex == 16) { jo2.Add("isEnd", 1); } else { jo2.Add("isEnd", 0); } PlayService.m_serverUtil.sendMessage(getPlayerDataList()[i].m_connId, jo2.ToString()); } getPlayerDataList()[i].m_allotPokerList.Add(new PokerInfo(num, (TLJCommon.Consts.PokerType)pokerType)); LogUtil.getInstance().writeRoomLog(this, "发牌给:" + getPlayerDataList()[i].m_uid + "----num = " + num + " pokerType = " + pokerType); } // 牌未发完 if (m_fapaiIndex < 16) { ++m_fapaiIndex; startFaPaiTimer(); } // 牌已发完 else { for (int i = 0; i < getDiPokerList().Count; i++) { LogUtil.getInstance().writeRoomLog(this, "底牌:----num = " + getDiPokerList()[i].m_num + " pokerType = " + (int)getDiPokerList()[i].m_pokerType); } // 随机一个玩家开始抢地主 { m_roomState = DDZ_RoomState.RoomState_qiangdizhu; DDZ_PlayerData playerData = null; int r = RandomUtil.getRandom(0, getPlayerDataList().Count - 1); //r = 0; playerData = getPlayerDataList()[r]; m_firstQiangDiZhuPlayer = playerData; m_curQiangDiZhuPlayer = playerData; // 开始倒计时 playerData.m_timerUtil.startTimer(m_qiangDiZhuTime, TimerType.TimerType_qiangDizhu); JObject jo2 = new JObject(); jo2.Add("tag", m_tag); jo2.Add("curMaxFen", 0); jo2.Add("curJiaoDiZhuUid", m_curQiangDiZhuPlayer.m_uid); jo2.Add("playAction", (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_CallPlayerQiangDiZhu); for (int i = 0; i < getPlayerDataList().Count; i++) { PlayService.m_serverUtil.sendMessage(getPlayerDataList()[i].m_connId, jo2.ToString()); } // 如果离线了则托管出牌 if (playerData.isTuoGuan()) { // 开始倒计时 playerData.m_timerUtilOffLine.startTimer(m_tuoguanOutPokerDur, TimerType.TimerType_qiangDizhu); } } } } break; } } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error("DDZ_RoomData----" + "timerCallback_fapai异常: " + ex); } }
public static void setPlayerScore(DDZ_RoomData room, bool canFuShu) { try { float jichufenshu = 100; float changcixishu = 1; float beishu = 1; for (int i = 0; i < room.getPlayerDataList().Count; i++) { float score = 0; // 叫分 * 春天倍数 * 炸弹倍数 beishu = room.m_maxJiaoFenPlayerData.m_jiaofen * room.m_beishu_chuntian * room.m_beishu_bomb; if (room.getPlayerDataList()[i].m_isJiaBang == 1) { beishu *= 2; } score = jichufenshu * changcixishu * beishu; room.getPlayerDataList()[i].m_score = (int)score; } // 地主赢 if (room.m_winPlayerData.m_isDiZhu == 1) { int winerCanGetScote = 0; for (int i = 0; i < room.getPlayerDataList().Count; i++) { DDZ_PlayerData playerData = room.getPlayerDataList()[i]; if (playerData.m_isDiZhu != 1) { UserInfo_Game userInfo_Game = UserInfo_Game_Manager.getDataByUid(playerData.m_uid); if (userInfo_Game != null) { if (userInfo_Game.gold < playerData.m_score) { winerCanGetScote += userInfo_Game.gold; playerData.m_score = -userInfo_Game.gold; } else { winerCanGetScote += playerData.m_score; playerData.m_score = -playerData.m_score; } } } } room.m_diZhuPlayer.m_score = winerCanGetScote; } // 农民赢 else { int winerCanGetScote = 0; for (int i = 0; i < room.getPlayerDataList().Count; i++) { DDZ_PlayerData playerData = room.getPlayerDataList()[i]; if (playerData.m_isDiZhu != 1) { UserInfo_Game userInfo_Game = UserInfo_Game_Manager.getDataByUid(playerData.m_uid); if (userInfo_Game != null) { winerCanGetScote += playerData.m_score; } } } room.m_diZhuPlayer.m_score = -winerCanGetScote; } } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error("DDZ_GameUtil.setPlayerScore()----" + ex + "gameRoomType:" + room.m_gameRoomType); } }
// 游戏结束 public override void gameOver(DDZ_RoomData room) { try { room.setRoomState(DDZ_RoomState.RoomState_end); LogUtil.getInstance().writeRoomLog(room, m_logFlag + "----" + ":比赛结束,roomid = :" + room.getRoomId()); // 游戏在线统计 for (int i = 0; i < room.getPlayerDataList().Count; i++) { Request_OnlineStatistics.doRequest(room.getPlayerDataList()[i].m_uid, room.getRoomId(), room.m_gameRoomType, room.getPlayerDataList()[i].m_isAI, (int)Request_OnlineStatistics.OnlineStatisticsType.OnlineStatisticsType_exit); } // 是否春天 { if (room.m_winPlayerData.m_isDiZhu == 1) { bool isChunTian = true; for (int i = 0; i < room.getPlayerDataList().Count; i++) { if (room.getPlayerDataList()[i].m_isDiZhu == 0) { if (room.getPlayerDataList()[i].m_outPokerCiShu > 0) { isChunTian = false; break; } } } if (isChunTian) { room.m_beishu_chuntian = 2; } } else { bool isChunTian = true; for (int i = 0; i < room.getPlayerDataList().Count; i++) { if (room.getPlayerDataList()[i].m_isDiZhu == 1) { if (room.getPlayerDataList()[i].m_outPokerCiShu > 1) { isChunTian = false; break; } } } if (isChunTian) { room.m_beishu_chuntian = 2; } } } // 计算每个玩家的金币(积分) DDZ_GameUtil.setPlayerScore(room, false); // 加减金币 { for (int i = 0; i < room.getPlayerDataList().Count; i++) { // 加、减玩家金币值 Request_ChangeUserWealth.doRequest(room.getPlayerDataList()[i].m_uid, 1, room.getPlayerDataList()[i].m_score, "斗地主结算"); } } //// 逻辑处理 //{ // List<string> winnerList = new List<string>(); // // 游戏数据统计 // Request_GameStatistics.doRequest(room, winnerList); //} { JObject respondJO = new JObject(); { respondJO.Add("tag", room.m_tag); respondJO.Add("playAction", (int)TLJCommon.Consts.DDZ_PlayAction.PlayAction_GameOver); respondJO.Add("isDiZhuWin", room.m_winPlayerData.m_isDiZhu); for (int i = 0; i < room.getPlayerDataList().Count; i++) { JObject jo = new JObject(); jo.Add("score", room.getPlayerDataList()[i].m_score); float beishu = room.m_maxJiaoFenPlayerData.m_jiaofen * room.m_beishu_chuntian * room.m_beishu_bomb; jo.Add("beishu", (int)beishu * (room.getPlayerDataList()[i].m_isJiaBang + 1)); respondJO.Add(room.getPlayerDataList()[i].m_uid, jo); } // 倍数 for (int i = 0; i < room.getPlayerDataList().Count; i++) { DDZ_PlayerData playerData = room.getPlayerDataList()[i]; JArray ja = new JArray(); { ja.Add("初始倍数X" + room.m_maxJiaoFenPlayerData.m_jiaofen); if (playerData.m_isJiaBang == 1) { ja.Add("加棒X2"); } if (room.m_beishu_bomb > 1) { ja.Add("炸弹X" + room.m_beishu_bomb); } if (room.m_beishu_chuntian > 1) { ja.Add("春天X" + room.m_beishu_chuntian); } } respondJO.Add("beishu_" + playerData.m_uid, ja); } } for (int i = 0; i < room.getPlayerDataList().Count; i++) { // 推送给客户端 if (!room.getPlayerDataList()[i].isOffLine()) { PlayService.m_serverUtil.sendMessage(room.getPlayerDataList()[i].m_connId, respondJO.ToString()); } } } DDZ_GameLogic.removeRoom(this, room, true); } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error(m_logFlag + "gameOver异常: " + ex); } }
public override bool doTaskPlayerCloseConn(string uid) { try { DDZ_RoomData room = getRoomByUid(uid); if (room == null) { return(false); } DDZ_PlayerData playerData = DDZ_GameUtil.getPlayerDataByUid(uid); if (playerData == null) { return(false); } //// 记录逃跑数据 //if ((m_roomList[i].m_roomState != RoomState.RoomState_waiting) && // (m_roomList[i].m_roomState != RoomState.RoomState_end)) //{ // Request_RecordUserGameData.doRequest(room.getPlayerDataList()[i].m_uid, room.m_gameRoomType, (int)TLJCommon.Consts.GameAction.GameAction_Run); //} switch (room.getRoomState()) { case DDZ_RoomState.RoomState_waiting: { if (!playerData.isOffLine()) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":玩家在本桌满人之前退出:" + playerData.m_uid); room.getPlayerDataList().Remove(playerData); if (DDZ_GameUtil.checkRoomNonePlayer(room)) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此房间人数为0,解散房间:" + room.getRoomId()); DDZ_GameLogic.removeRoom(this, room, true); } } else { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此玩家连续退出/掉线:" + playerData.m_uid); } } break; case DDZ_RoomState.RoomState_fapai: case DDZ_RoomState.RoomState_qiangdizhu: case DDZ_RoomState.RoomState_jiabang: case DDZ_RoomState.RoomState_gaming: { if (!playerData.isOffLine()) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":玩家在游戏中退出:" + playerData.m_uid); playerData.setIsOffLine(true); } else { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此玩家连续退出/掉线:" + playerData.m_uid); } } break; case DDZ_RoomState.RoomState_end: { if (!playerData.isOffLine()) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":玩家在本桌打完后退出:" + playerData.m_uid); room.getPlayerDataList().Remove(playerData); if (room.getPlayerDataList().Count == 0) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此房间人数为0,解散房间:" + room.getRoomId()); DDZ_GameLogic.removeRoom(this, room, true); } else { // 如果房间人数为空,则删除此房间 { if (DDZ_GameUtil.checkRoomNonePlayer(room)) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此房间人数为0,解散房间:" + room.getRoomId()); DDZ_GameLogic.removeRoom(this, room, true); } } } } else { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此玩家连续退出/掉线:" + playerData.m_uid); } } break; default: { if (!playerData.isOffLine()) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":玩家在未知阶段退出:" + playerData.m_uid); room.getPlayerDataList().Remove(playerData); if (DDZ_GameUtil.checkRoomNonePlayer(room)) { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此房间人数为0,解散房间:" + room.getRoomId()); DDZ_GameLogic.removeRoom(this, room, true); } } else { LogUtil.getInstance().addDebugLog(m_logFlag + "----" + ":此玩家连续退出/掉线:" + playerData.m_uid); } } break; } return(true); } catch (Exception ex) { TLJ_PlayService.PlayService.log.Error(m_logFlag + "----" + ":doTaskPlayerCloseConn异常:" + ex); } return(false); }