プログラムを拝見しました
CCheckHit というクラスで当たり判定を行っていますが、CCheckHit クラスの
基底クラス の CBullet のメンバー変数 tShot に値を代入するプログラムが見当たりません
恐らくですが、CCheckHit の基底クラスを CBullet にすると、Main.cpp で new している
CBullet に代入した情報が CCheckHit クラスからも参照できるとお考えなのではないでしょうか?
実際はそうではなく、new CCheckHit で作成される CCheckHit クラスに含まれる
CBullet の情報と、new CBullet で作成される CBullet の情報は独立しています
( 記録されているメモリ領域が異なります )
なので、checkhit に弾の情報やプレイヤーの情報を代入していない以上、EnemyShotAndPlayer などで
checkhit 内の tShot を参照しても、空っぽの情報しかないというわけです( checkshot 内の tShot と
bullet 内の tShot は独立している( 別のメモリ領域に記録されている )ので )
なので、CCheckHit クラスの基底クラスを CBullet にするのではなく、CBullet クラスの情報を
CCheckHit クラスに渡して使うようにするのが良いと思います
というか、既に CBullet クラス内で敵やプレイヤーの情報を参照するために CBullet クラスに
SetPlayarParam や SetEnemyParam を用意して使用していますね
これらの関数と、その処理の意味するところは理解されていますか?
とりあえず CCheckHit クラスの基底クラスを無くし、CBullet クラスと同じように
SetPlayerParam や SetShotParam で弾やプレイヤーの情報を登録して EnemyShotAndPlayer などで
使用するように構造を変えてみたプログラムをこちらにアップしましたので、よろしければご覧ください
https://dxlib.xsrv.jp/temp/STG_Change_Source.ZIP
( 変更したソースファイルのみが入っています )