C言語でシューティングゲームを作りたいと思っているあなた。
ゲームなんて作ったことないから、自分では無理だと決めつけないでくださいね。
私自身もそうでした。
C言語を勉強したものの、自分でも作れるか不安に思ったことがあります。
ですが、それは杞憂でした。
今回は、C言語でシューティングゲームを作るときの準備と制作の手順を解説していきます。
C言語でシューティングゲームを作るための前準備
C言語でゲーム制作するために必要な準備は2つです。
1つ目は、Visual Studioのインストールです。
既にインストールされている場合、2つ目を読んでください。
まだインストールしていないなら、Visual Studio 公式サイトからダウンロードできます。
2つ目は、DXライブラリのダウンロードです。
DXライブラリは無料のゲーム開発ライブラリです。
これを使うことで、キャラの表示、操作などゲームに必要な機能を実装させることができるんですよね。
DXライブラリ 公式サイトからダウンロードしてください。
ダウンロードしたら、こちらの手順に沿って、Visual StudioからDXライブラリを使えるように設定しましょう。
なお、C言語での基本的なゲームの作り方を本で勉強される場合は、こちらを参考にしてみてください☟
C言語によるシューティングゲーム制作手順【ソースコード付き】
シューティングゲームを作るのはそれほど難しくありません。
簡単なものであれば、下記に挙げたものだけを実装すればいいだけです。
- キャラを描画させてみる
- 操作キャラに弾を撃たせる
- 敵を移動させる
- 敵に弾を撃たせる
- 当たり判定を作る
単にこの記事を見るだけでなく、DXライブラリのリファレンスも見ながらコーディングすることをおすすめします。
その方が、よりプログラミングを理解できるからです!
キャラを描画させてみる
まずは、キャラを表示させましょう!
キャラを表示させるコードは以下の通りです。
大事なポイントは2つです。
1つ目は、LoadGraph関数で、画像をロードします。
2つ目は、DrawGraph関数で、画面に画像を表示します。
どちらもDXライブラリの関数なんですよね。
この2つの関数を使うことで簡単にキャラを表示できるんです。
サンプルでは関数を一緒に書いてますが、実際にゲームを作る際は分けた方がいいです。
例えば、LoadImage関数とDrawImage関数を定義して、その中で上記の関数をそれぞれ使うといった感じですね。
ロード用と表示用の関数を作ることで、他の関数に書かずに済みますし、コードの管理もしやすくなります。
操作キャラに弾を撃たせる
次は、キャラに弾を撃たせてみましょう。
弾を撃たせるには、キーボードからの入力を受け付ける必要があります。
さらに、キーを押したときに弾にスピードを加える必要があります。
キーを押したときに弾を撃つコードは以下の通りです。
大事なポイントは2つあります。
1つ目は、GetHitKeyStateAll関数で、全てキーが押されているかを調べる関数です。
2つ目は、キーが押されている間のフレーム数を保存するKey配列です。
これで、キーが押されている間にキャラから弾を打ち続けられるんですよね。
サンプルはエンターキーを押している間はずっと撃ち続けます。
サンプルを改良して、他のキーで撃つことも可能です。
さらに、最初にキーを押したときだけ弾を打てられるようにもできます。
弾を撃つ方法はさまざまなので、是非色々試してください。
どのような仕様にするかを考えるのはものすごく楽しいですよ!
私自身考えて作り、弾を撃てるように実装できたとき、ものすごく感動しました。
あなたも是非試してください!
敵を移動させる
次は、敵を移動させてみましょう。
まずは、敵の行動パターンを定義している関数を宣言しています。
このexternについてですが、これで外部で定義して関数や変数などが使えるようになるんですね。
行動パターンを呼ぶ関数と切り分けられるので、コードの管理がしやすくなります。
次に、関数用の配列を作って、そこに定義した行動パターンを代入してます。
これで、配列を呼ぶだけでそれぞれの行動パターンを呼べるようになります。
switch文を使ってコードが長くならずにすみますし、新しい行動パターンを追加するとき、配列に代入するだけすむんですよね。
敵の行動パターンを考えるのは大変で、それを実装するのも苦労しました。
でも、自分の考えた行動パターン通りに動くのを見たときは、ものすごく嬉しかったですね。
是非、色々なパターンを考えて、実装してみてください!
敵に弾を撃たせる
今度は、敵に弾を撃たせてみましょう。
敵の攻撃パターンの作り方は、行動パターンと同じですね。
なので、作るのは難しくありません。
行動パターンのコーディングができれば、攻撃パターンも作れます。
敵の攻撃パターンを考えるのは大変で、それを実装するのも苦労しました。
ですが、行動パターン同様、考えとおりの動作をし、それを見たときはとても嬉しかったです。
あなたも是非、様々なパターンを試してみましょう!
当たり判定を作る
最後に、弾の当たり判定を作ってみましょう。
では、下記にコードを載せますね。
if文の条件式を見て、疑問に思われた方はいるでしょう。
普通なら、弾の座標が敵画像の左右のX座標内にある場合、以下の式を思い浮かべると思います。
これでも当たり判定はいけます。
しかし、2つの条件式をよく見ると、重複している式がありますよね。
そう、以下の2つです。
bulletLeft < enemyRight
enemyLeft < bulletRight
この2つの式はサンプルと一致しています。
なぜ、これで当たり判定ができるのかを解説しますね。
では、1つ目の条件式についてです。
弾の左X座標が敵の右X座標より左にあるという意味です。
つまり敵の左右のX座標の範囲内にあるときの当たり判定となります。
ただし、次の条件式も満たすと弾のX座標は敵の左右X座標の範囲外となりますね。
bulletRight < enemyLeft
2つ目の条件式も同様です。
次の条件式も満たすと、敵の左右X座標の範囲外となります。
enemyRight < bulletLeft
つまり、両方の式を満たせば、弾のX座標は敵の左右X座標の範囲内にあるというわけです。
当たり判定は他にも種類があります。
点と円、円と円、円と四角など様々です。
その中で私が実装したのは四角同士の当たり判定ですね。
理由は使用していた画像が、四角形に色を塗っただけの簡単なものだったからなんです。
だから、当たり判定はサンプルのようになりました。
もし画像が円形のようなものなら、サンプルコードではうまくいきません。
当たり判定は使う画像に応じて、変える必要があります。
なので、他の当たり判定も是非試してください!
C言語によるシューティングゲーム制作手順のまとめ
C言語で2Dシューティングゲームを作る際に、実装すべき機能を紹介しました。
サンプルはコードを一部抜粋したものです。
なので、是非サンプルを参考にしながら、一からゲームを作ってみてください。
では、以下に制作手順をまとめました。
- キャラを描画させてみる
- 画像をロードするLoadGraph関数
- 画像を表示するDrawGraph関数
- ロード用と表示用の関数を分ける
- 操作キャラに弾を撃たせる
- キーが押されているかを調べるGetHitKeyStateAll関数
- キーが押されている間のフレーム数を保存するKey配列
- 敵を移動させる
- 敵の行動パターンを外部ファイルで定義
- 関数の配列宣言
- 行動パターンは外部のファイルに定義する
- アイディア次第でたくさん作れる
- 敵に弾を撃たせる
- 作り方は敵の行動パターンと同じ
- 行動パターンと同様、攻撃パターンもアイディア次第でたくさん作れる
- 当たり判定を作る
- 当たり判定にはいくつか種類がある
- 使う画像に応じた当たり判定を作る必要がある
ゲームを実際に作るのはものすごく大変です。
私自身も、初めて作ったときは苦労しました。
参考サイトを見ながら実装しても、実際の挙動が違って、コードの間違い探しが辛かったです。
デバッグ作業も大変でしたし、さらに行動パターンを考えるのも苦労しました。
ですが、それらを乗り越えて、ゲームを作れたときの達成感は忘れられません。
また、友人に遊んでもらい、楽しいと言われたときも嬉しかったです。
作ったことがないからといって、やってみないのはもったいないですよ。
あなたも是非、ゲーム制作に挑戦しましょう!
もちろん、シューティングゲーム以外のものを作りたいなら、それについて調べて作ればいいんです。
ゲームはアイディアが大事ですので、思いついたら、すぐにやってみることです!
なお、あなたがプログラミングスクールで勉強したい場合は、以下の記事をご参考になさって下さい。