/// <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);
        }
        /// <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 IActionResult CreateRoom(IFormCollection createRoom)
        {
            if (session.Keys.Contains("RoomId"))
            {
                throw new Exception("已经在一个房间里,不能再建");
            }
            if (!decimal.TryParse(createRoom["TicketPrice"].ToString(), out decimal ticketPrice_))
            {
                ticketPrice_ = 0;
            }
            string       gameName_    = createRoom["gameProject"].ToString();
            IGameProject gameProject_ = LoadGameProject(gameName_);
            IInningeGame inningeGame_ = new InningeGame(gameProject_);

            if (!int.TryParse(createRoom["PlayerCountTopLimit"].ToString(), out int limitCount_))
            {
                limitCount_ = 1;
            }
            IRoomConfig roomConfig_ = new RoomConfig(inningeGame_)
            {
                Affiche             = createRoom["Affiche"],
                Name                = createRoom["Name"],
                PlayerCountTopLimit = limitCount_,
                SecretKey           = createRoom["SecretKey"],
                TicketPrice         = ticketPrice_
            };
            IRoom room_ = new Room(player, roomConfig_);

            BoundingEventOfRoom(room_);
            var gameCityId = createRoom["gameCityId"];

            WriteToSeeion(gameCityId, room_);
            return(RedirectToAction("RoomsList"));
        }
        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);
        }
        public ABCard PlayerGetOnePoker(int playerId)
        {
            Seat seat         = GetSeatByPlayerId(playerId);
            var  player       = seat.IPlayer;
            int  opponentId   = GetOpponentId(playerId);
            Seat opponentSeat = GetSeatByPlayerId(opponentId);

            if (player.AccountNotEnough(ChipInAmount))
            {
                NotifySinglePlayer(WebscoketSendObjs.Alert(player.Id, "账户余额不足"), player.Id);
            }
            if (null == seat.PlayOutPokers && null != seat.GetPoker)
            {
                return(null);
            }
            player.DecutMoney(ChipInAmount);
            lock (Locker)
            {
                if (Poker.RemaindCount > 0)
                {
                    if (null == seat.PlayOutPokers)
                    {
                        var card = Poker.TackOut(1)[0];
                        seat.GetPoker      = card;
                        seat.CompareResult = null;
                        NotifySinglePlayer(WebscoketSendObjs.FreshGameFace(player.Id), player.Id);
                        return(card);
                    }
                    return(null);
                }
                InningeGame.GameOver();//触发游戏结束事件
                return(null);
            }
        }
        /// <summary>
        /// 满足最大轮次等条件时自动开牌
        /// </summary>
        private void CompareAll()
        {
            if (CurrentStage != EStage.Running)
            {
                return;
            }
            CheckDateTime = DateTime.Now;
            List <Seat> notGaveupSeats = new List <Seat>();

            if (JoinSeats.Count != 0)
            {
                CheckDateTime = DateTime.Now;
                for (int i = 0; i < JoinSeats.Count; i++)
                {
                    if (JoinSeats[i].IsGaveUp)
                    {
                        continue;
                    }
                    notGaveupSeats.Add(JoinSeats[i]);
                }
                WinnerSeat = (notGaveupSeats.OrderByDescending(s => s.Pokers).ToList())[0];
            }
            decimal playerWinAmount = 0;

            playerWinAmount = SystemTax(playerWinAmount);
            WinnerSeat.IPlayer.DecutMoney(playerWinAmount);
            FirstSeat    = WinnerSeat;//新庄家
            CurrentSeat  = WinnerSeat;
            CurrentStage = EStage.Computed;
            NotifyRoomPlayers(new FreshGameFace(0));
            InningeGame.GameOver(false, false);//触发游戏结束事件
        }
Exemple #7
0
        public void GetEmptySeats()
        {
            IInningeGame inningeGame = new InningeGame();
            List <ISeat> Seats       = inningeGame.EmptySeats();

            Assert.Empty(Seats);
        }
        /// <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();
            }
        }
Exemple #9
0
        private IInningeGame _IInningeGameCreator()
        {
            IInningeGame inningeGame = new InningeGame()
            {
                IGameProject = _gameProject
            };

            return(inningeGame);
        }
Exemple #10
0
        public void ConnectIInngeGameAndIGameProject_startCheck()
        {
            IInningeGame inningeGame = new InningeGame(_gameProject);

            inningeGame.AddSet(1);
            inningeGame.Start();

            _gameProjectFactory.Verify(g => g.CheckStart(It.IsNotNull <IInningeGame>()));
        }
        public void Compare(int playerId)
        {
            if (CurrentStage != EStage.Running)
            {
                return;
            }
            Seat seat = (Seat)GetJionSeatByPlayerId(playerId);

            if (IsNotPassedCheck(seat))
            {
                return;
            }
            bool iHadLook    = seat.IsLooked;
            Seat opponetSeat = GetOnlyOpponentSeat();

            if (null == opponetSeat)
            {
                return;
            }
            CheckDateTime = DateTime.Now;
            decimal chipInAmount = PreSeatAmount;

            if (iHadLook != PreSeatIsLook)
            {
                if (PreSeatIsLook)
                {
                    chipInAmount = chipInAmount / 2;
                }
                else
                {
                    chipInAmount = chipInAmount * 2;
                }
            }
            if (chipInAmount > LimitAmount)
            {
                chipInAmount = LimitAmount;
            }
            if (!IsDecutMoneySuccess(seat.IPlayer, chipInAmount))
            {
                return;
            }
            AddCurrentTotal(chipInAmount);
            seat.PreChipInAmount = chipInAmount;
            seat.PreChipType     = EChipinType.Compare;
            WinnerSeat           = GetWinner(seat, opponetSeat);
            decimal playerWinAmount = 0;

            playerWinAmount = SystemTax(playerWinAmount);
            WinnerSeat.IPlayer.DecutMoney(-playerWinAmount);
            // IsWinnerStage = true;//?
            FirstSeat    = WinnerSeat;//新庄家
            CurrentSeat  = WinnerSeat;
            CurrentStage = EStage.Computed;
            NotifyRoomPlayers(new ChipinAnimation(0, chipInAmount, playerId, EChipinType.Compare));
            NotifyRoomPlayers(new FreshGameFace(0));
            InningeGame.GameOver(false, false);
        }
Exemple #12
0
        public void ConnectIInngeGameAndIGameProject_AddSet()
        {
            IInningeGame inningeGame = new InningeGame(_gameProject);

            inningeGame.AddSet(1);

            _gameProjectFactory.Verify(g => g.BeforAddSeat(It.IsNotNull <IInningeGame>(), It.IsNotNull <EventArgs>()), "添加座位前");
            _gameProjectFactory.Verify(p => p.AfterAddSeat(It.IsNotNull <object>(), It.IsNotNull <EventArgs>()), "添加座位后");
        }
        /// <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;
            }
        }
        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);
        }
Exemple #15
0
        public void ConnectIInngeGameAndIGameProject_startDelegate()
        {
            IInningeGame inningeGame = new InningeGame(_gameProject);

            _gameProjectFactory.Setup(g => g.CheckStart(It.IsNotNull <IInningeGame>())).Returns(true);

            inningeGame.AddSet(1);
            inningeGame.Start();

            _gameProjectFactory.Verify(g => g.GameStart(It.IsNotNull <IInningeGame>(), It.IsNotNull <EventArgs>()));
        }
        /// <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="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);
        }
 public override void Stoped(object inningeGame, EventArgs e)
 {
     //     if (!IsChipinClose) {
     if (CurrentStage == EStage.CanChipIning)
     {
         for (int i = 0; i < JoinSeats.Count(); i++)
         {
             var seat = JoinSeats[0];
             if (seat.IsChipIned)
             {
                 seat.IPlayer.DecutMoney(-seat.ChipinAmount);
             }
         }
     }
     InningeGame.GameOver();
     base.Stoped(inningeGame, e);
 }
        /// <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);
        }
 /// <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);
 }
        /// <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);
        }
        /// <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);
        }
        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);
        }
 public override void AfterSitDown(object inningeGame, EventArgs e)
 {
     NotifyRoomPlayers(new FreshSeatIco(InningeGame.NotEmptySeats().Count()));
     base.AfterSitDown(inningeGame, e);
     NotifyRoomPlayers(new FreshGameFace(0));
 }
        public IActionResult CreateRoom(IFormCollection createRoom)
        {
            if (session.Keys.Contains("RoomId"))
            {
                ViewBag.result = "";
                return(View("Index_CreateRoom"));
                //  throw new Exception("已经在一个房间里,不能再建");
            }
            if (!decimal.TryParse(createRoom["TicketPrice"].ToString(), out decimal ticketPrice_))
            {
                ticketPrice_ = 0;
            }
            if (ticketPrice_ > 0)
            {
                if (player.AccountNotEnough(ticketPrice_ * TOOMTICKETPRICEMULTIPLE))
                {
                    return(RedirectToRoute("default", new { controller = "Player", action = "Index_recharge" }));
                }
            }

            string       gameName_    = createRoom["gameProject"].ToString();
            IGameProject gameProject_ = LoadGameProject(gameName_);
            IInningeGame inningeGame_ = new InningeGame(gameProject_)
            {
                DCreatSeat = gameProject_.CreatSeat
            };

            gameProject_.InningeGame = inningeGame_;

            if (!int.TryParse(createRoom["PlayerCountTopLimit"].ToString(), out int limitCount_))
            {
                limitCount_ = 1;
            }
            if (ticketPrice_ > TOPTICKETPRICE)
            {
                ticketPrice_ = TOPTICKETPRICE;
            }
            if (ticketPrice_ < 0)
            {
                ticketPrice_ = 0;
            }
            var affiche = createRoom["Affiche"].ToString();

            if (affiche.Length >= 150)
            {
                affiche = affiche.Substring(0, 150);
            }
            var name = createRoom["Name"].ToString();

            if (name.Length >= 6)
            {
                name.Substring(0, 6);
            }
            IRoomConfig roomConfig_ = new RoomConfig(inningeGame_)
            {
                Affiche             = affiche,
                Name                = name,
                PlayerCountTopLimit = limitCount_,
                SecretKey           = createRoom["SecretKey"],
                TicketPrice         = ticketPrice_
            };

            player.DecutMoney(ticketPrice_ * TOOMTICKETPRICEMULTIPLE, "开房");
            IRoom room_ = new Room(player, roomConfig_);

            BoundingEventOfRoom(room_);
            var gameCityId = createRoom["gameCityId"];

            WriteToSeeion(gameCityId, room_);
            if (inningeGame_.IGameProject.PlayerCountLimit == 1)
            {
                return(RedirectToAction("JoinRoom"));
            }
            return(RedirectToAction("RoomsList"));
        }
 /// <summary>
 /// 根据玩家Id获得对应座位
 /// </summary>
 /// <param name="playerId"></param>
 /// <returns></returns>
 private Seat GetSeatByPlayerId(int playerId)
 {
     return((Seat)InningeGame.GetSeatByPlayerId(playerId));
 }
Exemple #29
0
        /// <summary>
        /// 找到玩家座位
        /// </summary>
        /// <param name="playerId"></param>
        /// <returns></returns>
        private Seat GetSeatByPlayerId(int playerId)
        {
            Seat seat = (Seat)InningeGame.GetSeatByPlayerId(playerId);

            return(seat);
        }