Esempio n. 1
0
        /// <summary>Starts a bouncy ball</summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            BasicBall Ball = new BasicBall {
                XSpeed      = 3,
                BallGraphic = new BasicGraphic(squareball3x3, "SquareBall 3x3"),
                Bounciness  = 0.9,
                Gravity     = 0.5
            }; //default settings

            bool ShowInfo   = true;
            int  FPS        = 20;
            bool StopOnZero = false;

            string ErrorString = "";

            foreach (string arg in args)
            {
                try {
                    //split
                    string[] SplitArg = arg.Split('=');
                    if (SplitArg.Length < 2)
                    {
                        continue;
                    }

                    //Parse
                    switch (SplitArg[0].ToUpper())
                    {
                    case "/GRAPHIC":
                        if (SplitArg[1].ToUpper().EndsWith(".DF"))
                        {
                            Ball.BallGraphic = BasicGraphic.LoadFromFile(SplitArg[1]);
                        }
                        if (SplitArg[1].ToUpper().EndsWith(".HC"))
                        {
                            Ball.BallGraphic = HiColorGraphic.LoadFromFile(SplitArg[1]);
                        }
                        break;

                    case "/X":
                        Ball.X = double.Parse(SplitArg[1]);
                        break;

                    case "/Y":
                        Ball.Y = double.Parse(SplitArg[1]);
                        break;

                    case "/XSPEED":
                        Ball.XSpeed = double.Parse(SplitArg[1]);
                        break;

                    case "/YSPEED":
                        Ball.YSpeed = double.Parse(SplitArg[1]);
                        break;

                    case "/SPEED":
                        //ok Speed is going to be formatted like: VEL:ANG (IE: 10:30 is 10 speed units at 30 degrees up
                        string[] splitsplitarg = SplitArg[1].Split(':');

                        double Vel = double.Parse(splitsplitarg[0]);
                        double Ang = double.Parse(splitsplitarg[1]) * (Math.PI / 180);

                        Ball.XSpeed = Vel * Math.Cos(Ang);
                        Ball.YSpeed = -1 * Vel * Math.Sin(Ang);   //negative since positive is *down*

                        break;

                    case "/BOUNCE":
                    case "/BOUNCINESS":
                        Ball.Bounciness = double.Parse(SplitArg[1]);
                        break;

                    case "/GRAV":
                    case "/GRAVITY":
                        Ball.Gravity = double.Parse(SplitArg[1]);
                        break;

                    case "/FPS":
                        FPS = int.Parse(SplitArg[1]);
                        break;

                    case "/SHOWINFO":
                        ShowInfo = bool.Parse(SplitArg[1]);
                        break;

                    case "/STOPONZERO":
                        StopOnZero = bool.Parse(SplitArg[1]);
                        break;

                    default:
                        break;
                    }
                }
                catch (FormatException) { ErrorString += "\nCould not parse parameter for " + arg; }
                catch (FileNotFoundException) { ErrorString += "\nCould not find file for " + arg; }
                catch (IndexOutOfRangeException) { ErrorString += "\nNo Parameter for " + arg; }
            }

            if (!string.IsNullOrWhiteSpace(ErrorString))
            {
                RenderUtils.Echo("\nErrors occurred while parsing parameters:\n" + ErrorString + "\n\nPress CTRL+C to stop execution, or any other key to continue.");
                RenderUtils.Pause();
                Console.Clear();
            }

            BallRenderer(Ball, ShowInfo, FPS, StopOnZero);
        }