public override bool Play()
        {
            foreach (UIObject obj in elements)
            {
                obj.Draw();
            }

            for (int i = 0; i < LABELS.Length; i++)
            {
                Painter.Write(LABELS[i], Console.WindowWidth / 2 - 13, 3 + i * 2, ConsoleColor.White);
            }

            textBox.DrawBorder();
            textBox.WriteText("Settings", TextAlign.Center);
            textBox.WriteText("------------", TextAlign.Center);
            textBox.WriteText(DESCRIPTIONS[index], TextAlign.Center);
            textBox.WriteText();
            textBox.WriteText(INSTRUCTIONS[(int)prevUIType], TextAlign.Center);
            textBox.WriteText("Press esc to return to the title screen", TextAlign.Center);

            Console.SetCursorPosition(0, 0);

            while (true)
            {
                Console.SetCursorPosition(0, 0);
                ConsoleKeyInfo key = Input.GetKey(false);
                Spinner        spn;

                switch (key.Key)
                {
                //Selects the next item down
                case ConsoleKey.DownArrow:
                    elements[index].Toggle();
                    index = (index + 1) % elements.Length;
                    elements[index].Toggle();

                    UpdateTextBox();
                    break;

                //Selects the next item up
                case ConsoleKey.UpArrow:
                    elements[index].Toggle();
                    index = index == 0 ? elements.Length - 1 : index - 1;
                    elements[index].Toggle();

                    UpdateTextBox();
                    break;

                //If the player selects a Character Display, allow them to enter a new character
                case ConsoleKey.Enter:
                    if (!(elements[index] is CharacterDisplay))
                    {
                        break;
                    }

                    CharacterDisplay cd = (CharacterDisplay)elements[index];
                    cd.ToggleChanging();

                    char c = ' ';

                    //Loops until the player enters a valid character (alphanumeric + most punctuation)
                    while (!VALID_CHARS.IsMatch(c.ToString()))
                    {
                        c = Input.GetKey().KeyChar;
                    }

                    cd.ToggleChanging(false);
                    cd.ChangeCharacter(c);

                    Settings.SetValue(KEYS[index], c.ToString());
                    break;

                //Is a spinner is selected, goes to the spinner's previous item
                case ConsoleKey.LeftArrow:
                    if (!(elements[index] is Spinner))
                    {
                        break;
                    }

                    spn = (Spinner)elements[index];

                    spn.Prev();

                    Settings.SetValue(KEYS[index], spn.SelectedItem);
                    break;

                //If a spinner is selected, goes to the spinner's next item
                case ConsoleKey.RightArrow:
                    if (!(elements[index] is Spinner))
                    {
                        break;
                    }

                    spn = (Spinner)elements[index];

                    spn.Next();

                    Settings.SetValue(KEYS[index], spn.SelectedItem);
                    break;

                case ConsoleKey.Escape:
                    //This line fixes an issue with the title screen
                    //  It appears that using a non-character key causes issues with writing to the console
                    //  This line will be invisible, as the background and forground are both black.
                    Painter.Write("This fixes a problem", 0, 0);
                    return(false);
                }
            }
        }