/// <summary> /// 玩家获得一张牌 /// </summary> /// <param name="playerId_">玩家Id</param> /// <returns>获得的牌</returns> public ABCard PlayerGetOnePoker(int playerId) { var seat = InningeGame.GetSeatByPlayerId(playerId); var player = seat.IPlayer; var opponentId = GetOpponentId(playerId); var opponentSeat = InningeGame.GetSeatByPlayerId(opponentId); if (player.AccountNotEnough(ChipInAmount)) { Notify?.Invoke(WebscoketSendObjs.Alert(player.Id, "账户余额不足")); } if (seat.GameDateObj["getPokers"].Count > 0) { return(null); } player.DecutMoney(ChipInAmount); if (Poker.RemaindCount > 0) { var card = Poker.TackOut(1)[0]; seat.GameDateObj["getPokers"].Add(card); seat.GameDateObj["compareResult"].Clear(); Notify?.Invoke(WebscoketSendObjs.FreshGameFace(player.Id)); return(card); } InningeGame.GameOver();//触发游戏结束事件 return(null); }
public override void BeforPlayerLeave(object inningeGame, EventArgs e) { IPlayerJoinRoom player = ((PlayerEventArgs)e).Player; Seat seat = (Seat)InningeGame.GetSeatByPlayerId(player.Id); ChageRole(seat); RemoveFromJoinSeats(seat); base.BeforPlayerLeave(inningeGame, e); }
/// <summary> /// 出牌或出牌后比较大小 /// </summary> /// <param name="playerId">玩家Id</param> /// <param name="card_">一张牌</param> /// <returns>获胜玩家座位</returns> public void PlayerPlayOutOnePoker(int playerId) { var meSeat = InningeGame.GetSeatByPlayerId(playerId); var opponentId = GetOpponentId(playerId); var opponentSeat = InningeGame.GetSeatByPlayerId(opponentId); var opponentPayOut = opponentSeat.GameDateObj["playOutPokers"]; var opponentCompareResult = opponentSeat.GameDateObj["compareResult"]; object card = null; //var card = CheckCardExist(playerId, card_); if (meSeat.GameDateObj["getPokers"].Count == 0) { return; } var mePoker = meSeat.GameDateObj["getPokers"]; card = mePoker[0]; var mePayOut = meSeat.GameDateObj["playOutPokers"]; var meCompareResult = meSeat.GameDateObj["compareResult"]; ISeat winPlayer = null; if (card != null) { mePoker.Remove(card); mePayOut.Add(card); if (opponentPayOut.Count > 0) { if (((ABCard)mePayOut[0]).ComparedValue > ((ABCard)opponentPayOut[0]).ComparedValue) { winPlayer = meSeat; } else { winPlayer = opponentSeat; } mePayOut.Remove(card); meCompareResult.Add(card); opponentCompareResult.Add(opponentPayOut[0]); opponentPayOut.Clear(); winPlayer.IPlayer.DecutMoney(-ChipInAmount); foreach (var item in InningeGame.NotEmptySeats())//通知全部客户端刷新 { // Notify?.Invoke(item.IPlayer.Id, "FreshGameFace"); Notify?.Invoke(WebscoketSendObjs.FreshGameFace(item.IPlayer.Id)); }// ClearPayOut(opponentPayOut, mePayOut); } Notify?.Invoke(WebscoketSendObjs.FreshGameFace(playerId)); return; } return; }
/// <summary> /// 检查玩家手里是否存在指定牌 /// </summary> /// <param name="playerId_">玩家Id</param> /// <param name="card_">牌</param> /// <returns></returns> private ABCard CheckCardExist(int playerId_, ABCard card_) { var seat = InningeGame.GetSeatByPlayerId(playerId_); ABCard card = null; foreach (ABCard item in seat.GameDateObj["getPokers"]) { if (item.Name == card_.Name && item.CardColor == card_.CardColor) { card = item; break; } } return(card); }
/// <summary> /// 刷新玩家数据 /// </summary> /// <param name="playerId">玩家Id</param> /// <returns>发送到客户端玩家数据</returns> public object FreshGameFace(int playerId) { var seat = InningeGame.GetSeatByPlayerId(playerId); //var seats = InningeGame.NotMyEmtySteats(playerId); Dictionary <int, object> otherPlayerPokers = new Dictionary <int, object>(); var opponentId = GetOpponentId(playerId); var opponentSeat = InningeGame.GetSeatByPlayerId(opponentId); object opponetPoker = new { Name = "", CardColor = "" }; if (opponentSeat.GameDateObj["compareResult"].Count == 1) { opponetPoker = opponentSeat.GameDateObj["compareResult"][0]; } object myPoker_ = new { Name = "", CardColor = "" }; if (seat.GameDateObj["getPokers"].Count == 1) { myPoker_ = seat.GameDateObj["getPokers"][0]; } object myComparePoker_ = new { Name = "", CardColor = "" }; if (seat.GameDateObj["compareResult"].Count == 1) { myComparePoker_ = seat.GameDateObj["compareResult"][0]; } object myPayOutPoker_ = new { Name = "", CardColor = "" }; if (seat.GameDateObj["playOutPokers"].Count == 1) { myPayOutPoker_ = seat.GameDateObj["playOutPokers"][0]; } var GameFace = new { myPoker = myPoker_, myPayOutPoker = myPayOutPoker_, myComparePoker = myComparePoker_, otherPlayersPoker = opponetPoker }; return(GameFace); }
/// <summary> /// 根据玩家Id获得对应座位 /// </summary> /// <param name="playerId"></param> /// <returns></returns> private Seat GetSeatByPlayerId(int playerId) { return((Seat)InningeGame.GetSeatByPlayerId(playerId)); }
public object FreshGameFace(int playerId) { List <object> seats = CreatClientSeatsInfo(playerId); decimal myBalance = 0; var mySeat = InningeGame.GetSeatByPlayerId(playerId); if (!(mySeat is null || mySeat.IPlayer is null)) { myBalance = mySeat.IPlayer.Account; } int winnerid = 0; if (!((this.WinnerSeat is null) || (WinnerSeat.IPlayer is null))) { winnerid = WinnerSeat.IPlayer.Id; } int joinSeatsCount = 0; if (!(JoinSeats is null)) { joinSeatsCount = this.JoinSeats.Count(); } int firstId = 0; int currentId = 0; if (!(this.FirstSeat is null || FirstSeat.IPlayer is null)) { firstId = FirstSeat.IPlayer.Id; } if (!(this.CurrentSeat is null || CurrentSeat.IPlayer is null)) { currentId = this.CurrentSeat.IPlayer.Id; } int waitSecond = 0; bool canCompare = false; if (CurrentStage == EStage.Running && GetActiveSeatCount() == 2) { canCompare = true; } waitSecond = (DateTime.Now - CheckDateTime).Seconds; var PublicInfo = new { MyId = playerId, /// 每次打底(入局)积分 ChipInAmount = this.ChipInAmount, /// 封顶积分 LimitAmount = this.LimitAmount, /// 每局游戏轮次 DefaultTurnCount = this.DefaultTurnCount, /// 一局的起始位置 FirstSeatPlayerId = firstId, /// 但前底池积分 CurrentTotal = this.CurrentTotal, /// 当前轮次 CurrentTurn = this.CurrentTurn, /// 上家是否看牌 PreSeatIsLook = this.PreSeatAmount, /// 上家下注积分 PreSeatAmount = this.PreSeatAmount, /// 当前座位 CurrentSeatPlayId = currentId, /// 赢家座位 WinnerSeatPlayerId = winnerid, ///是否结算后期间 // IsWinnerStage = this.IsWinnerStage, ///打底关闭 // IsChipinClose = this.IsChipinClose, //可以比牌 CanCompare = canCompare, //阶段 CurrentStage = this.CurrentStage, ///房价玩家总数 playerCount = this.InningeGame.NotEmptySeats().Count(), ///已打底数 playerChipinCount = joinSeatsCount, ///等待玩家操作秒数 WaitSecond = waitSecond, //玩家余额 Balance = myBalance }; var GameFace = new { PublicInfo = PublicInfo, Seats = seats }; return(GameFace); }
/// <summary> /// 找到玩家座位 /// </summary> /// <param name="playerId"></param> /// <returns></returns> private Seat GetSeatByPlayerId(int playerId) { Seat seat = (Seat)InningeGame.GetSeatByPlayerId(playerId); return(seat); }