龍神録の館のコードは良くないと断りを入れた上で書きます。
館で紹介しているコードと同じことを書いているのに指摘されるのは納得がいかないでしょうが・・。
> 構造体.flag = 2;
これはコメントなしでは意味が分かりません。
そもそも「フラグ」という言葉を使うべきではなく、フラグとしての変数にはtrueかfalseの2値以外は入れるべきではないです。
.flag = 2;
がそれ以上の操作を無効にすることを示すなら
.isAvailable = false; //有効ではない
や
.isAlive = false; //生きていない
等にしてはいかがでしょう。
コメントなしで、コードの意味がスーっと分かるような形が理想です。
> RegisterShot
> ShotCalc
文法的な細かなことは気にしなくていいと思いますが、自分の中で決まりを作っておいた方が良いと思います。
上記の場合、形が統一出来ていないですよね。
お勧めは
動詞+名詞(目的語)
でしょうか。
上の二つで言えば上の方ですね。
> 変数名の書き方
> sound_length
> soundHandle
ハイフンでつなぐか、ラクダ型にするか、どちらかに統一してみては。
> .direction = 2;
どちらの方向を代入したのか分からないので、列挙型を使ってはどうでしょう。
コード:
enum eDirection {
eLeft,
eUp,
eRight,
eDown,
};
...
.direction = eRight;
> //shot_numのショットを登録した敵と主人公との角度を返す。
> double ...::ShotAtan2(...)
角度を取得する関数名なら Get...(); にすべきでしょう。
> switch(){ case 0:... case 1:... case2:...
マジックナンバーが多いと何をしているのか分からなくなるので、これも列挙型等で分かりやすく書くと良いと思います。
> クラス名と重複した関数名
クラス名で既に識別可能な物は改めて関数名に付けなくても良いと思います。
例えば「Enemy::EnemyDamage()」はちょっと冗長ですよね。
基本クラスは自分のことをすると思いますから、他のクラスに対して処理をするような関数名にだけ何か識別できる名前を付けると良いかと思います。
> struct.hの存在
PlayerDataの定義がPlayer.hではなくstruct.hにあるのは少々抵抗があります。
Playerデータを使いたい人がPlayer.hをincludeして使えるようにすべきではないでしょうか。
> 継承が無い
みたところ継承しているクラスがありませんでした。
Enemy,Boss,Playerは共通点が多いと思いますので、親クラスを作ってはどうでしょう。
私が実装する時は添付ファイルのような継承関係を作っています。
is-a, has-aを意識した継承関係を作れるようになり、ポリモーフィズムを学んだ上で、デザインパターンを学ぶと良いと思います。
この辺を学ぶための、C++のバイブルとも言える本があるので、紹介します。