ゲーム用のループ処理を実装する方法

ゲームだと、普通にプログラムを作っていてはいけません。
描画速度をちゃんと管理しないとゲームとして成立しません。
そこでゲームループを実装する方法です。

プログラム

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Loop {
  static class Program {
    private
    const int waitTimes = (int)(1000.0 / 30.0);
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main() {
      Form1 form = new Form1();
      form.Show();
      int targetTimes = System.Environment.TickCount & int.MaxValue;
      targetTimes += waitTimes;
      while (form.Created) {
        int tickCount = System.Environment.TickCount & int.MaxValue;
        if (targetTimes <= tickCount) {
          // 描画処理本体
          form.UpdateDisplay();
          // 次回の描画予定時刻を更新する
          targetTimes = (targetTimes + waitTimes) & int.MaxValue;
        }
        System.Threading.Thread.Sleep(1);
        Application.DoEvents();
      }
    }
  }
}

これはプログラムクラスに書きます。
フォーム側にUpdateDisplay()を実装してください。

まとめ

ゲームを作ってみたかった。
作る技術を手に入れたときには、時間がなくなるもの。
若者には頑張って欲しい。

C#

Posted by @erestage