« インベーダー改め「仕様書という物がよくわからない」 | メイン | インベイダーゲーム -完成- »

2005年02月01日

インベイダー

動きました。
弾を撃てます
敵が迫ってきます

今回採用したレイヤー構造は非常に使いやすく、とても良い物でした。
資源を食いますが、最近のPCにとってこの程度はきっとたいした問題では無いでしょう。
コードも、今までの中では一番まともだと思います。
構成を最初から書き下していたおかげですね。
作業効率が雲泥の差だったので、今度からも同じようにやろうと思います。
もっとも、作っている途中で思い通りに行かなくなって追加した関数、削除した関数などもありますが。
んー、その時点で前に書いたのは仕様書とは言えないのだろうなあ。
あの通りに作ったらまともに動きませんし(笑)
見通しが甘かった……けど、細部まで細かく書いてたらやっぱりそのような不整合は出ると思うし、
もうちょっとマクロな視点で書けって事なのかなあ。

しかし、不可解なバグが発生。

for(i=0;i<FIELD_HEIGHT;i++){
  for(j=0;j<FIELD_WIDTH;j++){
   if(Layer_bullet[i][j] & Layer_enemy[i][j]){
      MyBulletDeath(j,i);
      EnemyDeath(j,i);
      ScoreControl(0,SCORE_ON_ENEMY); }
  }
}

int ScoreControl(int mode,int vary)
{
 static int score = 0;
  
 //当たり判定から呼び出し。スコアを色々と
 //記録モードと呼び出しモードを使い分ける事にする
 //mode:0で記録、1で呼び出し、0,0で初期化
 //varyはスコアの変動(+100だとか-100だとか)
	
 switch(mode){
 /*---記録モード---*/
 case 0: if(!vary){ score = 0; break; }
 score = score + vary;
 break;
 /*---閲覧モード---*/
 case 1: return score;
 default:break;
}

return 0;
}

これで、記録されるスコアがめちゃくちゃな値になってしまうという。
このループの外からの呼び出しに関しては、全く同じ形式で呼び出しても問題無し。
どこが悪いか全くわからないので頭を冷やしてから再挑戦。

投稿者 miff : 2005年02月01日 01:52

コメント



XREAAD