最初に少し考えてみる
ここでは、実際のコーディングに入る前に、少しだけ抽象的なことを考えてみます。
具体的なソースコードがないとイメージしにくいという人は、
いったん話半分に聞いていただいても問題ありません。
何を考えるべきか
突き詰めて考えると、
- あらゆるゲームの キャラ/障害物/アイテム etc. は、すべてデータの集まり
- ゲーム画面に動きがあるということは、データが変化しているということ
よって、作ろうとしているゲームについて次のことがわかれば、
プログラムの構成要素が分かったことになる
- データの種類には、どういったものがあるか?
- それらのデータを使う処理には、どういったものがあるか?
データの種類を考える
この世界に存在するものは何か?
今回、次のように呼ぶことにする
- プレイヤー: 遊ぶ人が操作する対象
- ブロック: 迫ってくる障害物
- エンティティ: プレイヤー と ブロック の総称
以上が今回の主役。
まずはこれらに関係するデータについて考え、その他についてはコードを書きながらおいおい考えていくことにする
一つ一つのエンティティに固有のデータは何か?
どのエンティティも、画面上のどこかに位置していて、かつ移動している
→ つまり、次のデータを持っているはず
- 位置 (x, y)
- 速度 (x, y)
なお、簡単のため、
- ブロックの「大きさ」はみんな一緒(画面からはみ出しているだけ)
- 「色」や「形」も(今のところ)みんな一緒
と考えておく。これらのデータはエンティティごとに管理しなくてもよいことになる
データの処理を考える
エンティティの持つデータが「位置」と「速度」だとして、これらはどんなふうに処理されるのか?
プレイヤーとブロックでその処理はどう違うか?
列挙してみる
-
みんな移動しているので、位置の更新が必要
- プレイヤーもブロックも、更新の仕方は変わらない(位置に加算するだけ)
-
初期値がないと始まらない。データの作成処理が必要
-
プレイヤーとブロックで異なる。
初期値が違うし、ブロックの出現位置にはランダム要素もある
-
プレイヤーとブロックで異なる。
-
それぞれの位置に描画する必要がある
- プレイヤーとブロックは見た目が違うので、描画の方法も異なる
-
プレイヤーのみ、重力で落下したりジャンプしたりする
- ブロックには無関係
整理すると……
全エンティティ共通
- 位置の更新
プレイヤー用
- 作成
- 重力の適用
- ジャンプ
- 描画
ブロック用
- 作成
- 描画