弾の動きとデータはどこに書く?
Posted: 2011年10月12日(水) 22:09
現在作成中のシューティングゲームで数種類のメイン武器を使い分けられるようにしたいのですが、武器のデータ(攻撃力や連射力)と弾の動きをどこにどのように書けばいいか思いつきません。
龍神録の館14章「いろんな弾幕データを作ってみよう」が近いような気がするのですが、弾の登録などが違うので参考にしづらいです。
目標は下のような感じです。皆さんの知恵を分けてくださいm(__)m
・目標
動きやデータは別ファイルで管理(外部ファイルでも新しいcppファイルでも)
playerBullet.cppで弾の動き、攻撃力を管理
pulayer.cppで連射力や装填数、今の武器の種類を管理
大体の流れ
・・・書いててわかりづらい気がしてきたのでソースファイルを添付しときます。DXライブラリをそちらで設定してくだされば動く・・・はずです。
龍神録の館14章「いろんな弾幕データを作ってみよう」が近いような気がするのですが、弾の登録などが違うので参考にしづらいです。
目標は下のような感じです。皆さんの知恵を分けてくださいm(__)m
・目標
動きやデータは別ファイルで管理(外部ファイルでも新しいcppファイルでも)
playerBullet.cppで弾の動き、攻撃力を管理
pulayer.cppで連射力や装填数、今の武器の種類を管理
大体の流れ
//main.cpp
//中略
Player.FireFlagSet();
for(i = 0; i < (100); i++)
{
if (PlayerBullet[i].CheckFlag(Player.GetFirefFlag())==true)//プレイヤーのファイアフラグと弾が開いてるかどうかチェック
{
PlayerBullet[i].FlagSet(Player.GetX(),Player.GetY());//フラグセットGetはそのまんまの意味です
Player.FireFlagDown();//ファイアフラグおろし
break;
}
}
for(i = 0; i < (100); i++)
{
PlayerBullet[i].Move();//ショット移動
}
//後略
//player.cpp
//略
void CPlayer::FireFlagSet()
{
switch(state){//state Playerの状態
case ENTER://いるなら
if(reloadcount<reload)//リロードがまだできていない時 ※reloadは武器異存
{
reloadcount++;//リロードカウント
}
else//できている時
{
if(rapidcount<rapid)//連射速度の判定 ※rapidは武器異存
{
rapidcount++;//まだならカウントし
fireF=false; //フラグを下げる fireF=ファイアフラグ
if(chargeflag==true)//装填フラグがあれば
{
charge=chargeMAX;//(charge=装填数 武器異存)装填数を最大にし
chargeflag=false;//フラグを下ろす つまり一度だけする
}
}
else if(M_Button(1)>=1)//カウントを満たし、かつマウスが押されていたら処理開始 ※M_Button マウスについての自作関数です
{
fireF=true;//ファイアフラグを立て
rapidcount=0;//連射速度のカウントを減らし
charge--;//残弾を減らす
if(charge<=0)//残弾0なら
{
reloadcount=0;//リロードカウントを減らし
chargeflag=true;//装填フラグを立てる
rapidcount=rapid-1;//連射速度判定を1回入れるための処理
}
}
}
break;
default:
break;
}
}
//後略
//Playerbullet.cpp
//略
bool CPlayerBullet::CheckFlag(bool flagF)
{
if(flagF==true&&enterflag==false)return true;//プレイヤーのファイアフラグがtrueかつ自分がまだ出てないなら
else return false;
}
};
void CPlayerBullet::FlagSet(int playerx,int playery)//フラグ確認
{
if(enterflag==false){//弾のフラグ
enterflag=true;//発射フラグ立てる
x=playerx;//初期位置
y=playery;
aimx=M_x();//マウスのx座標 狙っている場所
aimy=M_y();//マウスのy座標
count=0;
}
}
void CPlayerBullet::Move()//移動 ※ここでケース文なりで動きを変えたい
{
if(enterflag==true){//フラグonなら
//ミサイル風の動き
count++;
if(count==1){radian=0;}
if(count<16){y+=2;}
if(count>=12&&count<=16){radian=(atan2((aimy-y),(aimx-x)))*(count-12)/4;}
if(count>=16){
x+=cos(radian)*speed;
y+=sin(radian)*speed;
}
}
if(x<0||x>640||y<0||y>480)enterflag=false;//画面外でフラグ0
}
//後略
・・・書いててわかりづらい気がしてきたのでソースファイルを添付しときます。DXライブラリをそちらで設定してくだされば動く・・・はずです。