public static void Main()
        {
            Regex rex = new Regex("[0-1]?[0-9]x[0-1]?[0-9]");
            string command = "";

            var stuffs = Initialize(rex, command);

            BulletMatrix frame = new BulletMatrix(stuffs.Y, stuffs.X);

            frame.Load(false);
            //Console.Clear();
            frame.BalanceGrid(true, true);
            do
            {
                command = "";
                rex = new Regex("[0-9A-Z][0-9A-Z]x[0-9A-Z][0-9A-Z]|quit");
                command = PromptForCommand(rex, command, frame);

                frame.enablePrinting = true;

                if (!Regex.IsMatch(command, "quit"))
                {
                    KeyValuePair<string, string> stuff = ParseCommandIntoSwapCodes(command);
                    Position2D start = frame.CommandToPosition(stuff.Key);
                    Position2D end = frame.CommandToPosition(stuff.Value);

                    if (!frame.CanSwapPositions(start, end))
                    {
                        Console.WriteLine("these pieces can't be swapped...");
                        System.Threading.Thread.Sleep(750);
                        //Console.Clear();
                        continue;
                    }

                    //Console.Clear();
                    frame.Debug_PrintBulletMatrix();
                    System.Threading.Thread.Sleep(100);

                    frame.SwapPositions(start, end);
                    //Console.SetCursorPosition(0, 0);
                    frame.Debug_PrintBulletMatrix();
                    System.Threading.Thread.Sleep(100);

                    var matches = frame.CollectMatchedBullets();

                    if (matches.Count == 0)
                    {
                        Console.WriteLine();
                        Console.WriteLine("Bad Swap...");
                        System.Threading.Thread.Sleep(750);
                        frame.SwapPositions(start, end);
                        //Console.Clear();
                    }

                    frame.BalanceGrid(true, false);

                    //Console.SetCursorPosition(0, 0);
                    frame.Debug_PrintBulletMatrix();

                    if (!frame.CanMatchMore())
                    {
                        Console.WriteLine();
                        Console.WriteLine("No more available matches :'(...");
                        System.Threading.Thread.Sleep(750);
                        command = "";
                        rex = new Regex("[YyNn]");
                        do
                        {
                            Console.WriteLine();
                            Console.WriteLine("Would you like to play again?[(Y)es or (N)o]:");
                            command = Console.ReadLine();

                        } while (!rex.IsMatch(command));

                        if (Regex.IsMatch(command, "[Yy]"))
                        {
                            frame.UnLoad();
                            frame.Load(true);
                            frame.BalanceGrid(false, true);
                            command = "";
                        }
                        else
                        {
                            command = "quit";
                        }
                    }
                }
            } while (command != "quit");

            Console.WriteLine("GameOver!");
            Console.WriteLine("Press any key to continue...");
            //Console.ReadKey(true);
        }
        private static string PromptForCommand(Regex rex, string command, BulletMatrix frame)
        {
            do
            {
                //Console.Clear();
                frame.Debug_PrintBulletMatrix();
                Console.WriteLine();
                Console.WriteLine("Please specify two adjacent pieces to swap, or type quit to leave.");
                Console.WriteLine("(example: 5Ax52):");
                command = Console.ReadLine();

            } while (!rex.IsMatch(command) && command != "quit");
            return command;
        }