public void Play(GUIStage firstStage, int maxFPS = 30)
        {
            LoadStage(firstStage);
            this.Show();
            Graphics frontFrame    = Graphics.FromHwnd(this.Handle);
            DateTime lastFrameTime = DateTime.Now;
            double   timePerFrame  = 1000 / maxFPS;

            while (true)
            {
                if (!this.Created)
                {
                    break;
                }
                if (NextStage != null)
                {
                    CurrentStage = NextStage;
                    NextStage    = null;
                    CurrentStage.Start();
                }

                float dt = (float)(DateTime.Now - lastFrameTime).TotalSeconds;
                lastFrameTime = DateTime.Now;

                CurrentStage.Update(dt);
                CurrentStage.ClearBackFrame();
                CurrentStage.Render();
                CurrentStage.PasteToFrontBuffor(frontFrame, new Rectangle(0, 0, this.ClientSize.Width, this.ClientSize.Height));


                Application.DoEvents();
                double pause = timePerFrame - (DateTime.Now - lastFrameTime).TotalMilliseconds;
                if (pause > 0)
                {
                    System.Threading.Thread.Sleep((int)pause);
                }
            }
        }