示例#1
0
        /// <summary>
        /// 出牌的处理
        /// </summary>
        private void Deal(ClientPeer client, DealDto dto)
        {
            SingleExecute.Instance.Execute(
                delegate()
            {
                //玩家在线
                if (user.IsOnLine(client) == false)
                {
                    return;
                }

                int userId = user.GetIdByClient(client);

                if (userId != dto.userId)      //DTO的ID可以用来做验证。
                {
                    return;
                }
                FightRoom room = fight.GetRoom(userId);
                //玩家出牌
                //掉线  在线
                if (room.LeaveUidList.Contains(userId))
                {
                    //自动出牌
                    Turn(room);
                }
                //玩家在线
                bool canDeal = room.DealCard(dto.length, dto.type, dto.weight, userId, dto.selectCardList);
                if (canDeal == false)
                {
                    //压不住
                    client.Send(OpCode.FIGHT, FightCode.DEAL_SRES, -1);
                    return;
                }
                else
                {
                    //发送给出牌者
                    client.Send(OpCode.FIGHT, FightCode.DEAL_SRES, 0);
                    List <CardDto> remainCardList = room.GetPlayerCard(userId);
                    dto.remainCardList            = remainCardList;
                    //广播
                    Brocast(room, OpCode.FIGHT, FightCode.DEAL_BRO, dto);
                    //检测下 剩余牌  为0 就赢了
                    if (remainCardList.Count == 0)
                    {
                        //游戏结束
                        GameOver(userId, room);
                    }
                    else
                    {
                        //转换玩家
                        Turn(room);
                    }
                }
            }
                );
        }
示例#2
0
        /// <summary>
        /// 出牌的处理
        /// </summary>
        private void deal(ClientPeer client, DealDto dto)
        {
            SingleExecute.Instance.Execute(
                delegate()
            {
                if (userCache.IsOnline(client) == false)
                {
                    return;
                }
                //必须确保在线

                int userId = userCache.GetId(client);

                if (userId != dto.UserId)
                {
                    return;
                }
                FightRoom room = fightCache.GetRoomByUId(userId);
                //玩家出牌
                //玩家已经中途退出 掉线
                if (room.LeaveUIdList.Contains(userId))
                {
                    //直接转换出牌
                    turn(room);
                }
                //玩家还在
                bool canDeal = room.DealCard(dto.Type, dto.Weight, dto.Length, userId, dto.SelectCardList);
                if (canDeal == false && room.roundModel.BiggestUId != userId)
                {
                    //玩家出的牌管不上上一个玩家出的牌
                    client.Send(OpCode.FIGHT, FightCode.DEAL_SRES, -1);
                    return;
                }
                else
                {
                    //出牌成功
                    //广播 给所有的客户端
                    List <CardDto> remainCardList = room.GetPlayerModel(userId).CardList;
                    dto.RemainCardList            = remainCardList;
                    brocast(room, OpCode.FIGHT, FightCode.DEAL_BRO, dto);
                    //检测一下剩余手牌,如果手牌数为0,那就游戏结束了
                    if (remainCardList.Count == 0)
                    {
                        //游戏结束
                        gameOver(userId, room);
                    }
                    else
                    {
                        //转换出牌
                        turn(room);
                    }
                }
            }
                );
        }
示例#3
0
        /// <summary>
        /// 开始战斗
        /// </summary>
        /// <param name="clientList"></param>
        /// <param name="roomType"></param>
        public void StartFight(List <ClientPeer> clientList, int roomType)
        {
            SingleExecute.Instance.Exeecute(() => {
                FightRoom room = fightCache.CreateRoom(clientList);
                switch (roomType)
                {
                case 0:
                    room.bottomStakes     = 10;
                    room.topStakes        = 100;
                    room.lastPlayerStakes = 10;
                    break;

                case 1:
                    room.bottomStakes     = 20;
                    room.topStakes        = 200;
                    room.lastPlayerStakes = 20;
                    break;

                case 2:
                    room.bottomStakes     = 50;
                    room.topStakes        = 500;
                    room.lastPlayerStakes = 50;
                    break;

                default:
                    break;
                }
                foreach (var client in clientList)
                {
                    room.UpdatePlayerStakesSum(client.Id, room.bottomStakes);
                }
                // 选择庄家
                ClientPeer bankerClient = room.SetBanker();
                // 重置位置,排序
                room.ResetPosition(bankerClient.Id);
                // 发牌
                room.DealCard();
                // 对手牌排序
                room.SortAllPlayerCard();
                // 获得牌型
                room.GetAllPlayerCardType();
                room.Broadcast(OpCode.Fight, FightCode.StartFight_BRO, room.playerList);
                // 转换下注,换到庄家的下一位玩家下注
                Turn(bankerClient);
            });
        }
示例#4
0
        /// <summary>
        /// 开始战斗
        /// </summary>
        /// <param name="clientList"></param>
        /// <param name="roomType"></param>
        public void StartFight(List <ClientPeer> clientList, int roomType)
        {
            SingleExecute.Instance.Execute(() =>
            {
                FightRoom room = fightCache.CreateRoom(clientList);
                switch (roomType)
                {
                case 0:
                    room.bottomStakes          = 10;
                    room.topStakes             = 100;
                    room.lastPlayerStakesCount = 10;
                    break;

                case 1:
                    room.bottomStakes          = 20;
                    room.topStakes             = 200;
                    room.lastPlayerStakesCount = 20;
                    break;

                case 2:
                    room.bottomStakes          = 50;
                    room.topStakes             = 500;
                    room.lastPlayerStakesCount = 50;
                    break;

                default:
                    break;
                }
                //选择庄家
                ClientPeer bankerClient = room.SetBanker();
                //发牌
                room.DealCard();

                //对手牌排序
                room.SortAllPlayerCard();
                //获得牌型
                room.GetAllPlayerCardType();

                room.Broadcase(OpCode.Fight, FightCode.StartFight_BRO, room.playerList);
                //转换下注,换到下一个玩家下注
                //TODO
            });
        }