コード例 #1
0
ファイル: PokerGame.cs プロジェクト: greeduomacro/last-wish
		public PokerGame( PokerDealer dealer )
		{
			m_Dealer = dealer;
			m_NeedsGumpUpdate = false;
			m_CommunityCards = new List<Card>();
			m_State = PokerGameState.Inactive;
			m_Deck = new Deck();
			m_Timer = new PokerGameTimer( this );
			m_Players = new PlayerStructure( this );
		}
コード例 #2
0
ファイル: PokerGame.cs プロジェクト: greeduomacro/UO-Forever
        public void Begin()
        {
            Players.Clear();
            CurrentBet = 0;
            NextRaise = 0;
            Steps = 0;

            PokerLogging.createPokerLog(Dealer.TableName);
            foreach (PokerPlayer player in Players.Players)
            {
                if (player.PendingCredit > 0)
                {
                    int balance = Banker.GetBalance(player.Mobile, TypeOfCurrency);
                    if ((player.PendingCredit + player.Currency) > Dealer.MinBuyIn &&
                        (player.PendingCredit + player.Currency) < Dealer.MaxBuyIn && balance >= player.PendingCredit)
                    {
                        player.Currency += player.PendingCredit;
                        Banker.Withdraw(player.Mobile, TypeOfCurrency, player.PendingCredit);
                        player.Mobile.SendMessage(61, "You have withdrawn " + player.PendingCredit + ".");
                        player.PendingCredit = 0;
                    }
                    else if ((player.PendingCredit + player.Currency) > Dealer.MaxBuyIn &&
                             balance >= player.PendingCredit)
                    {
                        int diff = Dealer.MaxBuyIn - player.Currency;

                        if (diff > 0)
                        {
                            player.Currency += diff;
                            Banker.Withdraw(player.Mobile, TypeOfCurrency, diff);
                            player.Mobile.SendMessage(61, "You have withdrawn " + diff + "gp.");
                            player.PendingCredit = 0;
                        }
                        else
                        {
                            player.Mobile.SendMessage(61,
                                "You cannot withdraw any further currency as you are at or above the max buy-in.");
                            player.PendingCredit = 0;
                        }
                    }
                    else if ((player.PendingCredit + player.Currency) < Dealer.MinBuyIn)
                    {
                        player.Mobile.SendMessage(61,
                            "Your current rebuy-in amount does not meet the minimum buy-in for this hand.");
                        player.PendingCredit = 0;
                    }
                }
            }

            List<PokerPlayer> dispose =
                Players.Players.Where(player => player.RequestLeave || !player.IsOnline() || player.Currency <= 0)
                    .ToList();

            foreach (PokerPlayer player in dispose.Where(player => Players.Contains(player)))
            {
                RemovePlayer(player);
            }


            foreach (PokerPlayer player in Players.Players)
            {
                player.ClearGame();
                player.Game = this;

                if (player.Currency >= Dealer.BigBlind && player.IsOnline())
                {
                    Players.Round.Add(player);
                }
            }

            if (DealerButton == null) //First round / more player
            {
                if (Players.Round.Count == 2) //Only use dealer button and small blind
                {
                    DealerButton = Players.Round[0];
                    SmallBlind = Players.Round[1];
                    BigBlind = null;
                }
                else if (Players.Round.Count > 2)
                {
                    DealerButton = Players.Round[0];
                    SmallBlind = Players.Round[1];
                    BigBlind = Players.Round[2];
                }
                else
                {
                    return;
                }
            }
            else
            {
                if (Players.Round.Count == 2) //Only use dealer button and small blind
                {
                    if (DealerButton == Players.Round[0])
                    {
                        DealerButton = Players.Round[1];
                        SmallBlind = Players.Round[0];
                    }
                    else
                    {
                        DealerButton = Players.Round[0];
                        SmallBlind = Players.Round[1];
                    }

                    BigBlind = null;
                }
                else if (Players.Round.Count > 2)
                {
                    int index = Players.Round.IndexOf(DealerButton);

                    if (index == -1) //Old dealer button was lost :(
                    {
                        DealerButton = null;
                        Begin(); //Start over
                        return;
                    }

                    if (index == Players.Round.Count - 1)
                    {
                        DealerButton = Players.Round[0];
                        SmallBlind = Players.Round[1];
                        BigBlind = Players.Round[2];
                    }
                    else if (index == Players.Round.Count - 2)
                    {
                        DealerButton = Players.Round[Players.Round.Count - 1];
                        SmallBlind = Players.Round[0];
                        BigBlind = Players.Round[1];
                    }
                    else if (index == Players.Round.Count - 3)
                    {
                        DealerButton = Players.Round[Players.Round.Count - 2];
                        SmallBlind = Players.Round[Players.Round.Count - 1];
                        BigBlind = Players.Round[0];
                    }
                    else
                    {
                        DealerButton = Players.Round[index + 1];
                        SmallBlind = Players.Round[index + 2];
                        BigBlind = Players.Round[index + 3];
                    }
                }
                else
                {
                    return;
                }
            }

            PokerHand = new PokerHandObject();
            PokerHand.Community = new List<Card>();
            PokerHand.StartTime = DateTime.Now;
            PokerHand.PokerGameId = new PokerHandSerial();

            PokerActions = new List<PokerActionObject>();

            PokerPlayers = new List<PokerPlayerObject>();

            CommunityCards.Clear();
            Deck = new Deck();

            State = PokerGameState.DealHoleCards;

            PokerLogging.StartNewHand(Dealer.TableName);

            PokerHand.InitialPlayers = Players.Players.Count;
            foreach (PokerPlayer player in Players.Players)
            {
                var playerobject = new PokerPlayerObject();

                playerobject.PokerPlayerId = new PokerPlayerSerial();
                playerobject.Serial = player.Mobile.Serial;
                playerobject.charname = player.Mobile.RawName;
                playerobject.HoleCards = new List<Card>();
                playerobject.PokerGameId = PokerHand.PokerGameId;
                playerobject.Bankroll = player.Currency;
                PokerPlayers.Add(playerobject);
            }

            if (BigBlind != null)
            {
                BigBlind.Currency -= Dealer.BigBlind;
                CommunityCurrency += Dealer.BigBlind;
                BigBlind.RoundCurrency = Dealer.BigBlind;
                BigBlind.RoundBet = Dealer.BigBlind;
                BigBlind.Bet = Dealer.BigBlind;
            }
            else
            {
                DealerButton.Currency -= Dealer.BigBlind;
                CommunityCurrency += Dealer.BigBlind;
                DealerButton.RoundCurrency = Dealer.BigBlind;
                DealerButton.RoundBet = Dealer.BigBlind;
                DealerButton.Bet = Dealer.BigBlind;                
            }

            SmallBlind.Currency -= Dealer.SmallBlind;
            CommunityCurrency += Dealer.SmallBlind;
            SmallBlind.RoundCurrency = Dealer.SmallBlind;
            SmallBlind.RoundBet = Dealer.SmallBlind;
            SmallBlind.Bet = Dealer.SmallBlind;

            NextRaise = Dealer.BigBlind;
            if (PokerPots == null)
            {
                PokerPots = new List<PokerPot>();
            }

            var pokerpotobj = new PokerPot();

            if (BigBlind != null)
            {
                pokerpotobj.AddtoPot(BigBlind.Bet, BigBlind);
                pokerpotobj.AddtoPot(SmallBlind.Bet, SmallBlind);
            }
            else
            {
                pokerpotobj.AddtoPot(SmallBlind.Bet, SmallBlind);           
            }
            PokerPots.Add(pokerpotobj);

            if (BigBlind != null)
            {
                //m_Players.Push( m_BigBlind );
                BigBlind.SetBBAction();
                CurrentBet = Dealer.BigBlind;
            }
            else
            {
                //m_Players.Push( m_SmallBlind );
                SmallBlind.SetBBAction();
                CurrentBet = Dealer.BigBlind;
            }

            if (Players.Next() == null)
            {
                return;
            }

            NeedsGumpUpdate = true;
            Timer = new PokerGameTimer(this);
            Timer.Start();
        }
コード例 #3
0
ファイル: PokerGame.cs プロジェクト: greeduomacro/last-wish
		public void Begin()
		{
			m_Players.Clear();
			m_CurrentBet = 0;

			List<PokerPlayer> dispose = new List<PokerPlayer>();

			foreach ( PokerPlayer player in m_Players.Players )
				if ( player.RequestLeave || !player.IsOnline() )
					dispose.Add( player );

			foreach ( PokerPlayer player in dispose )
				if ( m_Players.Contains( player ) )
					RemovePlayer( player );

			foreach ( PokerPlayer player in m_Players.Players )
			{
				player.ClearGame();
				player.Game = this;

				if ( player.Gold >= m_Dealer.BigBlind && player.IsOnline() )
					m_Players.Round.Add( player );
			}

            if ( m_DealerButton == null || m_SmallBlind == null ) //First round / more player
			{
                if ( m_Players.Round.Count == 2 ) //Only use small blind and big blind
				{
                    m_DealerButton = null;
                    m_SmallBlind = m_Players.Round[0];
                    m_BigBlind = m_Players.Round[1];
				}
				else if ( m_Players.Round.Count > 2 )
				{
					m_DealerButton = m_Players.Round[0];
					m_SmallBlind = m_Players.Round[1];
					m_BigBlind = m_Players.Round[2];
				}
				else
					return;
			}
			else
			{
                if ( m_Players.Round.Count == 2 ) //Only use small blind and big blind
				{
                    if ( m_BigBlind == m_Players.Round[1] )
					{
                        m_SmallBlind = m_Players.Round[1];
                        m_BigBlind = m_Players.Round[0];
					}
					else
					{
                        m_SmallBlind = m_Players.Round[0];
                        m_BigBlind = m_Players.Round[1];
					}

                    m_DealerButton = null;
				}
				else if ( m_Players.Round.Count > 2 )
				{
					int index = m_Players.Round.IndexOf( m_DealerButton );

					if ( index == -1 ) //Old dealer button was lost :(
					{
						m_DealerButton = null;
						Begin(); //Start over
						return;
					}

					if ( index == m_Players.Round.Count - 1 )
					{
						m_DealerButton = m_Players.Round[0];
						m_SmallBlind = m_Players.Round[1];
						m_BigBlind = m_Players.Round[2];
					}
					else if ( index == m_Players.Round.Count - 2 )
					{
						m_DealerButton = m_Players.Round[m_Players.Round.Count - 1];
						m_SmallBlind = m_Players.Round[0];
						m_BigBlind = m_Players.Round[1];
					}
					else if ( index == m_Players.Round.Count - 3 )
					{
						m_DealerButton = m_Players.Round[m_Players.Round.Count - 2];
						m_SmallBlind = m_Players.Round[m_Players.Round.Count - 1];
						m_BigBlind = m_Players.Round[0];
					}
					else
					{
						m_DealerButton = m_Players.Round[index + 1];
						m_SmallBlind = m_Players.Round[index + 2];
						m_BigBlind = m_Players.Round[index + 3];
					}
				}
				else
					return;
			}

			m_CommunityCards.Clear();
			m_Deck = new Deck();

			m_State = PokerGameState.DealHoleCards;

			if ( m_BigBlind != null )
			{
				m_BigBlind.Gold -= m_Dealer.BigBlind;
				m_CommunityGold += m_Dealer.BigBlind;
				m_BigBlind.RoundGold = m_Dealer.BigBlind;
				m_BigBlind.RoundBet = m_Dealer.BigBlind;
				m_BigBlind.Bet = m_Dealer.BigBlind;
			}

			m_SmallBlind.Gold -= m_BigBlind == null ? m_Dealer.BigBlind : m_Dealer.SmallBlind;
			m_CommunityGold += m_BigBlind == null ? m_Dealer.BigBlind : m_Dealer.SmallBlind;
			m_SmallBlind.RoundGold = m_BigBlind == null ? m_Dealer.BigBlind : m_Dealer.SmallBlind;
			m_SmallBlind.RoundBet = m_BigBlind == null ? m_Dealer.BigBlind : m_Dealer.SmallBlind;
			m_SmallBlind.Bet = m_BigBlind == null ? m_Dealer.BigBlind : m_Dealer.SmallBlind;

			if ( m_BigBlind != null )
			{
				//m_Players.Push( m_BigBlind );
				m_BigBlind.SetBBAction();
				m_CurrentBet = m_Dealer.BigBlind;
			}
			else
			{
				//m_Players.Push( m_SmallBlind );
				m_SmallBlind.SetBBAction();
				m_CurrentBet = m_Dealer.BigBlind;
			}

			if ( m_Players.Next() == null )
				return;

			m_NeedsGumpUpdate = true;
			m_Timer = new PokerGameTimer( this );
			m_Timer.Start();
		}
コード例 #4
0
 public Hand(Deck deck)
 {
     m_Deck = deck;
     m_Hand = new Card[2];
 }