クロの制作日記

初心者が頑張るゲームプログラミングC++の練習問題3(ベクトルと基礎の物理を用いたゲーム開発)

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

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


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

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


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

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

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

練習問題の内容

第3章ではベクトルと基礎の物理をどのようにゲーム開発に用いるかといった話が主題となっています。それらを駆使してアステロイド(Asteroid)ゲームを制作して終了です。

練習問題では、

  1. 宇宙船に円形のコリジョン(あたり判定)を追加し、小惑星に衝突したら宇宙船(プレイヤー)を2秒後にリスポーンする
  2. 移動をニュートン物理学を用いて実装

練習問題には高校数学みたいなベクトルの問題がありましたが、それは皆さん頑張ってください。

練習問題の解答

解答のコードは以下のGithubリポジトリのChapter3に置いています。
一応変更した箇所と追加した箇所にはコメントアウトを入れておきました(どこか抜けているところがあるかもしれません。。ごめんね)。Star押してくれたら一発芸します。
github.com
ただ、解答のコードはC/C++初心者の私が作成したもので、これが正解だ!というわけではありませんし、他にもっと簡単かつ上手い実装方法があるということを念頭に置いた上で上記の解答コードを参考にしてくれたらありがたいです。

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




個人的に詰まった箇所

今回はそこまで詰まった箇所がありません。

ひとつあったとしたら、課題3.2の「ShipにCollisionComponentを作って半径を指定する必要がある」の「CollisionComponent」は「CircleComponent」の間違いだと思います。

この誤植(?)のおかげで、CollisionComponentを新しく作るのか!?となって困惑してしまいました。いうてこれくらいですかね。

不安点

一応完成はさせましたが、ニュートン物理学を用いた移動が著者の意図したものになっているのかは怪しいところです。

AddForce関数を用いて宇宙船と小惑星を移動させますが、ずっと移動しているとどんどん移動速度が速くなってしまいます。ニュートン物理学を用いると恐らくそういう風になるのだろうと思いますが。。。

取り敢えずの解決策としては、宇宙船と小惑星に速度制限を付けることかなーと思ったので実装しておきました。

そのために、Vector同士での比較演算子がMath.hになかったので、追加しておきました。コードを確認する際にはMath.hの方も見るようにしておいてください。

最後に

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

2章と比べて難易度はそこまで変わらなかったという印象でした。ただ、3章に取り掛かるまでにずいぶんと時間が空いてしまったせいで、コードの構造を思い出せずに少し手間取ってしまいました。

次章は今年中にできたら良いなと思っています()。


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