public async Task Start() { if (Round == null) { Players.ForEach(p => p.IsInAllIn = false); _deck = new Deck(); _deck.Shuffle(); Winner = null; foreach (var pokerUser in Players) { _cards[pokerUser] = _deck.GetCards(2); } Winner = null; foreach (var pokerUser in Players) { _cards[pokerUser] = _deck.GetCards(2); } CurrentPlayer = Players[0]; StartingPlayer = CurrentPlayer; var gameViewModels = CreateGameViewModels(); await HubEventEmitter.SendPokerAction(gameViewModels); await Task.Delay(100); Round = new Round(this, RoundType.Start); await Round.Next(); } }
public async Task <Winner> Next(UserAction userAction = null) { if (userAction.RoundId != Round.Id) { return(null); } var result = await Round.Next(userAction); if (result) { int nextRoundType = (int)Round.RoundType; nextRoundType++; int currentPlayerNumber = Players.Where(p => p.IsActive).ToList().Count; if (currentPlayerNumber == 1) { var player = Players.FirstOrDefault(p => p.IsActive); Winner = new Winner(player, null, false); return(Winner); } if (nextRoundType == (int)RoundType.End) { Winner = GetWinner(_cards); return(Winner); } Round = new Round(this, (RoundType)nextRoundType); List <Card> nextCards = null; switch (Round.RoundType) { case RoundType.Flop: nextCards = _deck.GetCards(3); _commonCards = nextCards.ToList(); break; case RoundType.Turn: case RoundType.River: nextCards = _deck.GetCards(1); _commonCards.AddRange(nextCards); break; } await HubEventEmitter.SendPokerAction(CreateGameViewModels()); await Task.Delay(100); await Round.Next(); return(null); } else { return(null); } //if(Round == null) //{ // var deck = new Deck(); // deck.Shuffle(); // foreach (var pokerUser in PokerUsers) // { // _cards[pokerUser] = deck.GetCards(2); // } // var sendCardsToAll = new PokerAction(RoundType.Start, _table.Id, PokerUsers, _cards, PokerActionType.User); // EventProxy.DispatchPokerAction(sendCardsToAll); // Round = new Round(this, RoundType.Start); //} //Round = new Round(PokerUsers, (RoundType)_turnState); var RoundStatus = new RoundStatus(); //while (Round.RoundType != RoundType.End) //{ // Console.WriteLine($"Round type: {(RoundType)_turnState}"); // switch(Round.RoundType) // { // case RoundType.Flop: // RoundStatus.Flop = deck.GetCards(3); // break; // case RoundType.Turn: // case RoundType.River: // RoundStatus.Flop.Add(deck.GetCards(1).First()); // break; // } // RoundStatus.RoundType = (RoundType)_turnState; // await _hubEventEmitter.SendStatus(_table, RoundStatus); // await Round.Next(_hubEventEmitter); // _turnState++; // Round = new Round(PokerUsers, (RoundType)_turnState); //} //var gm = new GameManager(); //foreach (var item in _cards) //{ // var playerCards = RoundStatus.Flop.ToList(); // playerCards.AddRange(item.Value); // _results[item.Key] = gm.GetResult(playerCards); //} //var winner = _results.OrderByDescending(a => a.Value).First(); //Console.WriteLine("Winner" + winner.Key.Username); //await _hubEventEmitter.SendWinner(_table, $"{winner.Key.Username} with [{winner.Value.Hand}] and with the following values: {winner.Value.Values.Select(v => v.ToString())}"); }
public LiveWallpaperHub(HubEventEmitter hubEventEmitter) { _hubEventEmitter = hubEventEmitter; }