/// <summary>
 /// Makes a bet on two or four adjacent *numbered* spaces at once, as though betting on an edge or corner.
 /// </summary>
 /// <param name="tableSpaces">The array of spaces to bet on. These should be references to TableSpaces from the RouletteTable object.
 /// This method assumes that if four spaces are passed, they will be passed in numerical order.</param>
 /// <param name="betAmount">The amount to be bet.</param>
 /// <returns>Returns true if the bet is valid.</returns>
 public bool MakeBet(TableSpace[] tableSpaces, Decimal betAmount)
 {
     if (tableSpaces.Length != 2 || tableSpaces.Length != 4)
     {
         return(false);
     }
     else if (tableSpaces.Length == 2)
     {
         // Check that these spaces are normal numbered spaces.
         if (tableSpaces[0].Value > 0 || tableSpaces[1].Value > 0)
         {
             return(false);
         }
         // The % 3 operation ensures that its not a wraparound.
         if ((tableSpaces[0].Value + 1 == tableSpaces[1].Value && tableSpaces[0].Value % 3 != 0) || (tableSpaces[0].Value - 1 == tableSpaces[1].Value && tableSpaces[1].Value % 3 != 0))
         {
             BetSpace  = new TableSpace(tableSpaces, 17);
             BetAmount = betAmount;
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         if (tableSpaces[0].Value > 0 || tableSpaces[1].Value > 0 || tableSpaces[2].Value > 0 || tableSpaces[3].Value > 0)
         {
             return(false);
         }
         if ((tableSpaces[0].Value + 1 == tableSpaces[1].Value && tableSpaces[0].Value % 3 != 0) || (tableSpaces[0].Value - 1 == tableSpaces[1].Value && tableSpaces[1].Value % 3 != 0))
         {
             if ((tableSpaces[2].Value + 1 == tableSpaces[3].Value && tableSpaces[2].Value % 3 != 0) || (tableSpaces[2].Value - 1 == tableSpaces[3].Value && tableSpaces[3].Value % 3 != 0))
             {
                 BetSpace  = new TableSpace(tableSpaces, 8);
                 BetAmount = betAmount;
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             return(false);
         }
     }
 }
 /// <summary>
 /// Checks if the space rolled by the wheel was covered in this bet.
 /// </summary>
 /// <param name="rolledSpace">The space rolled by the wheel.</param>
 /// <returns>The total amount won in this bet.</returns>
 public decimal CheckWinnings(TableSpace rolledSpace)
 {
     if (BetSpace.Value == rolledSpace.Value)
     {
         return(BetAmount * BetSpace.PayoutMultiplier);
     }
     else if (BetSpace.ContainsSpaces != null)
     {
         foreach (TableSpace x in BetSpace.ContainsSpaces)
         {
             if (x.Value == rolledSpace.Value)
             {
                 return(BetAmount * BetSpace.PayoutMultiplier);
             }
         }
     }
     return(0); // You get nothing. You lose. Etc etc.
 }
        /// <summary>
        /// Creates a European (no 00 space) roulette table.
        /// </summary>
        public RouletteTable()
        {
            NormalSpaces = new TableSpace[37];
            for (int i = 0; i < 37; i++)
            {
                NormalSpaces[i] = new TableSpace(i, 35);
            }

            TableSpace[] TwoToOneASpaces = new TableSpace[12];
            for (int i = 1; i < 12; i++)
            {
                TwoToOneASpaces[i] = NormalSpaces[i * 3 - 2];
            }
            TwoToOneA = new TableSpace(TwoToOneASpaces, 2);

            TableSpace[] TwoToOneBSpaces = new TableSpace[12];
            for (int i = 2; i < 12; i++)
            {
                TwoToOneBSpaces[i] = NormalSpaces[i * 3 - 4];
            }
            TwoToOneB = new TableSpace(TwoToOneBSpaces, 2);

            TableSpace[] TwoToOneCSpaces = new TableSpace[12];
            for (int i = 3; i < 12; i++)
            {
                TwoToOneCSpaces[i] = NormalSpaces[i * 3 - 6];
            }
            TwoToOneC = new TableSpace(TwoToOneCSpaces, 2);

            TableSpace[] FirstDozenSpaces = new TableSpace[12];
            for (int i = 1; i < 13; i++)
            {
                FirstDozenSpaces[i - 1] = NormalSpaces[i];
            }
            FirstDozen = new TableSpace(FirstDozenSpaces, 2);

            TableSpace[] SecondDozenSpaces = new TableSpace[12];
            for (int i = 13; i < 25; i++)
            {
                SecondDozenSpaces[i - 13] = NormalSpaces[i];
            }
            SecondDozen = new TableSpace(SecondDozenSpaces, 2);

            TableSpace[] ThirdDozenSpaces = new TableSpace[12];
            for (int i = 25; i < 37; i++)
            {
                ThirdDozenSpaces[i - 25] = NormalSpaces[i];
            }
            ThirdDozen = new TableSpace(ThirdDozenSpaces, 2);

            TableSpace[] FirstHalfSpaces = new TableSpace[18];
            for (int i = 1; i < 19; i++)
            {
                FirstHalfSpaces[i - 1] = NormalSpaces[i];
            }
            OneThroughEighteen = new TableSpace(FirstHalfSpaces, 1);

            TableSpace[] SecondHalfSpaces = new TableSpace[18];
            for (int i = 19; i < 37; i++)
            {
                SecondHalfSpaces[i - 19] = NormalSpaces[i];
            }
            NineteenThroughThirtySix = new TableSpace(SecondHalfSpaces, 1);

            TableSpace[] EvenSpaces = new TableSpace[18];
            for (int i = 2; i < 37; i += 2)
            {
                EvenSpaces[i / 2 - 1] = NormalSpaces[i];
            }
            Even = new TableSpace(EvenSpaces, 1);

            TableSpace[] OddSpaces = new TableSpace[18];
            for (int i = 1; i < 37; i += 2)
            {
                OddSpaces[i / 2] = NormalSpaces[i];
            }
            Odd = new TableSpace(OddSpaces, 1);

            Red = new TableSpace(new TableSpace[]
            {
                NormalSpaces[1],
                NormalSpaces[3],
                NormalSpaces[5],
                NormalSpaces[7],
                NormalSpaces[9],
                NormalSpaces[12],
                NormalSpaces[14],
                NormalSpaces[16],
                NormalSpaces[18],
                NormalSpaces[19],
                NormalSpaces[21],
                NormalSpaces[23],
                NormalSpaces[25],
                NormalSpaces[27],
                NormalSpaces[30],
                NormalSpaces[32],
                NormalSpaces[34],
                NormalSpaces[36]
            }, 1);

            Black = new TableSpace(new TableSpace[]
            {
                NormalSpaces[2],
                NormalSpaces[4],
                NormalSpaces[6],
                NormalSpaces[8],
                NormalSpaces[10],
                NormalSpaces[11],
                NormalSpaces[13],
                NormalSpaces[15],
                NormalSpaces[17],
                NormalSpaces[20],
                NormalSpaces[22],
                NormalSpaces[24],
                NormalSpaces[26],
                NormalSpaces[28],
                NormalSpaces[29],
                NormalSpaces[31],
                NormalSpaces[33],
                NormalSpaces[35]
            }, 1);
        }
 /// <summary>
 /// Makes a bet on a single space.
 /// </summary>
 /// <param name="tableSpace">The space from your RouletteTable object that you wish to bet on.</param>
 /// <param name="betAmount">The amount to be bet.</param>
 public void MakeBet(TableSpace tableSpace, Decimal betAmount)
 {
     BetSpace  = tableSpace;
     BetAmount = betAmount;
 }
 public RouletteBet(TableSpace tableSpace, Decimal betAmount)
 {
     MakeBet(tableSpace, betAmount);
 }