/// <summary>
        /// 检查玩家是否超时
        /// </summary>
        /// <param name="obj"></param>
        private void CheckPlayOverTime(object obj)
        {
            //超时62秒
            int overSeconds = 63;

            do
            {
                overSeconds = Math.Abs(overSeconds);
                Thread.Sleep(TimeSpan.FromSeconds(overSeconds));
                overSeconds = OverTimeSpan(overSeconds);
                //if (0<=overSeconds&&overSeconds<5) {
                //    overSeconds = 5;
                //}
            } while (overSeconds < 2);
            if (InningeGame.NotEmptySeats().Count > 1 && !(CurrentSeat.IPlayer is null))
            {
                int currentPlayerId = CurrentSeat.IPlayer.Id;
                do
                {
                    NotifyRoomPlayers(WebscoketSendObjs.RoomMessage(0, "有玩家超时,将被自动踢出"));
                    RemoveCurrentPlayer();
                } while (currentPlayerId == CurrentSeat.IPlayer.Id);
            }
            CheckPlayOverTime(obj);
        }
        public void PlayerChipin(int playerId)
        {
            //  if (IsChipinClose) {
            if (CurrentStage != EStage.CanChipIning && CurrentStage != EStage.Computed)
            {
                NotifySinglePlayer(WebscoketSendObjs.RoomMessage(0, "未开局或结束,不能押底!"), playerId);
                return;
            }
            Seat seat = GetRoomSeatByPlayerId(playerId);

            if (seat.IsChipIned)
            {
                NotifySinglePlayer(WebscoketSendObjs.RoomMessage(0, "已经押底!"), playerId);
                NotifyRoomPlayers(new FreshGameFace(0));
                return;
            }
            if (InningeGame.NotEmptySeats().Count < 2)
            {
                NotifySinglePlayer(WebscoketSendObjs.RoomMessage(0, "房间人数少于两人,不能押底"), playerId);
                NotifyRoomPlayers(new FreshGameFace(0));
                return;
            }
            lock (seat) {
                if (seat.PlayerChipin(ChipInAmount, IsDecutMoneySuccess))
                {
                    AddPlaySeat(seat);
                    AddCurrentTotal(ChipInAmount);
                }
            }
            CheckDateTime = DateTime.Now;
            NotifyRoomPlayers(new FreshGameFace(0));
            NotifySinglePlayer(WebscoketSendObjs.RoomMessage(0, "已押底,等待庄家发牌!"), playerId);
        }
        /// <summary>
        /// 清理双方出的牌
        /// </summary>
        /// <param name="opponentPayOut_"></param>
        /// <param name="mePayOut_"></param>
        private void ClearPayOut()
        {
            var seats = InningeGame.NotEmptySeats();

            foreach (var item in seats)
            {
                ((Seat)item).PlayOutPokers = null;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 清理双方出的牌
        /// </summary>
        /// <param name="opponentPayOut_"></param>
        /// <param name="mePayOut_"></param>
        private void ClearPayOut()
        {
            var seats = InningeGame.NotEmptySeats();

            foreach (var item in seats)
            {
                item.GameDateObj["playOutPokers"].Clear();
            }
        }
Esempio n. 5
0
        /// <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;
        }
        public void PlayerPlayOutOnePoker(int playerId)
        {
            Seat   meSeat                = GetSeatByPlayerId(playerId);
            int    opponentId            = GetOpponentId(playerId);
            Seat   opponentSeat          = GetSeatByPlayerId(opponentId);
            var    opponentPayOut        = opponentSeat.PlayOutPokers;
            var    opponentCompareResult = opponentSeat.CompareResult;
            ABCard card = null;

            if (null == meSeat.GetPoker)
            {
                return;
            }
            card = meSeat.GetPoker;
            var   meCompareResult = meSeat.CompareResult;
            ISeat winPlayer       = null;

            if (card != null)
            {
                lock (Locker)
                {
                    meSeat.GetPoker      = null;
                    meSeat.PlayOutPokers = card;
                    if (opponentPayOut != null)
                    {
                        if (meSeat.PlayOutPokers.ComparedValue > opponentSeat.PlayOutPokers.ComparedValue)
                        {
                            winPlayer = meSeat;
                        }
                        else
                        {
                            winPlayer = opponentSeat;
                        }
                        meSeat.PlayOutPokers       = null;
                        meSeat.CompareResult       = card;
                        opponentSeat.CompareResult = opponentSeat.PlayOutPokers;
                        opponentSeat.PlayOutPokers = null;
                        winPlayer.IPlayer.DecutMoney(-ChipInAmount);
                        foreach (var item in InningeGame.NotEmptySeats())//通知全部客户端刷新
                        {
                            NotifySinglePlayer(WebscoketSendObjs.FreshGameFace(item.IPlayer.Id), item.IPlayer.Id);
                        }
                    }
                    NotifySinglePlayer(WebscoketSendObjs.FreshGameFace(playerId), playerId);
                    return;
                }
            }
            return;
        }
        /// <summary>
        /// 获得对手的Id
        /// </summary>
        /// <param name="id_">自己的Id</param>
        /// <returns>对手Id</returns>
        public int GetOpponentId(int id_)
        {
            int opponentid = 0;
            var Seats      = InningeGame.NotEmptySeats();

            foreach (ISeat seat in Seats)
            {
                if (seat.IPlayer.Id != id_)
                {
                    opponentid = seat.IPlayer.Id;
                    break;
                }
            }
            return(opponentid);
        }
        /// <summary>
        /// 开始游戏
        /// </summary>
        /// <param name="sender">IInngineGame</param>
        /// <param name="e"></param>
        public override void GameStart(object inngineGame, EventArgs e)
        {
            InningeGame = (IInningeGame)inngineGame;
            Poker       = new Poker();
            //foreach (var seat in InningeGame.NotEmptySeats())
            //{

            //    seat.GameDataObj.Add("getPokers", new List<object>());
            //    seat.GameDataObj.Add("playOutPokers", new List<object>());
            //    seat.GameDataObj.Add("compareResult", new List<object>());
            //}
            foreach (var item in InningeGame.NotEmptySeats())
            {
                PlayerGetOnePoker(item.IPlayer.Id);
            }
            base.GameStart(InningeGame, e);
        }
Esempio n. 9
0
 /// <summary>
 /// 开始游戏
 /// </summary>
 /// <param name="sender">IInngineGame</param>
 /// <param name="e"></param>
 public override void GameStart(object inngineGame, EventArgs e)
 {
     InningeGame = (IInningeGame)inngineGame;
     Poker       = new Poker();
     foreach (var seat in InningeGame.NotEmptySeats())
     {
         seat.GameDateObj.Add("getPokers", new List <object>());
         seat.GameDateObj.Add("playOutPokers", new List <object>());
         seat.GameDateObj.Add("compareResult", new List <object>());
     }
     foreach (var item in InningeGame.NotEmptySeats())
     {
         PlayerGetOnePoker(item.IPlayer.Id);
     }
     //Notify?.Invoke(WebscoketSendObjs.RoomMessage(0, "游戏开始了!"));
     base.GameStart(inngineGame, e);
 }
Esempio n. 10
0
        /// <summary>
        /// 获得房间下一个有玩家的座位
        /// </summary>
        /// <param name="seat"></param>
        /// <returns></returns>
        private Seat GetNextRoomSeat(Seat seat)
        {
            var notEmptySeats = InningeGame.NotEmptySeats();

            for (int i = 0; i < notEmptySeats.Count; i++)
            {
                if (notEmptySeats[i] == seat)
                {
                    if (i == notEmptySeats.Count - 1)
                    {
                        return((Seat)notEmptySeats[0]);
                    }
                    else
                    {
                        return((Seat)notEmptySeats[i + 1]);
                    }
                }
            }
            return(null);
        }
Esempio n. 11
0
 public override void AfterSitDown(object inningeGame, EventArgs e)
 {
     NotifyRoomPlayers(new FreshSeatIco(InningeGame.NotEmptySeats().Count()));
     base.AfterSitDown(inningeGame, e);
     NotifyRoomPlayers(new FreshGameFace(0));
 }