クロの制作日記

クロの制作日記

田舎の大学生がUnityとか機械学習関連の制作物をひたすらアップします。ブログで紹介したコード一覧https://github.com/kuroshum/blog_code

初心者が頑張るゲームプログラミングC++の練習問題4(人工知能を用いたゲーム開発)

ゲームプログラミングC++

以下の本でSDLOpenGLを用いたC/C++ゲーム開発の勉強を進めています。


ゲームプログラミングC++

各章には練習問題があるので、その問題の私なりの解答コードと詰まった箇所をここに残しておきます。


環境構築編はこちら
SDL_imageというライブラリを使うので、それの環境構築がまだな人は以下の記事から構築をしてください。
kurora-shumpei.hatenablog.com

練習問題1はこちら
kurora-shumpei.hatenablog.com

練習問題2はこちら
kurora-shumpei.hatenablog.com

練習問題3はこちら
www.kuroshum.com




練習問題の内容

第4章ではステートマシンや経路探索、ゲーム木などのゲームで用いられる人工知能が主題となっています。それらを駆使してタワーディフェンスゲームと(重力付き)四目ならべゲームを制作して終了です

練習問題では、

  1. タワーディフェンスゲームの敵と塔をステートマシンで実装
  2. 四目ならべゲームをアルファ・ベータ法で実装

練習問題の解答

解答のコードは以下のGithubリポジトリのChapter4に置いています。

ただ、誠に申し訳ないのですが、今回は練習問題の2(四目ならべ)は実装していません...。卒論が忙しいのと、練習問題1(タワーディフェンスゲーム)だけで大分時間がかかってしまって、これ以上時間をかけると終わらない気がしたからです...。すみません...。

また時間があれば練習問題2も実装してみます。

一応変更した箇所と追加した箇所にはコメントアウトを入れておきました(どこか抜けているところがあるかもしれません。。ごめんね)。Star押してくれたらありがたいです。
github.com

ただ、解答のコードはC/C++初心者の私が作成したもので、これが正解だ!というわけではありませんし、他にもっと簡単かつ上手い実装方法があるということを念頭に置いた上で上記の解答コードを参考にしてくれたらありがたいです。

f:id:kurora-shumpei:20200125013536p:plain
リザルト画面

個人的に詰まった箇所

Astarアルゴリズムの挙動

私(バカ)はコードと本に書いてある説明だとあまりAstarアルゴリズムの挙動がわからなかったので、紙に挙動を書いてみたらやっと理解できました。以下に、Astarの挙動をgifにしてみたので、確認してみてください。ゴールまで到達したら、親ノードをさかのぼることで経路探索ができちゃうのですね。

f:id:kurora-shumpei:20191217215314g:plain
Astar

ノードをオープンセットに追加する度に親ノードを設定しているので、それだと欲張り最良優先探索と同じだよなあと思っていたら、同じノードを二回目にみたとき、経路コストが小さいほうを採用するんですね。考えた人頭良いなあ。

resize

pythonで慣れていたのでreshape的なやつかなと思ったらちょっと違ってました。
suzulang.com

reserve関数がどうとかとも言っていたので、ついでにこっちも
qiita.com

ステートマシン

ステートマシン自体は単純なのでそこまで実装は難しくないのですが、この本では一貫してコンポーネント方式 + オブジェクト指向で実装するので、それがちょっと難しかったです。例えば、AIStateクラスを継承しているTowerAttackを実装するためには、生成したTowerインスタンスをAIComponrntを介してTowerAttackに渡さないといけないとかですね。

クラス図

この前VisualStudioで自動的にクラス図を作成してくれる神機能があることを知りました。どうせなら使ってみたいなと思ったので、コードの全容を把握するのに役立ててください。

f:id:kurora-shumpei:20200125011909p:plain
クラス図




最後に

今回はChapter4の練習問題を扱いました

4章に入ってからまた難易度が向上したような気がします。2章の時も言った気がしますが、今回は経路探索やゲーム木などのゲームで用いられる人工知能の技術が詰め込まれていたので、2章のときよりも難易度が高く感じました。前回の記事が9月なので私の苦戦具合を察してください...。

また、2,3月と卒論執筆&発表と学会発表をやらされる()ので次の記事も時間があいてしまう気がしますが勘弁してくださいまし...。

5章はこちら
www.kuroshum.com