Esempio n. 1
0
 /// <summary>
 ///     Create a <see cref="PriorityQueue{T}" /> with given <see cref="IHeap{T}" />.
 ///     If no <see cref="IHeap{T}" /> is given, <see cref="BinaryHeap{T}" /> and <see cref="PriorityComparer{T}" /> will be
 ///     used.
 /// </summary>
 /// <param name="heap">Initial Heap.</param>
 public PriorityQueue(IHeap <IPriority <T> > heap = null)
 {
     if (heap == null)
     {
         heap = Heaps.Default(new PriorityComparer <T>());
     }
     _heap = heap;
 }
Esempio n. 2
0
        /// <summary>
        /// Allows the computer to make a random, legal, non-suicidal move.
        /// </summary>
        public void AITakeTurn()
        {
            Random rando = new Random();

            if (Heaps.Sum() > 1)             //Do not intentionally lose.
            {
                bool validHeap = false;
                int  heap      = 0;
                int  beads     = 0;
                while (!validHeap)
                {
                    heap = rando.Next(Heaps.Length);

                    if (Heaps[heap] != 0)
                    {
                        validHeap = true;
                    }
                }

                bool validBeads = false;
                while (!validBeads)
                {
                    beads = rando.Next(Heaps[heap]) + 1;
                    if (Heaps.Where(x => x > 0).Count() == 1 && beads == Heaps.Sum())
                    {
                        validBeads = false;
                    }
                    else
                    {
                        validBeads = true;
                    }
                }

                Heaps[heap] -= beads;

                Console.Clear();
                Console.WriteLine($"{P2Name} removed {beads} from heap {heap+1}.");
            }
            else             //The only available move is to lose.
            {
                for (int i = 0; i < Heaps.Length; i++)
                {
                    if (Heaps[i] == 1)
                    {
                        Heaps[i] -= 1;
                        Console.Clear();
                        Console.WriteLine($"{P2Name} removed 1 from heap {i+1}");
                        break;
                    }
                }
            }
        }