第2.0話 共同作業

 母親は帰りが遅くなるらしい。家に帰り風呂を洗おうとしたところで、お米を洗っといてと電話がかかってきた。

 お米を先に洗う。焚いている間に適当な野菜炒めを作り、風呂も洗う。炊飯器とは便利なもので、早く焚こうと思うと30分ほどで焚けるのだ。

 風呂を貯めている間に食事を済ませ、少しゆっくりした後に風呂に入る。風呂から上がるころには、20時になっていた。少し勉強するかと、自室に行き勉強机に座ったところで、放課後に寄ったコンピュータ室でのことを思い出す。

 今のうちにやっておくか。

 春休み中に買ったノートパソコンを起動し、頭の中を働かせる。

 頼まれたことは難しいことじゃない。絵を画面に表示して動かすことだ。自分から、キーボード操作で上下左右に動かせると言ったので、それは最低限やらないといけないことだ。

 とりあえず飛行機の代わりになる画像を用意する。そういえば、アニメーションは必要だろうか。飛行機自体が変化することはないだろうが、後ろにエンジンのジェット噴射を描くなら必要である。

 連絡先を交換しておいてよかった。すぐに確認ができる。

「描いてもらう飛行機ですが、ジェット噴射等のアニメーションはありますか?」

 無いほうがプログラムが少なく済むので、無いことを願う。

 返信がすぐにくる。

「あったほうがよさそうですね。お願いします」

願いは行動しないと叶わないと聞くが、今回は行動しないほうがよかったのかもしれない。

 とりあえず、アニメーションのテスト用として、四角形の画像を4枚用意した。真っ白な背景に黒色で0、1、2、3と数字がそれぞれに書いてあり、これを順番に表示することで、アニメーションができているかの確認をするのだ。パラパラ漫画みたいなものである。

 プログラムを書くためのソフトを起動して、新しいプロジェクトを作る。プログラミングといっても種類は様々で、今回使うのはC++という言語だ。標準の機能だけでは画像を表示することすら出来ないので、ライブラリというものをインクルードする必要がある。無料のライブラリでも機能が充実しているので、ありがたいことだ。

 さっそくプログラムを書いていく。最初から全部書こうとするのは大変なので、いくつかに分けて書いていく。

 まずは画像の表示からだ、と言いたいところだが、メインループというものを先に書いていく。

 プログラムは基本的に上から下に実行される。そして、一番下にいけばプログラムは終了する。しかしそれだと、1フレームしか動かないことになり、一瞬でプログラムが終了してしまう。アプリケーションを起動しても、一瞬で閉じてしまうのだ。それではゲームにならない。

 そこで、処理を終えたら上に戻ってまた処理を繰り返していく、といった感じにプログラムを書いていく。この繰り返しをループといい、プログラム全体の繰り返しをメインループという。

 メインループを抜け出す処理も必要だ。ずっと処理が繰り返されては、ゲームを終えることが出来ない。

 とりあえず今回は、Escapeキーが押されたらループを抜け出すようにしよう。こういう何をされたらというのを条件式という。

 メインループとそれを抜け出す処理が書けたら、一旦動かしてみる。黒い画面が出てきて、Escapeキーを押したら、画面が消えることを確認する。

 ここでやっと画像の表示だ。それには当然、画像データの読み込みが必要だ。読み込みも表示も、ライブラリのおかげで簡単に出来る。

 今回はアニメーション処理をするので、画像データを複数読み込まないといけない。こういう時に便利なのが配列というものだ。同じ種類のデータを連続して扱うことができる。それぞれ順番に番号が振られているので、表示するときにはその番号の順番で呼び出すと、アニメーションをすることが出来る。もちろん、最後の画像を呼び出したら、また最初に戻るようにする。

 画像を表示するには、画像データ以外に、画面のどこに表示するかの位置情報が必要である。この位置情報を変化させていくことで、画面の中で動かすことが出来るのだ。

 とりあえず、画面の真ん中に表示するように、値を直接入れた。

 他にも、回転させるなら角度の情報、大きさを変えるならそれの情報も必要だが、今回はいらないだろう。

 頭の中である程度考えてから、実際にプログラムを書いていく。プログラムが書けたら、実行して動かしてみる。

 白い四角形に数字が書かれた画像が出てくる。そして、次の画像に切り替わる、が、想定通りにはいかなかった。画像は綺麗に切り替わることなく、まるで、混ざりあったように出てきた。

 どうしたものかと、腕を組もうとした瞬間に思い出す。画像を表示させてから次のフレームに移るときに、画面を綺麗にしないといけないのだ。じゃないと、どんどん上から画像が塗られていき、混ざってしまうのだ。

 もちろん、この画面を綺麗にする処理も、ライブラリのおかげで簡単にできる。さっそく、画面を綺麗にする処理を書いて、再度実行して動かす。次は想定通り、画像が綺麗に切り替わりながら表示された。

 最後にやるのは、キーボード入力で、画像を上下左右に動かせるようにすることだ。

 まずは画像表示の位置情報を用意する。2Dゲームなので、横と縦の2つだ。もう1つ、どれくらいの速さで進むのかの情報も用意する。

 次に、メインループの中で、特定のキーが押されていれば画像を動かす、というプログラムを書く。

 右矢印キーが押されていれば、位置情報の横の値を増やし、左矢印キーが押されていれば、減らしていく。上下移動も同じように書いていく。

 一旦プログラムを実行して動かしてみる。

 想定通り、矢印キーを押して画像を動かす事ができた。

 これでひとまず終了、といきたいところだが、もう1つやることがある。

 プログラムの処理速度は、パソコンの性能によって変わる。画像が動く速さが変わってしまうのだ。

 それに対処する方法は、現在の時刻と前フレームの時刻を用意して、差分を求める。そして、その差分を画像を動かす速さに掛けるのだ。これをデルタタイムという。

 さっそくデルタタイムを実装して動かしてみる。

 同じパソコンでそのまま動かしても処理速度は変わらないため、デルタタイムの確認はしにくい。そこで、疑似的に処理速度を落とすために、Sleepという一定時間プログラムを止める関数をメインループの中に追加した。

 Sleepで止める時間を色々試してみる。ある程度の時間を止めると画面がカクついたが、飛行機が動く速さは一定になった。成功だ。

 これで頼まれたことは終わった。画像を表示し、キーボード操作で上下左右に動かせる。任意のタイミングで画像を変えられるようにし、簡単なアニメーションもできた。

 時計を見ると、まだ21時にはなっておらず、勉強をする前に少し休憩しようと、スマートフォンを取り出した。勉強机から離れ、ベッドで横になる。レンダリングとは何か、パディングとは何かと、気になっていた用語の意味を調べていると、隆也から通知が来た。

 「調子はどうだ相棒」

 お調子者に調子を聞かれるのはあまりいい気がしない。どうせ悪いなんて返事が返ってくることを、微塵も考えてないのだ。

 とりあえず、お願いされたプログラムは一通り終えたということを伝える。

 すぐに返信をしたつもりだったが、既読がつかないので、スマートフォンをベッドに適当に置いた。

 寝転んで目をつぶり、今日は何を勉強しようか考える。sin、cosを使い、画像を円運動させることを春休みにやった。このままシューティングゲームを作るとすれば、ボスの周りを回り続ける敵を作ることができるだろう。

 ゲーム1つ作ってくれよ。隆也に言われた言葉がふと浮かぶ。今なら作ってもいいかもなと少しだけ思う。今まではネットで拾ってきた絵を使いまわしていたため、不格好なものしか作れなかった。もしも秋晴さんが描いてくれるのなら、ゲームと呼べるものが出来るかもしれない。

 勉強を始めるために、ベッドから立ち上がり勉強机に向かう。スリープモードになっているパソコンをたたき起こし、ウェブブラウザを開ける。sin、cosを使い、いろんな軌道をする弾でも作ろうかと思ったが、それはシューティングゲームを作ることになったらやろう。数学で他に勉強したいのは行列と微分積分だが、その前にやってみたいことがある。

 ゲームエンジンというゲームを簡単に作れるものがあるのだが、ダウンロードしたきり一度も触っていない。このゲームエンジンを使えば、スマートフォンで動くアプリケーションも簡単に作れるらしい。

 このゲームエンジンを開発した会社は親切で、公式サイトに豊富なチュートリアルがある。まずは初心者用の入門編を覗く。

 とりあえず、3Dの玉転がしをやることにした。いずれはこのチュートリアルでやったものをスマートフォンでも動かせるようにしてみよう。

 小さな箱の中で玉を転がし、コインに見立てたブロックを取っていく、という簡単なゲームを作り終えたころには、10時過ぎになっていた。すでに母親と父親が帰ってきていたらしく、リビングから話し声が聞こえる。

 明日は休日だが今日は早めに寝よう。リビングに行き、おかえりとおやすみの挨拶を済ませ、水を一杯飲む。洗面所で歯磨きをした後、トイレで用を済ます。ベッドに行き、20分ほど本を読んでから部屋の電気を消す。

 そういえば、隆也から返信は来てるだろうか。来ていたとして、明日返せばいいだろうか。すごく眠いわけではないが、スマートフォンに手を伸ばそうとは思わない。明日の自分に任せよう。いつものように明日がやってくるはずだ。きっと明日の自分は、今の自分と同じ自分のはずだ。どうでもいいことを考えながら寝れるのが、平和というものかもしれない。

 俺は平和を噛みしめながら、明日の自分に生まれ変わろうとした。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る