Example #1
0
        public void OpenLevel(int level_nr)
        {
            if (level_nr > last_level_nr)
            {
                return;
            }


            this.level_nr = level_nr;

            if (!game.Init(level_nr, out width, out height))
            {
                MessageBox.Show("Поздравляю!!!!!");
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                return;
            }

            InitPictures();
            game.ShowLevel();
        }
Example #2
0
        public void OpenLevel(int level_nr)
        {
            if (level_nr > last_level_nr)
            {
                return;
            }


            this.level_nr = level_nr;
            if (!game.Init(level_nr, out width, out height))
            {
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                return;
            }
            //width = 10;
            //height = 8;

            InitPictures();
            game.ShowLevel();
        }
Example #3
0
        static void Main(string[] args)
        {
            Thread.CurrentThread.Priority = ThreadPriority.Highest; // スレッドの優先度を上げておく
            // 画面リフレッシュレートと目標フレームレートが等しい場合は垂直同期を有効に、等しくない場合は垂直同期を無効にする
            DX.SetWaitVSyncFlag(DX.GetRefreshRate() == TargetFPS ? DX.TRUE : DX.FALSE);
            DX.SetWindowText("ゲームタイトル");                                   // ウィンドウのタイトル
            DX.SetGraphMode(Screen.SCREEN_WIDTH, Screen.SCREEN_HIGTH, 32); // ウィンドウサイズ(画面解像度)の指定
            DX.ChangeWindowMode(DX.TRUE);                                  // ウィンドウモードにする(DX.FALSEを指定するとフルスクリーンになる)
            DX.SetAlwaysRunFlag(DX.TRUE);                                  // ウィンドウが非アクティブでも動作させる

            DX.DxLib_Init();                                               // DXライブラリの初期化

            DX.SetMouseDispFlag(DX.TRUE);                                  // マウスを表示する(DX.FALSEを指定すると非表示になる)
            DX.SetDrawScreen(DX.DX_SCREEN_BACK);                           // 描画先を裏画面とする(ダブルバッファ)

            game = new Game();
            game.Init();

            DX.ScreenFlip();
            stopwatch.Start();

            while (DX.ProcessMessage() == 0) // ウィンドウが閉じられるまで繰り返す
            {
                // FPSの計測
                fpsFrameCount++;
                if (fpsFrameCount >= 60)
                {
                    long  elapsedTicks = stopwatch.Elapsed.Ticks - fpsTicks;
                    float elapsedSec   = elapsedTicks / 10000000f;
                    CurrentFPS = fpsFrameCount / elapsedSec;

                    fpsFrameCount = 0;
                    fpsTicks      = stopwatch.Elapsed.Ticks;
                }

                game.Update();

                if (DX.GetWaitVSyncFlag() == DX.TRUE)
                {
                    if (EnableFrameSkip)
                    {
                        long waitTicks = nextFrameTicks - stopwatch.Elapsed.Ticks; // 余った時間

                        if (waitTicks < 0)                                         // 目標時刻をオーバーしている
                        {
                            if (skipCount < MaxAllowSkipCount)                     // 連続フレームスキップ数が最大スキップ数を超えていなければ
                            {
                                skipCount++;                                       // フレームスキップ(描画処理を飛ばす)
                            }
                            else
                            {
                                // 最大スキップ数を超えてるので、フレームスキップしないで描画
                                nextFrameTicks = stopwatch.Elapsed.Ticks;
                                Draw();
                            }
                        }
                        else
                        {
                            Draw();
                        }

                        nextFrameTicks += IntervalTicks;
                    }
                    else
                    {
                        Draw();
                    }
                }
                else
                {
                    long waitTicks = nextFrameTicks - stopwatch.Elapsed.Ticks; // 余った時間(待機が必要な時間)

                    if (EnableFrameSkip && waitTicks < 0)
                    {
                        if (skipCount < MaxAllowSkipCount)
                        {
                            skipCount++; // フレームスキップ(描画処理を飛ばす)
                        }
                        else
                        {
                            nextFrameTicks = stopwatch.Elapsed.Ticks;
                            Draw();
                        }
                    }
                    else
                    {
                        if (waitTicks > 20000) // あと2ミリ秒以上待つ必要がある
                        {
                            // Sleep()は指定した時間でピッタリ戻ってくるわけではないので、
                            // 余裕を持って、「待たなければならない時間-2ミリ秒」Sleepする
                            int waitMillsec = (int)(waitTicks / 10000) - 2;
                            Thread.Sleep(waitMillsec);
                        }

                        // 時間が来るまで何もしないループを回して待機する
                        while (stopwatch.Elapsed.Ticks < nextFrameTicks)
                        {
                        }

                        Draw();
                    }
                    nextFrameTicks += IntervalTicks;
                }
            }

            DX.DxLib_End(); // DXライブラリ終了処理
        }