/// <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; } }
/// <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(); } }
/// <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); }
/// <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); }
public override void AfterSitDown(object inningeGame, EventArgs e) { NotifyRoomPlayers(new FreshSeatIco(InningeGame.NotEmptySeats().Count())); base.AfterSitDown(inningeGame, e); NotifyRoomPlayers(new FreshGameFace(0)); }