目次
- 本書の概要
- 収録タイトル
- C++コンソールアプリの開発環境をセットアップする
- C++プログラムの記述と,本書の読み進め方
- レトロゲーム調の「美咲フォント」を利用する
- サンプルコードのダウンロード
第1章:王道RPGの戦闘シーンを作成する──コマンド選択とメッセージ表示によるターン制バトル
- テキストベースで進行するRPGの戦闘シーン
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- キャラクターのステータスを表示する
- プレイヤーのステータスを作成する
- プレイヤーのステータスを初期化する
- プレイヤーのステータスを表示する
- モンスターのステータスを作成する
- モンスターのステータスを初期化する
- モンスターを表示する
- 戦闘の流れを作成する
- 戦闘開始のメッセージを表示する
- コマンドのデータを作成する
- 各キャラクターに攻撃をさせる
- コマンド選択インターフェイスを作成する
- コマンドを選択する処理を呼び出す
- コマンドの一覧を表示する
- コマンドを選択するカーソルを追加する
- カーソルを描画する
- カーソルをキーボード入力で操作する
- 選択したコマンドを決定する
- 戦うコマンドを実装する
- 攻撃対象を設定する
- 相手に与えるダメージを計算する
- 相手にダメージを与える
- 敵を倒したときの処理を実装する
- 魔王降臨!──敵をラスボスに差し替える
- ラスボスのデータを追加する
- モンスターをラスボスに差し替える
- プレイヤーが死んだときのメッセージを表示する
- 勇者の能力を書き換えて強くする
- 逃げるコマンドを実装する
- 回復呪文コマンドを実装する
- 呪文を発動させてHPを回復させる
- 呪文を唱えたらMPを消費する
- MPが足りなければ呪文を唱えられないようにする
- 最終決戦──打倒魔王!
第2章:ライフゲームを作成する──単純なルールから生成される,複雑な生命シミュレーション
- ライフゲーム──単純なルールから展開される,複雑な生命シミュレーション
- ライフゲームの誕生と発展
- ライフゲームのルール
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- フィールドを描画する
- フィールドのデータを作成する
- フィールドを描画する
- 対象のセルがいくつの生きたセルと隣接しているかを数える
- マスごとに隣接するマスの状態をチェックする
- フィールドの範囲外の座標を無視する
- フィールドが無限にループしているものとする
- 隣接する生きたセルの数を数える
- 世代を進行させる
- キーボード入力でシミュレーションを進行させる
- シミュレーション処理を呼び出す
- 各セルの次の世代での生死判定を行う
- シミュレーションの結果を画面に反映させる
- シミュレーションを一定時間ごとに自動進行させる
- キーボード入力でシミュレーションを進行させる
- 任意のパターンをフィールドの中心に配置する
- フィールドを広くする
- パターンをフィールドに書き込む関数を作成する
- パターンをフィールドに書き込む関数をテストする
- パターンの例
- 固定物体
- 振動子
- 固定物体(周期2)
- パルサー(周期3)
- 八角形(周期5)
- 銀河(周期8)
- ペンタデカスロン(周期15)
- 長寿型
- R-ペントミノ
- ダイ・ハード
- どんぐり
- 移動物体
- グライダー
- 軽量級宇宙船
- 中量級宇宙船
- 重量級宇宙船
- 繁殖型
- グライダー銃
- 小さいパターン
- シュシュポッポ列車
- マックス
- 直線から神秘的な模様
- 十字から神秘的な模様
第3章:リバーシを作成する──マス目単位のデータ処理とAIの実装
- 2人対戦ボードゲームの定番「リバーシ」
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- 盤面を描画する
- 盤面を初期化する
- 盤面を描画する
- 盤面の初期配置を設定する
- キーボード入力でマスを選択する
- カーソルを描画する
- カーソルをキーボード入力で操作する
- カーソルの位置を初期化する
- キーボード入力で石を置く
- 現在のターンを表示する
- カーソルの座標に石を置く
- 石を置いたらターンを切り替える
- 石を置けるかどうかの判定を行う
- 石を置けなかった場合の処理を実装する
- すでに石が置かれているマスには置けないようにする
- 指定したマスに石を置けるかどうかを判定する
- 挟んだ相手の石をひっくり返す
- 石をひっくり返す処理を追加する
- 石をひっくり返す
- どこにも石を置けない場合はパスする
- 石を置ける場所があるかどうか判定する関数を作成する
- どこにも石を置けなければパスする
- 勝敗の結果を表示する
- 結果の表示へ遷移する
- 勝敗を判定して結果を表示する
- ゲームが終了したら初期化する
- ゲームモードの選択画面を作成する
- ゲームモードの選択処理に遷移する
- ゲームモードを一覧表示する
- ゲームモードをキーボード入力で選択する
- カーソルを表示する
- キーボード入力で選択を切り替える
- 選択を決定してモード選択画面を抜ける
- モードごとにAIの担当を設定する
- 石を置くマスを自動で判断するAIを実装する
- AIの処理に遷移する
- 置けるマスのリストを作成する
- 置ける場所の中からランダムで置く
- AIのターンではカーソルを消す
- AIどうしの対戦による観戦モードを追加する
第4章:落ち物パズルゲームを作成する──落ちてくるブロックをそろえて消すリアルタイムパズル
- パズルゲームの定番,落ち物パズル
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- フィールドを作成する
- ゲームを初期化する関数を追加する
- 画面を描画する関数を追加する
- フィールドのデータを作成する
- フィールドを描画する
- 落下ブロックを追加する
- 落下ブロックの種類を定義する
- 落下ブロックの形状を定義する
- 落下ブロックのデータを作成する
- 落下ブロックを初期化する
- 落下ブロックを描画する
- 落下ブロックをキーボードで操作する
- キーボード入力をする
- 落下ブロックを移動させる
- 落下ブロックを回転させる
- ブロックをリアルタイムに落下させる
- ゲームをリアルタイムに進行させる
- ブロックを落下させる
- 落下ブロックとフィールド上のブロックとの当たり判定を行う
- 落下ブロックとフィールドの当たり判定の関数を作成する
- 落下ブロックとフィールドの当たり判定を行う
- 落下ブロックをキーボード入力で操作するときの当たり判定
- 落下ブロックが自動落下するときのフィールドとの当たり判定
- 落下ブロックをフィールドに積み上げる
- 新しい落下ブロックを発生させる
- ブロックが天井まで積み上がったらゲームオーバーにする
- 横にそろった行のブロックを消す
- そろった行のブロックを消す関数を作成する
- ブロックが横にそろったかどうかを判定する
- そろった1行を削除する
- 消した行の上のブロックを下に1マスずらす
第5章:ドットイートゲームを作成する──リアルタイムアクションと4種のAI
- ビデオゲーム黎明期に大ヒットした「ドットイート」
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- 迷路を作成する
- 迷路のデータを作成する
- 迷路を初期化する
- 迷路を描画する
- プレイヤーを作成する
- プレイヤーのデータを作成する
- プレイヤーを描画する
- プレイヤーの初期座標を設定する
- プレイヤーを操作する
- プレイヤーと壁の当たり判定を行う
- プレイヤーを上下左右にループ移動させる
- プレイヤーがドットを食べるようにする
- 気まぐれモンスターを作成する
- 気まぐれモンスターのデータを作成する
- 気まぐれモンスターを描画する
- 一定時間ごとに実行される,リアルタイム処理を実装する
- モンスターの種類によって,AIの処理を分岐させる
- 気まぐれモンスターの移動先を取得する
- 気まぐれモンスターを動かす
- 気まぐれモンスターが壁を通り抜けないようにする
- 気まぐれモンスターが後戻りしないようにする
- 追いかけモンスターを作成する
- 追いかけモンスターのデータを追加する
- 追いかけモンスターを描画する
- 経路探索アルゴリズムの解説
- 2点間の最短経路を探索する処理を作成する
- 探索開始地点から各マスへの最短距離を取得する
- 探索者のマスから各マスへの最短経路を取得する
- 追いかけモンスターを動かす
- 追いかけモンスターが壁を通り抜けないようにする
- 追いかけモンスターが後戻りしないようにする
- 先回りモンスターを作成する
- 先回りモンスターのデータを追加する
- 先回りモンスターを描画する
- 先回りモンスターの移動先を取得する
- プレイヤーの向きを取得する
- プレイヤーの3マス先の座標を取得する
- 先回りモンスターを動かす
- 挟み撃ちモンスターを作成する
- 挟み撃ちモンスターのデータを追加する
- 挟み撃ちモンスターを描画する
- 挟み撃ちモンスターを動かす
- ゲームオーバーの処理を作成する
- プレイヤーとモンスターが重なったかどうかを判定する処理を作成する
- ゲームオーバーになったらゲームをリセットする
- モンスターがプレイヤーに突っ込んできた場合もゲームオーバーにする
- ゲームオーバーのメッセージを画面中央に表示する
- エンディングの処理を作成する
- ドットをすべて食べ尽くしたかどうかを判定する
- エンディング画面を作成する
- ゲームをクリアしたらエンディング画面を表示する
第6章:擬似3Dダンジョンゲームを作成する──アスキーアートによる擬似3D描画のギミック
- ビデオゲーム黎明期のRPGのスタンダード,擬似3Dダンジョン
- コンピュータRPGの原点『ウィザードリィ』の誕生
- 『ウィザードリィ』の国内への影響
- 疑似3D視点のギミックに迫る
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- デバッグ用のマップを描画する
- 迷路のデータを作成する
- 迷路のマップを描画する
- 迷路をランダムで生成する
- 迷路を生成するアルゴリズム
- 迷路をランダムで作成する処理を呼び出す
- 迷路のすべてのマスを壁で塞ぐ
- 壁を掘る関数を作成する
- 壁を掘ってよいかどうかを判定する
- 最初の通路を生成する
- 掘るべき壁をすべて掘り尽くす
- 迷路を移動できるようにする
- マップにプレイヤーを表示する
- キーボード入力でプレイヤーを操作する
- 方向転換する
- 進行方向に前進する
- 迷路を擬似3D描画する
- 擬似3D描画用のデータを作成する
- 迷路のアスキーアートを作成する
- アスキーアート参照用のテーブルを作成する
- 視界内の相対座標のテーブルを作成する
- 迷路を擬似3D視点で描画する処理を呼び出す
- 描画用のアスキーアートを合成する
- 迷路を描画する
- 擬似3D描画用のデータを作成する
- クエストを追加する
- プレイヤーがゴールに到達したかどうかを判定する
- エンディングのメッセージを表示する
第7章:戦国シミュレーションゲームを作成する──秀吉も仰天! 一夜で戦国シミュレーション
- 「進軍」コマンドしかない,シンプルな戦国シミュレーションゲーム
- 本章の戦国シミュレーションゲームの時代背景
- 時代設定──1570年 信長の天下布武前夜
- 戦国大名列伝
- 織田信長
- 武田信玄
- 上杉謙信
- 徳川家康
- 北条氏政
- 足利義昭
- 毛利元就
- 伊達輝宗
- 島津義久
- 長宗我部元親
- プログラムの基本構造を作成する
- プログラムのベース部分を作成する
- コンソールの設定
- 地図を描画する
- 大名のデータを作成する
- 城のデータを作成する
- 年のデータを作成する
- 地図を描画する処理を呼び出す
- 地図を描画する
- 各城の行動ループを作成する
- 行動順をランダムにする
- 各城にターンを回していく
- ターンの順を描画する
- 各ターンの共通メッセージを表示する
- プレイヤーの大名を選択できるようにする
- プレイヤーの大名の選択フェイズに移行する
- プレイヤーが担当する大名を選択する
- 進軍コマンドを作成する
- 城どうしの接続データを作成する
- 進軍先の城をキーボード入力する
- 進軍兵数をキーボード入力する
- 攻城戦を作成する
- 攻城戦を発生させる
- 最初のメッセージを表示する
- 攻城戦の戦闘を実装する
- 攻城戦の戦闘を終了する
- 攻城戦の結果を表示し,戦後処理をする
- 攻撃側が勝ったときの処理を実装する
- 守備側が勝ったときの処理を実装する
- 敵の大名のAIを実装する
- 隣接した敵の城のリストを作成する
- 一番弱い敵の城に攻め込む処理を作成する
- 味方の前線の城に兵を送るAIを実装する
- 敵と隣接する味方の城のリストを作成する
- 兵を送る先の城を決定する
- 送る兵数を決定する
- 兵を味方の城に送る
- イベントを追加する
- 1年経過したときに兵数を変動させる
- プレイヤーの大名家が滅亡したときの処理を作成する
- ゲーム終了時に年表を表示する
- ゲームオーバーで年表を表示する
- ゲームが終了したらゲームをリセットする
- プレイヤーが天下統一したときの処理を作成する
- 歴史イベント「本能寺の変」を追加する
- 明智光秀
- 豊臣秀吉
Appendix 1:戦国シミュレーションゲームを三国志に改造する──データの書き換えで,戦国を三国に!
- 戦国シミュレーションゲームのデータを書き換えて,三国志のゲームに改造する
- そもそも『三国志』とは何か──四大奇書の一つ『三国志演義』
- 三国志武将列伝
- 曹操(孟徳)
- 劉備(玄徳)
- 孫策(伯符)
- 呂布(奉先)
- 袁紹(本初)
- 劉表(景升)
- 劉璋(季玉)
- 馬騰(寿成)
- 公孫瓚(伯珪)
- 李傕(稚然)
- 時代設定──196年 呂布の台頭と曹操の献帝掌握
- ゲームデータを書き換える
- コンソールの設定
- 君主のデータを書き換える
- 州のデータを書き換える
- サンプルの地図を描画する
- 文字化けを修正する
- 正式な地図を描画する
- 州の接続情報を書き換える
- 戦国時代固有の設定を三国志向けに変更する
- 兵数の単位を変更する
- メッセージを修正する
Appendix 2:王道RPG 完全版──戦闘シーンにフィールドシーンを追加して,完全なRPGに仕上げよう!
- 王道RPGの世界を完全再現したい!──第1章の戦闘シーンを拡張して,完全なRPGにしよう
- プログラムの基本構造を作成する
- 第1章のプログラムを拡張する
- コンソールの設定
- フィールドを追加する
- フィールドのデータを作成する
- フィールドを描画する
- マップ上にプレイヤーを追加する
- マップ上にプレイヤーを描画する
- プレイヤーをキーボード入力で操作する
- プレイヤーが侵入不可のマスに移動できないようにする
- プレイヤーの移動に合わせて画面をスクロールする
- 王様の城を実装する
- 王様の城のデータを追加する
- プレイヤーの初期位置を設定する
- 王様の城を描画する
- 王様の城からフィールドに出る
- フィールドから王様の城に入る
- 人物との会話イベントを実装する
- 王様との会話イベントを実装する
- 姫との会話イベントを実装する
- 魔王の城を実装する
- 魔王の城のデータを追加する
- 魔王の城に入れるようにする
- 魔王の城を描画する
- 魔王の城からフィールドに出る
- 魔王との会話イベントを実装する
- 戦闘を発生させる
- フィールドで雑魚モンスターと遭遇する
- 姫にステータスを回復してもらう
- 魔王とのイベント戦闘を発生させる
- プレイヤーが死んだら王様のところに戻される
- エンディングを実装する
- 索引
- 著者紹介