某所の某ゲーム制作系Wikiに「段階別学習」という記事があったのですが、先日久しぶりにアクセスしてみたら消失してしいて、スパムの巣窟になっていました。サルベージも叶わなさそうなので、それっぽいような記事を記憶と経験から書き起こしてみようと思います。
##1. はじめに
「ゲームが作りたかったら悪いことは言わないからRPGツクールを使え」というのが20世紀末から伝わる金言であり、私もこれには大いに賛成する次第である。しかし本記事は敢えてそれに逆らい、入門書を読み終わって、あろうことかゲーム制作などという茨の道を進もうとする際の手助けとなるような課題をいくつか用意した。「ゲームを作りたくてプログラミングを学んだ、でも使い所も目標も無いけどいつか100万本を売り上げるゲームを作るんだ!」と意気込む勇者が、この記事をひとつの足がかりとしてくれたら幸いである。
##2. 開発言語
本記事はC/C++の使用を想定する。しばらくは言語特有の機能を使う予定が無いので、他の言語を使用する者は各自読み替え等して頂きたい。
#最初の課題「数当てゲームをつくる」
以下の要件に従って「数当てゲーム」を作成せよ。
- プログラムを起動するとコンピュータが1~100までの整数をランダムに一つ決定する。以下、この数を「ナンバー」とする。
- 「数を入力してください:」と表示する。
- プレイヤーが数を入力する。
- プレイヤーの入力値に応じて、以下の動作を行う。
- 1~100の範囲外の数値、または数値以外のものが入力されたら2.に戻る
- 入力値よりもナンバーのほうが大きいならば、「それよりも大きいです」と表示して2.に戻る
- 入力値よりもナンバーのほうが小さいならば、「それよりも小さいです」と表示して2.に戻る
- 入力値とナンバーが同じ数ならば、「正解!」と表示してプログラムを終了する
#テスト項目
1.0を入力したときに再度入力を求められるか?
2.-1を入力したときは?
3.数値以外の文字を入力したときは?
#解説
くだらないほど簡単なゲームだが、これも立派なゲームである。
というのも、コンピュータゲームは凡そ私の知る限り、以下のルーチンを繰り返しているだけだ。
(初期化) → [描画] → [入力] → [処理] → [描画] → [入力] → [処理] → [描画] → [入力] → [処理] → ・・・
今回は(初期化)を1.、[描画]を2.で行い、[入力]が3.、[処理]が4.と流れる。
スーパーマリオブラザーズさえも、1秒間に何十回というペースでこのループをしているにすぎない。初期化でコースを生成して描画、コントローラーの入力を待って、ジャンプの処理を行う・・・
つまり、これでゲーム制作の真髄を余す所なく伝えたことなる。これからは君だけのゲームを作ろう!
というのはもちろん冗談で、次回はもう少しマシなゲームを作る。まだまだ黒い画面のゲームからは逃げられないが、その点は覚悟して頂きたい。