Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="lastUserId"></param>
        /// <param name="lastPosition"></param>
        /// <param name="room"></param>
        private void turnPlayer(int lastUserId, int lastPosition, _21MutiFightRoom room)
        {
            ClientPeer client = userCache.GetClientPeer(lastUserId);

            //是不是分过牌 并且还有牌 有牌还是给他发牌
            if (room.isHaveNextHand(lastUserId))
            {
                client.Send(OpCode._21Multi, _21MultiCode.SPLIT_CAN_NEXT_SRES, null);
            }
            //没有了的话 就下一个玩家开始操作
            else
            {
                int nextUid = room.GetNextUId(lastUserId);
                room.SetPlayingUId(nextUid);
                //没有下一个玩家了
                if (nextUid == -1)
                {
                    //room.SetPlayingUId(-1);
                    //todo 庄家的操作
                    gameOver(room);
                }
                else
                {
                    //和刚开始差不多
                    if (room.is21ByUserId(nextUid))//21点 直接赢了
                    {
                        //记录一下这组牌
                        room.SaveListByUserId(nextUid, 1, false);
                        int         position = room.getPosition(nextUid);
                        OverHandDto ohdto    = new OverHandDto(nextUid, position, 1);
                        brocast(room, OpCode._21Multi, _21MultiCode.OVER_HAND_BRO, ohdto, null);
                        //该下一个玩家了
                        turnPlayer(nextUid, position, room);
                    }
                    else if (room.isCanSplitByUserId(nextUid))//能够分牌
                    {
                        TurnHandDto thdto = new TurnHandDto(true, nextUid);
                        //client.Send(OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto);
                        brocast(room, OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto, null);
                    }
                    else
                    {
                        TurnHandDto thdto = new TurnHandDto(false, nextUid);
                        //client.Send(OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto);
                        brocast(room, OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto, null);
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 离开
        /// </summary>
        /// <param name="client"></param>
        private void leave(ClientPeer client)
        {
            SingleExecute.Instance.Execute(
                delegate()
            {
                if (!userCache.IsOnline(client))
                {
                    return;
                }
                int userId = userCache.GetId(client);
                //用户没有匹配 不能退出 非法操作
                if (fightCache.IsInRoom(userId) == false)
                {
                    //client.Send(OpCode.MATCH, MatchCode.LEAVE_SRES, -1);
                    return;
                }
                //在战斗的时候离开
                if (fightCache.IsInPlaying(userId))
                {
                    _21MutiFightRoom room = fightCache.GetRoom(userId);
                    //加入到离开链表里
                    room.LeaveUIdList.Add(userId);
                    //广播一下离开的用户
                    room.Brocast(OpCode._21Multi, _21MultiCode.LEAVE_BRO, userId);
                    //如果在处理的时候离开了  换下一个
                    if (userId == room.playingUserId)
                    {
                        int nextUid = room.GetNextUId(userId);
                        room.SetPlayingUId(nextUid);
                        //没有下一个玩家了
                        if (nextUid == -1)
                        {
                            //room.SetPlayingUId(-1);
                            //todo 庄家的操作
                            gameOver(room);
                        }
                        else
                        {
                            //和刚开始差不多
                            if (room.is21ByUserId(nextUid))    //21点 直接赢了
                            {
                                //记录一下这组牌
                                room.SaveListByUserId(nextUid, 1, false);
                                int position      = room.getPosition(nextUid);
                                OverHandDto ohdto = new OverHandDto(nextUid, position, 1);
                                brocast(room, OpCode._21Multi, _21MultiCode.OVER_HAND_BRO, ohdto, null);
                                //该下一个玩家了
                                turnPlayer(nextUid, position, room);
                            }
                            if (room.isCanSplitByUserId(nextUid))    //能够分牌
                            {
                                TurnHandDto thdto = new TurnHandDto(true, nextUid);
                                //client.Send(OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto);
                                brocast(room, OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto, null);
                            }
                            else
                            {
                                TurnHandDto thdto = new TurnHandDto(false, nextUid);
                                //client.Send(OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto);
                                brocast(room, OpCode._21Multi, _21MultiCode.TURN_HS_BRO, thdto, null);
                            }
                        }
                    }
                }
                //未战斗的时候离开
                else
                {
                    //正常离开
                    _21MutiFightRoom room = fightCache.Leave(userId);
                    //广播给房间内所有人 有人离开了 参数:离开的用户id
                    room.Brocast(OpCode._21Multi, _21MultiCode.LEAVE_BRO, userId);
                }


                Console.WriteLine("有玩家离开房间");
            });
        }