Exemplo n.º 1
0
        /// <summary>
        /// 出牌
        /// </summary>
        /// <param name="clientPeer"></param>
        /// <param name="value"></param>
        private void Deal(ClientPeer clientPeer, DealDto dealDto)
        {
            SingleExcute.Instance.Excute(
                delegate()
            {
                //出牌者id
                int uid             = dealDto.Uid;
                FightRoomModel room = fightRoomCache.GetFightRoomByUid(uid);
                if (room.EscapePlayerId.Contains(uid))
                {
                    //玩家已经退出房间
                    Turn(room, uid);
                }
                else
                {
                    //玩家没有退出房间,判断玩家是否可以压过上一家出牌者
                    if (room.PlayCard(dealDto.Weight, dealDto.Type, dealDto.Length, dealDto.Uid, dealDto.Cards))
                    {
                        //给玩家发送出牌成功消息
                        clientPeer.Send(OpCode.FIGHT, FightCode.DEAL_SRES, 0);
                        //广播出牌成功消息

                        dealDto.RemainCards = room.GetPlayerModel(uid).CardDtos.Except(dealDto.Cards).ToList();

                        Brocast(room, OpCode.FIGHT, FightCode.DEAL_BRO, dealDto);

                        //判断玩家是否还有手牌
                        if (!room.HasCard(uid))
                        {
                            //没有手牌,结束游戏
                            GameOver(room, uid);
                        }
                        else
                        {
                            //还有手牌,转换出牌
                            Turn(room, uid);
                        }
                    }
                    else
                    {
                        //无法压过上一家的牌,出牌失败的处理
                        clientPeer.Send(OpCode.FIGHT, FightCode.DEAL_SRES, -1);
                    }
                }
            }
                );
        }
Exemplo n.º 2
0
 /// <summary>
 /// 抢地主
 /// </summary>
 /// <param name="clientPeer">客户端连接对象</param>
 /// <param name="value">请求参数</param>
 private void Grab(ClientPeer clientPeer, bool value)
 {
     SingleExcute.Instance.Excute(() =>
     {
         if (accountCache.IsOnline(clientPeer) == false)
         {
             return;
         }
         int aid = accountCache.GetId(clientPeer);
         int uid = userModelCache.GetUserIdByAid(aid);
         FightRoomModel fightRoom = fightRoomCache.GetFightRoomByUid(uid);
         if (value == true)
         {
             fightRoom.SetLandlord(uid);
             fightRoom.Sort(uid);
             //发送抢地主消息(包括抢地主的角色Id和底牌数据)给每个客户端发消息
             Brocast(fightRoom, OpCode.FIGHT, FightCode.GRAB_LANDLORD_BRO, new GrabDto(uid, fightRoom.TableCardList, fightRoom.GetPlayerModel(uid).CardDtos));
             //通知该玩家出牌
             Brocast(fightRoom, OpCode.FIGHT, FightCode.TURN_DEAL_BRO, uid);
         }
         else
         {
             //发送不抢地主的消息
             int nextUid = fightRoom.GetNext(uid);
             Brocast(fightRoom, OpCode.FIGHT, FightCode.TURN_GRAB_BRO, nextUid);
         }
     });
 }