示例#1
0
        // frmGameGUI
        public frmGameGUI(frmMainMenu mainMenu)
        {
            menuForm = mainMenu;
            InitializeComponent();
            this.Show();

            // Read config file
            if (!File.Exists("./DurakConfiguration"))
            {
                File.Create("./DurakConfiguration").Dispose();
            }
            TextReader tr = new StreamReader("./DurakConfiguration");

            HumanName = tr.ReadLine();
            AiName    = tr.ReadLine();
            String isCardVisible = tr.ReadLine();

            if (!String.IsNullOrEmpty(isCardVisible))
            {
                aiCardsVisible = bool.Parse(isCardVisible);
            }

            tr.Close();

            // The DurakGame constructor creates a game instance
            // with one human and one AI player, and deals hands out to
            // both of them.
            // By passing this form as a parameter, it can receive data from
            // the game and have GUI events triggered by it
            durakGame = new DurakGame(this);
            // Capture players from DurakGame
            HumanPlayer = durakGame.Players[0];
            AiPlayer    = durakGame.Players[1];
            // Set Names
            if (!String.IsNullOrEmpty(HumanName))
            {
                HumanPlayer.Name = HumanName;
            }
            if (!String.IsNullOrEmpty(AiName))
            {
                AiPlayer.Name = AiName;
            }
            lblPlayerName.Text = HumanPlayer.Name;
            lblAIName.Text     = AiPlayer.Name;
            //Throw In events
            durakGame.OnPuttingDown       += PuttingDown;
            durakGame.PuttingDownComplete += PuttingDownComplete;

            gameStats.InitializeStatistics();

            this.InitiateGame();
        }
示例#2
0
        /// <summary>
        /// AI Defend Logic
        /// </summary>
        /// <param name="river">River cards</param>
        /// <param name="deck">Deck cards</param>
        /// <returns>The card played, and the index of the card</returns>
        public Tuple <PlayingCard, int> Defend(List <PlayingCard> river, List <PlayingCard> deck = null)
        {
            PlayingCard bestViableCard  = null;
            PlayingCard lowestTrumpCard = null;

            foreach (PlayingCard card in Cards)
            {
                if (river.Last().Suit != TrumpSuit && card.Suit == TrumpSuit)
                {
                    if (lowestTrumpCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(lowestTrumpCard.Rank))
                    {
                        lowestTrumpCard = card;
                    }
                }
                else if ((card.Suit == river.Last().Suit) && DurakGame.GetDurakRank(card.Rank) > DurakGame.GetDurakRank(river.Last().Rank))
                {
                    if (bestViableCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(bestViableCard.Rank))
                    {
                        bestViableCard = card;
                    }
                }
            }
            if (bestViableCard == null && lowestTrumpCard != null)
            {
                if (river.Count > 2 || (deck.Count + Cards.Count < 12))
                {
                    bestViableCard = lowestTrumpCard;
                }
            }
            int cardIndex = Cards.IndexOf(bestViableCard);

            if (bestViableCard != null)
            {
                Cards.Remove(bestViableCard);
            }
            return(Tuple.Create(bestViableCard, cardIndex));
        }
示例#3
0
        /// <summary>
        /// AI Attack logic
        /// </summary>
        /// <param name="river">Cards in river</param>
        /// <param name="deck">Unplayed cards</param>
        /// <returns>The card played, and the index of the card</returns>
        public Tuple <PlayingCard, int> Attack(List <PlayingCard> river = null, List <PlayingCard> deck = null)
        {
            PlayingCard bestViableCard  = null;
            PlayingCard lowestTrumpCard = null;

            foreach (PlayingCard card in Cards)
            {
                //if theres no cards in the river
                if (river.Count == 0)
                {
                    if (card.Suit == TrumpSuit)
                    {
                        if (lowestTrumpCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(lowestTrumpCard.Rank))
                        {
                            lowestTrumpCard = card;
                        }
                    }
                    else if (card.Suit != TrumpSuit)
                    {
                        if (bestViableCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(bestViableCard.Rank))
                        {
                            bestViableCard = card;
                        }
                    }
                }
                else
                {
                    foreach (PlayingCard riverCard in river)
                    {
                        if (riverCard.Rank == card.Rank)
                        {
                            if (card.Suit == TrumpSuit)
                            {
                                if (lowestTrumpCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(lowestTrumpCard.Rank))
                                {
                                    lowestTrumpCard = card;
                                }
                            }
                            else if (card.Suit != TrumpSuit)
                            {
                                if (bestViableCard == null || DurakGame.GetDurakRank(card.Rank) < DurakGame.GetDurakRank(bestViableCard.Rank))
                                {
                                    bestViableCard = card;
                                }
                            }
                        }
                    }
                }
            }
            // If AI has a playable trump card and no alternative plays
            if (bestViableCard == null && lowestTrumpCard != null)
            {
                if (river.Count > 2 || (deck.Count + Cards.Count < 12))
                {
                    bestViableCard = lowestTrumpCard;
                }
            }
            int cardIndex = Cards.IndexOf(bestViableCard);

            if (bestViableCard != null)
            {
                Cards.Remove(bestViableCard);
            }
            return(Tuple.Create(bestViableCard, cardIndex));
        }