Appearance
第10回 C++実践 独自ゲームの制作 1 / 企画とクラス設計
前回: 第09回 ポインター入門 / メモリアドレスとオブジェクトの寿命 / 次回: 第11回 C++実践 独自ゲームの制作 2 / 基本動作の実装
前回の振り返り
ポインターとオブジェクトの寿命に触れました
- ポインターは、値ではなく場所を持つ変数です
nullptrは、何も指していない状態を表します- オブジェクトには寿命があり、使えなくなった場所を参照すると危険です
- 今回からは、これまでの要素を使って独自ゲーム制作に入ります
今回の目的
作るゲームの形を決める
- 小さく完成できるゲーム案を決める
- 必要な画面、操作、ルールを明確にする
- 登場するオブジェクトを洗い出す
- クラスや構造体に分ける候補を作る
今回の授業内容
C++実践 独自ゲームの制作 1 / 企画とクラス設計
- 作品の最小完成形を決める
- 操作方法と勝敗条件を決める
- 必要なデータを洗い出す
- クラス設計の下書きを作る
- 次回すぐ実装に入れる状態まで準備する
独自ゲーム制作
小さく作って 最後まで持っていきます
欲張りすぎ注意
最小完成形を決める
完成させる範囲を小さくする
操作できる
目的がある
成功または失敗がある
結果が表示される
もう一度遊べる見通しがある
最初から要素を増やしすぎると、完成まで届きにくくなります
企画メモの項目
コードに必要な情報まで書く
- タイトル
- ジャンル
- プレイヤーの操作
- ゲームの目的
- クリア条件またはスコア条件
- ゲームオーバー条件
- 使う画像、音、エフェクト
企画の例
小さな避けゲーム
プレイヤーを左右に動かす
上から落ちてくる障害物を避ける
一定時間生き残るとクリア
障害物に当たるとゲームオーバー
スコアは生存時間で増える
これくらいの範囲なら、今までの内容で実装できます
オブジェクトを洗い出す
画面に出るものを単位にする
| 要素 | 役割 | 数 |
|
|
|
😐
| Player | 操作するキャラクター | 1 |
| Obstacle | 避ける対象 | 複数 |
| Effect | 当たったときの反応 | 複数 |
| GameState | ゲーム全体の状態 | 1 |
- 画面に出るもの、状態だけを持つものを分けて考えます
持つ情報を考える
値として必要なものを決める
| 要素 | 持つ情報 |
|
|
|
| Player | 位置、大きさ、速度 |
| Obstacle | 位置、大きさ、落下速度、使用中か |
| Effect | 位置、半径、残り時間、使用中か |
| Game | 状態、スコア、タイマー |
- 先に情報を決めると、構造体やクラスを作りやすくなります
処理を分ける
更新、判定、描画を分けて考える
更新: 位置や状態を変える
判定: 当たったか、条件を満たしたかを調べる
描画: 画面に表示する
入力: キーやボタンの状態を処理へつなげる
どの処理がどの要素に関係するかをメモします
クラス設計の下書き
最初は細かくしすぎない
cpp
class Player;
struct Obstacle;
struct Effect;
enum GameState
{
Playing,
GameOver,
GameClear
};- プレイヤーは操作と描画を持つため、クラスにしやすいです
- 複数出る障害物やエフェクトは、構造体と配列から始めても構いません
実装順を決める
画面に出るものから積み上げる
- プレイヤーを表示する
- プレイヤーを動かす
- 障害物を表示する
- 障害物を動かす
- 衝突判定を入れる
- スコアや状態管理を入れる
- 音やエフェクトを足す
- 途中で動かせる状態を保つと、原因を追いやすくなります
企画で避けたいこと
今回は完成を優先する
広いマップを作る
複雑なAIを入れる
大量のステージを作る
ネットワーク通信を入れる
3D表現へ広げる
面白さは、小さなルールでも作れます
実習1: 企画メモを作る
小さく完成する案にする
- タイトルを書く
- 操作方法を書く
- 目的を書く
- クリア条件またはスコア条件を書く
- ゲームオーバー条件を書く
- 1文で説明できない場合は、少し小さくします
実習2: オブジェクト一覧を作る
登場する要素を分ける
- 画面に出るものをすべて書く
- それぞれが1つだけか複数かを決める
- 持つ情報をメモする
- 更新、判定、描画のどれが必要かを書く
実習3: 実装順を決める
次回の作業に入れる形にする
- 最初に表示するものを決める
- 最初に操作できるものを決める
- 最初に判定するものを決める
- 今回中に作る範囲、次回以降に回す範囲を分ける
今回のまとめ
今日のポイント
- 独自制作では、最小完成形を決めることが重要です
- 画面に出るものを洗い出すと、必要なデータが見えます
- 更新、判定、描画に分けると、実装順を決めやすくなります
- 次回は基本動作を実装し、遊べる土台を作ります