本書は、コンピュータゲームの各ジャンルを代表する7本のゲームの作り方を、実際の開発手順に沿って解説します。プログラミング未経験者でも、手順どおりに進めれば必ず完成するつくりになっています。言語仕様の解説はしませんが、最小限の工程ごとに動作確認を行うので、各命令文の役割が実感しやすいようになっています。作成するゲームは、RPGの戦闘シーン、ライフゲーム、リバーシ、落ち物パズル、ドットイート、擬似3Dダンジョン、戦国シミュレーションの7本と、RPGにフィールドシーンを追加、戦国シミュレーションを三国志に改造するAppendixを収録しています。徐々にゲームができあがっていくわくわく感を体験してください。
目次●小一時間でゲームをつくる──7つの定番ゲームのプログラミングを体験
本書の概要
収録タイトル
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視点で描画する処理を呼び出す
## 描画用のアスキーアートを合成する
## 迷路を描画する
# クエストを追加する
## プレイヤーがゴールに到達したかどうかを判定する
## エンディングのメッセージを表示する
第7章:戦国シミュレーションゲームを作成する──秀吉も仰天! 一夜で戦国シミュレーション
# 「進軍」コマンドしかない、シンプルな戦国シミュレーションゲーム
# 本章の戦国シミュレーションゲームの時代背景
## 年代設定
## 戦国大名列伝
### 織田信長
### 武田信玄
### 上杉謙信
### 徳川家康
### 北条氏政
### 足利義昭
### 毛利元就
### 伊達輝宗
### 島津義久
### 長宗我部元親
# プログラムの基本構造を作成する
## プログラムのベース部分を作成する
## コンソールの設定
# 地図を描画する
## 大名のデータを作成する
## 城のデータを作成する
## 年のデータを作成する
## 地図を描画する処理を呼び出す
### 地図を描画する
# 各城の行動ループを作成する
## 行動順をランダムにする
## 各城にターンを回していく
### ターンの順を描画する
### 各ターンの共通メッセージを表示する
# プレイヤーの大名を選択できるようにする
## プレイヤーの大名の選択フェイズに移行する
## プレイヤーが担当する大名を選択する
# 進軍コマンドを作成する
## 城どうしの接続データを作成する
## 進軍先の城をキーボード入力する
## 進軍兵数をキーボード入力する
# 攻城戦を作成する
## 攻城戦を発生させる
## 最初のメッセージを表示する
## 攻城戦の戦闘を実装する
## 攻城戦の戦闘を終了する
## 攻城戦の結果を表示し、戦後処理をする
### 攻撃側が勝ったときの処理を実装する
### 守備側が勝ったときの処理を実装する
# 敵の大名のAIを実装する
## 隣接した敵の城のリストを作成する
## 一番弱い敵の城に攻め込む処理を作成する
## 味方の前線の城に兵を送るAIを実装する
### 敵と隣接する味方の城のリストを作成する
### 兵を送る先の城を決定する
### 送る兵数を決定する
### 兵を味方の城に送る
# イベントを追加する
## 1年経過したときに兵数を変動させる
## プレイヤーの大名家が滅亡したときの処理を作成する
## ゲーム終了時に年表を表示する
## ゲームオーバーで年表を表示する
## ゲームが終了したらゲームをリセットする
## プレイヤーが天下統一したときの処理を作成する
## 歴史イベント「本能寺の変」を追加する
### 明智光秀
### 豊臣秀吉
Appendix 1:戦国シミュレーションゲームを三国志に改造する──データの書き換えで、戦国を三国に!
# 戦国シミュレーションゲームのデータを書き換えて、三国志のゲームに改造する
## そもそも『三国志』とは何か──四大奇書の一つ『三国志演義』
## 三国志武将列伝
## このAppendixの三国志のシナリオ
# ゲームデータを書き換える
## コンソールの設定
## 君主のデータを書き換える
## 州のデータを書き換える
## サンプルの地図を描画する
## 文字化けを修正する
## 正式な地図を描画する
## 州の接続情報を書き換える
# 戦国時代固有の設定を三国志向けに変更する
## 兵数の単位を変更する
## メッセージを修正する
Appendix 2:王道RPG 完全版──戦闘シーンにフィールドシーンを追加して、完全なRPGに仕上げよう!
# 王道RPGの世界を完全再現したい!──第1章の戦闘シーンを拡張して、完全なRPGにしよう
# プログラムの基本構造を作成する
## 第1章のプログラムを拡張する
## コンソールの設定
# フィールドを追加する
## フィールドのデータを作成する
## フィールドを描画する
# マップ上にプレイヤーを追加する
## マップ上にプレイヤーを描画する
## プレイヤーをキーボード入力で操作する
## プレイヤーが侵入不可のマスに移動できないようにする
## プレイヤーの移動に合わせて画面をスクロールする
# 王様の城を実装する
## 王様の城のデータを追加する
## プレイヤーの初期位置を設定する
## 王様の城を描画する
## 王様の城からフィールドに出る
## フィールドから王様の城に入る
## 人物との会話イベントを実装する
### 王様との会話イベントを実装する
### 姫との会話イベントを実装する
# 魔王の城を実装する
## 魔王の城のデータを追加する
## 魔王の城に入れるようにする
## 魔王の城を描画する
## 魔王の城からフィールドに出る
## 魔王との会話イベントを実装する
# 戦闘を発生させる
## フィールドで雑魚モンスターと遭遇する
## 姫にステータスを回復してもらう
## 魔王との戦闘を発生させる
## プレイヤーが死んだら王様のところに戻される
# エンディングを実装する
索引
著者紹介