最初に少し考えてみる

最初に少し考えてみる

ここでは、実際のコーディングに入る前に、少しだけ抽象的なことを考えてみます。

具体的なソースコードがないとイメージしにくいという人は、
いったん話半分に聞いていただいても問題ありません。

何を考えるべきか

突き詰めて考えると、

  • あらゆるゲームの キャラ/障害物/アイテム etc. は、すべてデータの集まり
  • ゲーム画面に動きがあるということは、データが変化しているということ

よって、作ろうとしているゲームについて次のことがわかれば、
プログラムの構成要素が分かったことになる

  1. データの種類には、どういったものがあるか?
  2. それらのデータを使う処理には、どういったものがあるか?

データの種類を考える

この世界に存在するものは何か?

Abstract Flappy Bird

今回、次のように呼ぶことにする

  • プレイヤー: 遊ぶ人が操作する対象
  • ブロック: 迫ってくる障害物
  • エンティティプレイヤーブロック の総称

以上が今回の主役。
まずはこれらに関係するデータについて考え、その他についてはコードを書きながらおいおい考えていくことにする

一つ一つのエンティティに固有のデータは何か?

どのエンティティも、画面上のどこかに位置していて、かつ移動している
→ つまり、次のデータを持っているはず

  • 位置 (x, y)
  • 速度 (x, y)

なお、簡単のため、

  • ブロックの「大きさ」はみんな一緒(画面からはみ出しているだけ)
  • 「色」や「形」も(今のところ)みんな一緒

と考えておく。これらのデータはエンティティごとに管理しなくてもよいことになる

Abstract Flappy Bird

データの処理を考える

エンティティの持つデータが「位置」と「速度」だとして、これらはどんなふうに処理されるのか?
プレイヤーとブロックでその処理はどう違うか?

列挙してみる

  • みんな移動しているので、位置の更新が必要
    • プレイヤーもブロックも、更新の仕方は変わらない(位置に加算するだけ)
  • 初期値がないと始まらない。データの作成処理が必要
    • プレイヤーとブロックで異なる。
      初期値が違うし、ブロックの出現位置にはランダム要素もある
  • それぞれの位置に描画する必要がある
    • プレイヤーとブロックは見た目が違うので、描画の方法も異なる
  • プレイヤーのみ、重力で落下したりジャンプしたりする
    • ブロックには無関係

整理すると……

全エンティティ共通

  • 位置の更新

プレイヤー用

  • 作成
  • 重力の適用
  • ジャンプ
  • 描画

ブロック用

  • 作成
  • 描画