第13講 シューティングゲーム開発(完成まで)
第3話 atarihantei()を変更してUFOが消えるようにする
第2話課題解答例
atarihantei.cpp
#include"main.h"
void atarihantei() {
  int i, j;
  for (i = 0; i < ufo_tatesu; i++) {
    for (j = 0; j < ufo_yokosu; j++) {
      if (arunasi[i][j] == 1) {
        if (tama_x>=ufo_yokohaba*j && tama_x<=ufo_yokohaba*(j+1) && tama_y >= ufo_tatehaba*i && tama_y <= ufo_tatehaba*(i+1)){
          arunasi[i][j] = 0; //UFOが消滅するように設定
          tokuten += 10; //ゲームカウント
          kosu--; //UFO個数を減少させる
          if (kosu == 0) { //ゲームクリア
            m = 3;
          }
        }
      }
    }
  }
}


さて、これからが難所になります。
弾が当たったら、弾も消滅しないとおかしいですね。
現時点では弾が消滅しないので、1発で4つのUOFを消滅させてしまいました。
UFOのあるなしは配列arunasi[4][10]によってUFOのあるなしがコントロールされていました。
弾についても配列を用意して、その配列によって弾のあるなしも管理しないといけません。
現時点では、弾は1個ですが、
スペースキーを激しく連打すれば、
弾がたくさん出てくるからです。
ですから、後で配列に変更しますが、
現時点では、弾のあるなしをコントロールするグローバル変数tama_arunaiをmain.cppに用意しましょう。
当然、main.hにおいてもexternをつけて宣言しなければなりません。
そして、syokikaではあるに設定すなわち
tama_arunai=1;
としましょう。
あるなしを管理する配列と変数(後に配列に変更)が出てきましたので、
arunasi[4][10]はufo_arunasi[4][10]に配列名を変えてください。
そして、UFOの消滅の条件に弾が存在していることを加えなければなりません。
      if (ufo_arunasi[i][j] == 1) {
        if (tama_arunasi == 1){
のように変更するとよいでしょう。
それでは、弾が当たるとUFOも弾も消えるようにしてください。
当然現時点では、弾は1発しかありませんから、
消滅するUFOも弾もいずれも1つです。

そうでした。
この際に、ufo_arunasi[4][10]もtama_arunaiもint型ではなくchar型に変更しましょう。
理由は、0と1の値しかとらないことがわかっているのに、
メモリ容量の大きいint型にする必要はないからです。

変更するファイルは、
arunasi.cpp、main.cpp、main.h、tamacpp、syokika.cpp
の5つです。

第2話へ   第4話へ

第2部トップへ  第1部トップへ


初心者のための excel 2016 マクロ VBA 入門講義 基
礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための]世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップ