public ERoomUser PeekAvaliblePlayer(EGameInfo gi) { ERoomUser result = null; //只剩一个人时,比赛也是结束了 if (PlayerQueue.Count + PlayerDoneQueue.Count == 1) { return(null); } while (PlayerQueue.Count > 0) { var Player = PlayerQueue.Peek(); if (Player.PlayerStauts == PlayerStauts.PrepareBet) { result = Player; break; } else { PlayerQuitQueue.Enqueue(PopPlayer(Player.PlayerStauts)); } } return(null); }
public override List <IGameMessage> HandleData(GameUserSession session, dataPlayerAddCoins Data) { List <IGameMessage> msgList = new List <IGameMessage>(); GameManager gm = session.GameManager; EGameInfo gi = gm.GameDataHandle.GetGameInfo(); var nextUser = gm.PlayerAddCoins(gi, Data.OpenId, Data.Coins, 0); if (nextUser == null) { gi = gm.GameEndShowCard(gi, true); } var msg = gm.WaitNextPlayer(gi); if (msg != null) { msgList.Add(msg); } else { var passMsg = GameMessageHandle.CreateResultPlayerAddCoinsMsg(gm.RoomCode, Data.OpenId, gi.CurBetUserOpenId, Data.Coins); msgList.Add(passMsg); } return(msgList); }
public ERoomUser PlayerAddCoins(EGameInfo gi, string userOpenId, decimal coins, decimal diff) { //队列重新排列 GameDataHandle.ReloadPlayer(); //获取当前玩家,并修改状态 var player = this.GameDataHandle.PopPlayer(PlayerStauts.AddCoins); player.PlayerStauts = PlayerStauts.AddCoins; RoomUserRedis.SetPlayer(RoomCode, player); //加注 ECoinDetail cd = new ECoinDetail { Coins = coins, Diff = diff, PileNo = (int)gi.GameTurn, UserOpenId = userOpenId, CoinType = CoinType.Add }; GameDataHandle.AddPlayerCoins(cd); //重新获取和设定下一个玩家(必须有下一个玩家,没有则直接结束?) var nextUser = GameDataHandle.PeekAvaliblePlayer(gi); if (nextUser != null) { gi.CurBetUserOpenId = nextUser.UserOpenId; GameDataHandle.SetGameInfo(gi); } return(nextUser); }
public IGameMessage WaitNextPlayer(EGameInfo gi) { if (gi.GameStatus == GameModel.Enums.GameStatus.GameEndShowingCard) { return(GameMessageHandle.CreateGameEndShowCardMsg(this.RoomCode)); } else { UserWaitBetTask waitTask = UserWaitBetTask.CreateNewInstance(_Session.GameServer, gi.CurBetUserOpenId); waitTask.Run(GameConfig.Turn_Wait_Server); } return(null); }
public OutAPIResult SetGameInfo(EGameInfo gi) { OutAPIResult r = new OutAPIResult(); try { r = GameDataHandle.SetGameInfo(gi); } catch (Exception ex) { r.ErrorMsg = ex.Message; } return(r); }
public EGameInfo GetGameBasic() { EGameInfo gi = null; try { return(GameDataHandle.GetGameInfo()); // gi = GameRedis.GetGameBasic(RoomCode).resultObj; } catch (Exception ex) { return(null); } }
public EOneGame GetGameData(bool NeedRefrush = false) { if (NeedRefrush) { var roomCode = _OneGame.GameInfo.RoomCode; EGameInfo basicInfo = GameRedis.GetGameBasic(roomCode).resultObj; _OneGame.GameInfo = basicInfo; _OneGame.PlayerList = RoomUserRedis.GetAllPlayer(roomCode).resultList; _OneGame.TableCardList = _CardDataManager.TableCards; } return(_OneGame); }
public OutAPIResult SetGameInfo(EGameInfo gi) { OutAPIResult r = new OutAPIResult(); try { GameRedis.SetGameBasic(gi); _OneGame.GameInfo = gi; } catch (Exception ex) { r.ErrorMsg = ex.Message; } return(r); }
/// <summary> /// 获取下个游戏状态 /// </summary> public GameStatus GetNextGameStatus(EGameInfo gi, bool NeedSave = false) { //检查游戏状态 var gs = gi.GameStatus; GameStatus nextStatus = gs; switch (gs) { case GameStatus.NoGame: nextStatus = GameStatus.WaitPlayer; break; case GameStatus.WaitPlayer: nextStatus = GameStatus.StartShuffle; break; case GameStatus.StartShuffle: nextStatus = GameStatus.Shuffling; break; case GameStatus.Shuffling: nextStatus = GameStatus.ShuffleEnd; break; case GameStatus.ShuffleEnd: nextStatus = GameStatus.Playing; break; case GameStatus.Playing: nextStatus = GameStatus.GameEndSettlement; break; case GameStatus.GameEndSettlement: nextStatus = GameStatus.StartShuffle; break; } if (NeedSave) { gi.GameStatus = nextStatus; this.SetGameInfo(gi); } return(nextStatus); }
/// <summary> /// 一局开始缓存玩家,根据GameInfo需要对玩家重新排列 /// </summary> /// <param name="PlayerList"></param> public void SetCachePlayer(List <ERoomUser> PlayerList, EGameInfo gi) { InitQueue(); var p = PlayerList[gi.FirstPlayerIndex]; PlayerQueue.Enqueue(p); int i = gi.FirstPlayerIndex + 1; while (PlayerQueue.Count < PlayerList.Count) { if (i == PlayerList.Count) { i = 0; } p = PlayerList[i]; PlayerQueue.Enqueue(p); } }
public void Run(int AfterSec, GameServer GameServer, EGameInfo gi) { if (gi.GameTurn == GameModel.Enums.GameTurn.Send3Card) { AfterSec = AfterSec * 3; } Task Task = new Task(() => { // Thread.Sleep(AfterSec * 1000); SpinWait.SpinUntil(() => { return(false); }, AfterSec * 1000); GameTaskManager.WaitBetUser(GameServer, gi.CurBetUserOpenId); }); Task.Start(); }
public EGameInfo PrePareNewGameInfo(string RoomCode) { EGameInfo gi = new EGameInfo(RoomCode) { RoomCode = RoomCode, BigBetUserOpenId = "", DotUserOpenId = "", CurBetUserOpenId = "", FirstPlayerIndex = -1, SmallBetUserOpenId = "", GameStatus = GameStatus.NoGame, GameTurn = GameTurn.NotStart, CurRequireCoins = 0, }; gi.FirstPlayerIndex = 0; gi.GameStatus = GameStatus.Shuffling; gi.GameTurn = GameTurn.NotStart; return(gi); }
public EGameInfo GameEndShowCard(EGameInfo gameInfo = null, bool NeedSave = false) { EGameInfo gi = null; if (gameInfo == null) { gi = this.GameDataHandle.GetGameInfo(); } else { gi = gameInfo; } gi.CurBetUserOpenId = ""; gi.GameStatus = GameStatus.GameEndShowingCard; gi.GameTurn = GameTurn.End; if (NeedSave) { this.GameDataHandle.SetGameInfo(gi); } return(gi); }
public EGameInfo MoveNextTurn(EGameInfo gi, bool needSave = false) { if (gi.GameTurn != GameTurn.End) { if (gi.GameTurn == GameTurn.FourthTurn) { gi.GameTurn = GameTurn.End; } else { gi.GameTurn++; } gi.CurRequireCoins = 0; } if (needSave) { this.SetGameInfo(gi); } return(gi); }
public void PlayerFollow(EGameInfo gi, string userOpenId, decimal FollowCoins) { try { var player = this.GameDataHandle.PopPlayer(PlayerStauts.Follow); player.PlayerStauts = PlayerStauts.Follow; RoomUserRedis.SetPlayer(RoomCode, player); //加注 ECoinDetail cd = new ECoinDetail { Coins = FollowCoins, Diff = 0, PileNo = (int)gi.GameTurn, UserOpenId = userOpenId, CoinType = CoinType.Follow, }; GameDataHandle.AddPlayerCoins(cd); } catch (Exception ex) { //错误需要将改玩家剔除 } }
public List <ECard> DealCard(EGameInfo gi) { List <ECard> list = null; if (gi.GameTurn == GameTurn.Send3Card) { list = new List <ECard>(); for (int i = 0; i < 3; i++) { list.Add(this.CardDataManager.TableCards[i]); } } else if (gi.GameTurn == GameTurn.Send4Card) { list = new List <ECard>(); list.Add(this.CardDataManager.TableCards[3]); } else if (gi.GameTurn == GameTurn.Send5Card) { list = new List <ECard>(); list.Add(this.CardDataManager.TableCards[4]); } return(list); }
public static ResultDealCard CreateDealCardMsg(string RoomCode, List <ECard> cardList, EGameInfo gi) { ResultDealCard msg = new ResultDealCard(RoomCode); msg.NextUserOpenId = gi.CurBetUserOpenId; msg.DealCardList = cardList; return(msg); }
public static void SyncTask_DealCardDone(GameUserSession session, EGameInfo gi) { DealCardDoneTask syncTask = new DealCardDoneTask(); syncTask.Run(GameConfig.Send_OneCard_Sec, session.GameServer, gi); }
public SResult <EGameInfo> GetFirstDotAndBet(string roomCode, List <ERoomUser> playerList) { SResult <EGameInfo> result = new SResult <EGameInfo>(); try { var CurDIndex = -1; var bIndex = -1; var sIndex = -1; var cIndex = -1; EGameInfo gi = this.PrePareNewGameInfo(roomCode); if (gi == null || playerList == null) { result.ErrorMsg = "没有获取玩家信息"; return(result); } if (string.IsNullOrEmpty(gi.DotUserOpenId)) { gi.DotUserOpenId = playerList[0].UserOpenId; } for (int i = 0; i < playerList.Count; i++) { if (playerList[i].UserOpenId == gi.DotUserOpenId) { CurDIndex = i + 1; if (CurDIndex == playerList.Count) { CurDIndex = 0; } sIndex = CurDIndex + 1; if (sIndex == playerList.Count) { sIndex = 0; } bIndex = sIndex + 1; if (bIndex == playerList.Count) { bIndex = 0; } cIndex = bIndex + 1; if (cIndex == playerList.Count) { cIndex = 0; } } } gi.DotUserOpenId = playerList[CurDIndex].UserOpenId; gi.BigBetUserOpenId = playerList[bIndex].UserOpenId; gi.SmallBetUserOpenId = playerList[sIndex].UserOpenId; gi.CurBetUserOpenId = playerList[cIndex].UserOpenId; gi.FirstPlayerIndex = cIndex; result.Instance = gi; } catch (Exception ex) { result.ErrorMsg = ex.Message; } return(result); }