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();
        }
    }
Example #4
0
    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);
    }
Example #5
0
    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);
    }
Example #6
0
    // 托管:抢地主
    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);
        }
    }
Example #7
0
    // 托管:出牌
    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);
        }
    }
Example #8
0
    // 托管:加棒
    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);
        }
    }
Example #10
0
    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);
        }
    }
Example #11
0
    // 游戏结束
    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);
        }
    }
Example #12
0
    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);
    }