ファミコンの仕様② - プログラミング編

ゲームは60分の1秒を周期にして動く
たいていのゲームは60分の1秒ごとに一定の処理を繰り返している。なぜ60分の1秒かといえば、その理由はテレビの画面更新周期が60分の1秒だからだ。

テレビは画面の左上から右へ水平方向に画面の表示を更新していき、右上の端までいくと左端にもどりすこし下にさがってまた右へむかって画面を更新していく。それを繰り返し右下に到達し画面全体を更新するまでの時間が60分の1秒というわけだ。ゲームはその周期に合わせて処理をしている。合わせないと画面の乱れなどが生じてしまう。この周期を「フレームレート」という。

ゲームプログラムの処理の流れ
たとえばシューティングゲームの場合、以下のような処理を60分の1秒周期でループする。


  残機数を3にする
  スコアを0にする

    A.
    自機を出現させる
    敵機を出現させる

    B. 自機の処理
    コントローラの入力を読み取る
    入力にしたがって自機を移動させる(座標を変更する)
    自機が画面外に出たら:
      自機が画面内にもどるように座標を調整する
    ボタンを押したら:
      新しい弾を出現させる
    自機が弾に当たったら(当たり判定処理):
      自機を消す
      残機数を減らす
      残機数が0でなければ:
        A. にもどる
      残機数が0ならば:
        C. にジャンプ

    敵の処理(すべての敵について行う)
    敵を自機に近づく方向に動かす
    敵が弾に当たったら(当たり判定処理):
      スコアを加算する
      敵を消す
      弾を消す
      新しい敵をランダムな位置に出現させる
    敵が画面外に出たら:
      敵を消す
      新しい敵をランダムな位置に出現させる

    弾の処理(すべての弾について行う)
    弾を発射された方向に動かす
    弾が画面外に出たら:
      弾を消す

    スクロールの処理
    スクロールの位置を更新する
    最終画面に到達したら:
      D. にジャンプ

    画面の更新処理
    VBlankを待つ
    VBlankを検出したら:
      スプライトを更新する
      BGを更新する
      画面をスクロールさせる
    B. に戻って繰り返す

    C.
    ゲームオーバー画面を表示する
    もう一度プレイする場合は最初に戻る

    D.
    ゲームクリア画面を表示する
    もう一度プレイする場合は最初に戻る


ブラウン管テレビの場合、電子ビームをブラウン管表面に当てることで画面を発光させる。左上が画面に電子ビームを当てていき右下に到達して画面全体が更新されたあと、電子ビームを右下から左上に移動させる。このときわずかに時間がかかる。これを「垂直帰線期間」といい、ファミコンのプログラミングでは「VBlank」ともいう。

ファミコンのプログラムはアセンブリ言語で書かれている。当時、マシンもコンパイラも性能が充分ではなく、高級言語よりもアセンブリ言語でゲーム開発をしたほうがファミコンの限られた性能を最大限に引き出すことができた。

ファミコンの驚くべき発想力 -限界を突破する技術に学べ- (PCポケットカルチャー)
松浦 健一郎 司 ゆき
技術評論社
売り上げランキング: 256562

0 件のコメント:

コメントを投稿