はじめまして、プログラミングというもに触れ始めて約10ヶ月の筆者です。
とある事情でゲームを作ったのですが、
よくわかんねぇ!!
ってなったというよりもかってに勘違いしていたシーンについて
初心者ながら書いていこうと思います。
マジで始めたばかりなのでもっと素晴らしい書き方があるはず(絶対にある)ですが、
動けばよし!
目次
- シーンについて大雑把に理解!
- シーンの中身ってどうなっている?
- シーンマネージャーの中身ってどうなっている?
- 実際にどう作ったのか
シーンについて大雑把に理解!
まずは、シーンについて理解していきたいと思います。
ゲームをプレイしている時を思い返してみてください。
タイトル画面やキャラメイク、戦闘シーンなどなど様々な画面がありますね。
その一つ一つの画面で、できることが変わってきます。
そして、その画面一つ一つがシーンになります。
シーンにはその画面に必要なシステムを持っています。
さらに、そのシーンを管理しているものがシーンマネージャーと呼ばれます。
シーンマネージャーによってシーンが切り替わっています。
シーンの中身ってどうなっている?
システム内部の話に移りましょう。
シーンを作るのに必要なものを考えていきます。
シーンには表示したい画面で動かしたいシステムを組み込みます。
例
選択画面 → 選択方法、アイコン、画像など
ゲーム画面 → プレイヤー操作、敵の動き、時間表示など
これらをメインループの中に呼び出すことで、制作したシステムが動きます。
シーンマネージャーの中身ってどうなっている?
今度はシーンマネージャーの中身です。
ここには、呼び出すシーンを切り替えるシステムを作ります。
シーンマネージャーがシーンで行った"次のシーンに移る行為"を感知して、次のシーンに移す行為を行います。
ややこしいですね
実際にどう作ったのか
さて、コードの話に移りましょう。
今回は
シーンによってスペースキーを押したときに表示される図形が異なる
というものを以下に載せたいと思います。
このコードは Visual Studio 2022 かつ Dxライブラリ を使用して書かれたものです。
まずは、シーンを簡単に作っていきましょう。
今回、シーン1はスペースを押すと円が表示される
ようにしました。
/* シーン1 */
void Scene_No_1() {
/* "ここはシーン1です"と表示する */
DrawString(10, 10, "ここはシーン1です", GetColor(255, 255, 255));
/* スペースキーが押されていたら円を表示する */
if (CheckHitKey(KEY_INPUT_SPACE) == true) {
DrawCircle(500, 350, 100, GetColor(255, 255, 255), TRUE);
}
}
次に、シーン2はスペースを押すと四角が表示される
ようにしました。
/* シーン2 */
void Scene_No_2() {
/* "ここはシーン2です"と表示する */
DrawString(10, 10, "ここはシーン2です", GetColor(255, 255, 255));
/* スペースキーが押されていたら四角を表示する */
if (CheckHitKey(KEY_INPUT_SPACE) == true) {
DrawBox(400, 250, 600, 450, GetColor(255, 255, 255), TRUE);
}
}
そして、肝心のシーンマネージャーです。
今回は、SceneNumberという変数を用意し、その値によって呼び出されるものが変わる
ようにしました。
ゲーム内で起こった事柄を感知して値を変えるプログラムを組むことで
決定した後にシーンを変えたり、ゲームオーバーになったらゲームを終わったりできます。
/* シーンマネージャー */
int Scene_Number = 1;
void Scene_Manager() {
/* 1キーが押されるとScene_Numberが1になり、2キーが押されるとScene_Numberが2になる */
if (CheckHitKey(KEY_INPUT_1) == true) {
Scene_Number = 1;
}
if (CheckHitKey(KEY_INPUT_2) == true) {
Scene_Number = 2;
}
/* Scene_Numberが1の時Scene_No_1が呼び出され、2の時Scene_No_2が呼び出される */
if (Scene_Number == 1) {
Scene_No_1();
}
if (Scene_Number == 2) {
Scene_No_2();
}
}
さて、ここまで出来たらScene_Manager()
をメインループの中にいれたら完成です。
いかがだったでしょうか。
ゲーム制作の助けになれば幸いです。
ここまで読んでいただきありがとうございました。