/// <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); } } } ); }
/// <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); } } } ); }
/// <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); }); }
/// <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 }); }