敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラムとbreak;を使わない新型プログラムを見比べてみましょう その2

solarplexuss「


敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラム



敵の飛行機1体から敵の弾が2連射されるのにbreak;を使わない新型プログラム


の違いがわかったかもん!


敵の飛行機1体から敵の弾が2連射されるのにbreak;を使う旧型プログラム


では


敵の飛行機1体から敵の弾が2連射されるとき


最初の弾

最初の弾

最初の弾


のように


最初の弾が


続けて発射される場合があるんだけど


敵の飛行機1体から敵の弾が2連射されるのにbreak;を使わない新型プログラム


では


敵の飛行機1体から敵の弾が2連射されるとき


最初の弾

次弾

最初の弾

次弾

最初の弾

次弾


というように


必ず


最初の弾が


発射されたら


次弾が


というように


交互に


最初の弾

次弾

発射されるんだね


さすがは新型といったところだね」



ソーラー「で


まだまだ


違いはあるよ


もう1度


break;


を使った


敵の飛行機1体から敵の弾が2連射される


旧型プログラムと


break;


を使わない


敵の飛行機1体から敵の弾が2連射される


新型プログラム



見比べてさらなる違いを見つけてみよう



まずは


break;


を使った


敵の飛行機1体から敵の弾が2連射される


旧型プログラムはこちらです

👇



//👇🌞🌞🌞 敵の飛行機1体から敵の弾が2連射される旧型プログラムです


if (tekinotama_count == 0){


for (int i = 0; i < 2; i = i + 1) {


if (tekinotama[i].life == 0) {


tekinotama[i].x = tekinohikouki[0].x-10;

//👆🌞🌞🌞敵の弾は敵の飛行機の左側に表示されることになります


tekinotama_tsix = tekinotama[i].x;


tekinotama[i].y = tekinohikouki[0].y + 10;


tekinotama[i].life = 1;


break;


}


}


tekinotama_count = 10;


}


if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }



for (int i = 0; i < 2; i = i + 1) {


if (tekinotama[i].life == 1) {

//🌞🌞🌞 tekinotama[i].lifeに1が代入されていると敵の弾がゲーム画面に表示されることになります tekinotama[i].lifeに0が代入されていると敵の弾がゲーム画面に表示されることはありません

DrawGraph(tekinotama[i].x, tekinotama[i].y, tekinotama[i].graphichandle[0], TRUE);


tekinotama[i].x = tekinotama[i].x - 10;


if (tekinotama_tsix - tekinotama[i].x > 640)

//🌞🌞🌞発射された敵の弾の位置のx座標が発射されたときの最初の敵の弾の位置のx座標から🍑左へ🍑640を超えて離れると条件tekinotama_tsix - tekinotama[i].xは真の値1をとることになります

//🌞🌞🌞🌞🌞👆 tekinotama_tsixには敵の弾が発射されたときの敵の弾のいる位置のx座標を記憶していたのでtekinotama[i].xが敵の弾が発射されたときの敵の弾のいる位置から640ドット離れた時tekinotama_tsix - tekinotama[i].x > 640は真の値1を持つことになります

tekinotama[i].life = 0;


}


}




ソーラー「そして


break;


を使わない


敵の飛行機1体から敵の弾が2連射される


新型プログラムはこちらです


👇


//👇🌞🌞🌞 敵の飛行機1体から敵の弾が2連射される新型プログラムです



if (tekinotama[0].life == 0 && hassyasareru_tekinotama == 0👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


tekinotama[0].x = tekinohikouki[0].x - 10;


tekinotama[0].y = tekinohikouki[0].y + 10;


tekinotama_tsix=tekinotama[0].x;


tekinotama[0].life = 1;


hassyasareru_tekinotama = 1;//💖💖💖👈ここだよ〜ん


tekinotama_count[0] = 10;//👈2連射される敵の弾の最初の弾と次弾の間隔を調整することができます


}





if (tekinotama_count[0] > 0) { tekinotama_count[0] = tekinotama_count[0] - 1; }



if (tekinotama_count[0] == 0 && hassyasareru_tekinotama == 1👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


if (tekinotama[1].life == 0) {


tekinotama[1].x = tekinohikouki[0].x - 10;


tekinotama[1].y = tekinohikouki[0].y + 10;


tekinotama[1].life = 1;


hassyasareru_tekinotama = 2; //💖💖💖👈ここだよ〜ん


tekinotama_count[1] = 10;//👈2連射される敵の弾の次弾と最初の弾の間隔を調整することができます


}


}


if (tekinotama_count[1] > 0) { tekinotama_count[1] = tekinotama_count[1] - 1; }




if (tekinotama_count[1] == 0 && hassyasareru_tekinotama == 2👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


hassyasareru_tekinotama = 0; //💖💖💖👈ここだよ〜ん


}





for (int i = 0; i < 2; i = i + 1) {


if (tekinotama[i].life == 1) {

//🌞🌞🌞 tekinotama[i].lifeに1が代入されていると敵の弾tekinotama[i]がゲーム画面に表示されることになります tekinotama[i].lifeに0が代入されていると敵の弾tekinotama[i]がゲーム画面に表示されることはありません

DrawGraph(tekinotama[i].x, tekinotama[i].y, tekinotama[i].graphichandle[0], TRUE);


tekinotama[i].x = tekinotama[i].x - 10;


if (tekinotama_tsix - tekinotama[i].x > 640)

//🌞🌞🌞発射された敵の弾tekinotama[i]の位置のx座標が発射されたときの最初の敵の弾tekinotama[i]の位置のx座標から🍑左へ🍑640を超えて離れると条件tekinotama_tsix - tekinotama[i].xは真の値1をとることになります

//🌞🌞🌞🌞🌞👆 tekinotama_tsixには敵の弾tekinotama[i]が発射されたときの敵の弾tekinotama[i]のいる位置のx座標を記憶していたのでtekinotama[i].xが敵の弾tekinotama[i]が発射されたときの敵の弾tekinotama[i]のいる位置から640ドット離れた時tekinotama_tsix - tekinotama[i].x > 640は真の値1を持つことになります

tekinotama[i].life = 0;


}


}





マックス「まあ


やはり


ここの部分は


共通か

👇



for (int i = 0; i < 2; i = i + 1) {


if (tekinotama[i].life == 1) {

//🌞🌞🌞 tekinotama[i].lifeに1が代入されていると敵の弾tekinotama[i]がゲーム画面に表示されることになります tekinotama[i].lifeに0が代入されていると敵の弾tekinotama[i]がゲーム画面に表示されることはありません

DrawGraph(tekinotama[i].x, tekinotama[i].y, tekinotama[i].graphichandle[0], TRUE);


tekinotama[i].x = tekinotama[i].x - 10;


if (tekinotama_tsix - tekinotama[i].x > 640)

//🌞🌞🌞発射された敵の弾tekinotama[i]の位置のx座標が発射されたときの最初の敵の弾tekinotama[i]の位置のx座標から🍑左へ🍑640を超えて離れると条件tekinotama_tsix - tekinotama[i].xは真の値1をとることになります

//🌞🌞🌞🌞🌞👆 tekinotama_tsixには敵の弾tekinotama[i]が発射されたときの敵の弾tekinotama[i]のいる位置のx座標を記憶していたのでtekinotama[i].xが敵の弾tekinotama[i]が発射されたときの敵の弾tekinotama[i]のいる位置から640ドット離れた時tekinotama_tsix - tekinotama[i].x > 640は真の値1を持つことになります

tekinotama[i].life = 0;


}


}


となると


違いは


この旧型のこの部分と

👇


//👇🌞🌞🌞 敵の飛行機1体から敵の弾が2連射される旧型プログラムです


if (tekinotama_count == 0)) {


for (int i = 0; i < 2; i = i + 1) {


if (tekinotama[i].life == 0) {


tekinotama[i].x = tekinohikouki[0].x-10;

//👆🌞🌞🌞敵の弾は敵の飛行機の左側に表示されることになります


tekinotama_tsix = tekinotama[i].x;


tekinotama[i].y = tekinohikouki[0].y + 10;


tekinotama[i].life = 1;


break;


}


}


tekinotama_count = 10;


}


if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }




新型のここの部分ってわけだ

👇


//👇🌞🌞🌞 敵の飛行機1体から敵の弾が2連射される新型プログラムです



if (tekinotama[0].life == 0 && hassyasareru_tekinotama == 0👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


tekinotama[0].x = tekinohikouki[0].x - 10;


tekinotama[0].y = tekinohikouki[0].y + 10;


tekinotama_tsix=tekinotama[0].x;


tekinotama[0].life = 1;


hassyasareru_tekinotama = 1;//💖💖💖👈ここだよ〜ん


tekinotama_count[0] = 10;//👈2連射される敵の弾の最初の弾と次弾の間隔を調整することができます


}





if (tekinotama_count[0] > 0) { tekinotama_count[0] = tekinotama_count[0] - 1; }



if (tekinotama_count[0] == 0 && hassyasareru_tekinotama == 1👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


if (tekinotama[1].life == 0) {


tekinotama[1].x = tekinohikouki[0].x - 10;


tekinotama[1].y = tekinohikouki[0].y + 10;


tekinotama[1].life = 1;


hassyasareru_tekinotama = 2; //💖💖💖👈ここだよ〜ん


tekinotama_count[1] = 10;//👈2連射される敵の弾の次弾と最初の弾の間隔を調整することができます


}


}


if (tekinotama_count[1] > 0) { tekinotama_count[1] = tekinotama_count[1] - 1; }




if (tekinotama_count[1] == 0 && hassyasareru_tekinotama == 2👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


hassyasareru_tekinotama = 0; //💖💖💖👈ここだよ〜ん


}



マックス「違いか・・・


ふ~む」


solarplexuss「旧型では


if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }


だけが実行されていて


新型では


if (tekinotama_count[0] > 0) { tekinotama_count[0] = tekinotama_count[0] - 1; }



if (tekinotama_count[1] > 0) { tekinotama_count[1] = tekinotama_count[1] - 1; }



が実行されている・・・


違いはそれだあ(*^▽^*)


なあんちゃって💖」


ソーラー「おお


正解です


違いは


その部分です」


solarplexuss「え~どおいうことぉ?」


ソーラー「



旧型では


最初の弾が発射されるとき


tekinotama_count = 10;


が実行されて


tekinotama_count に格納される値が


10になるね



if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }


が実行されるので


while{}文のブロック{}内の命令文が10回繰り返し実行されると


if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }



10回繰り返し実行され


tekinotama_count に格納される値は0になるね


そのとき


最初に発射された弾が640ドット以上左へ移動していないと


tekinotama[0].life には1が格納されたままなので


tekinotama[0].life == 0


は成立せず


tekinotama[1].life == 0


が成立するので


次弾が発射されるね


そして


次弾が発射されるときも


tekinotama_count = 10;


が実行されて


tekinotama_count に格納される値が


10になるね



if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }


が実行されるので


while{}文のブロック{}内の命令文が10回繰り返し実行されると


if (tekinotama_count > 0) { tekinotama_count = tekinotama_count - 1; }



10回繰り返し実行され


tekinotama_count に格納される値は0になるね


今度は


tekinotama_count に格納される値が0になったこの状態で


敵の最初の弾が640ドット以上左へ移動していた場合


条件式tekinotama_tsix - tekinotama[0].x > 640



真の値1をもつことになり


tekinotama[0].life = 0


が実行されて


またまた


最初の弾が発射されることになるね」



solarplexuss「うわあ なるほどぉ


そういう仕組みだったんだ」


ソーラー「


新型では


if (tekinotama_count[0] > 0) { tekinotama_count[0] = tekinotama_count[0] - 1; }



if (tekinotama_count[1] > 0) { tekinotama_count[1] = tekinotama_count[1] - 1; }



が実行されています




最初の弾tekinotama[0]が発射されるとき


tekinotama_count[0] = 10;


hassyasareru_tekinotama = 1;//💖💖💖👈ここだよ〜ん


が実行されて


tekinotama_count[0] に格納される値が


10になるね



while{}文のブロック{}内の命令文が10回繰り返し実行されると


if (tekinotama_count[0] > 0) { tekinotama_count[0] = tekinotama_count[0] - 1; }



10回繰り返し実行され


tekinotama_count[0] に格納される値は0になるね


tekinotama_count[0] に格納される値が0になると


if (tekinotama_count[0] == 0 && hassyasareru_tekinotama == 1👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖)


の条件式が満たされるので


次弾tekinotama[1]が発射されるね


そして


次弾tekinotama[1]が発射されるときは


ついでに


hassyasareru_tekinotama = 2; //💖💖💖👈ここだよ〜ん


tekinotama_count[1] = 10;//👈2連射される敵の弾の次弾と最初の弾の間隔を調整することができます


が実行されて


hassyasareru_tekinotamaに格納される値は2


tekinotama_count[1]に格納される値は


10になっているね


またまた


while{}文のブロック{}内の命令文が10回繰り返し実行されると


if (tekinotama_count[1] > 0) { tekinotama_count[1] = tekinotama_count[1] - 1; }



10回繰り返し実行され


tekinotama_count[1] に格納される値は0になるね


そうなると


今度は


hassyasareru_tekinotama に格納される値が2に


tekinotama_count[1]に格納される値が0になるね


そうなると


続く命令文


if (tekinotama_count[1] == 0 && hassyasareru_tekinotama == 2👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖) {


hassyasareru_tekinotama = 0; //💖💖💖👈ここだよ〜ん


}


の条件式


tekinotama_count[1] == 0 && hassyasareru_tekinotama == 2👇変更点はここだよん💖💖💖💖💖💖💖💖💖💖💖💖💖


は真の値1を持つことになるので


hassyasareru_tekinotama = 0; //💖💖💖👈ここだよ〜ん


が実行され


hassyasareru_tekinotamaに格納される値は0になるね



ここまでで


最初の弾と

次弾が


仲良く並んで発射されました



でも

敵の最初の弾tekinotama[0]が640ドット以上 左へ移動するまでは


最初の弾が再び発射されることはありません



マックス「よく見かける光景じゃのう


敵の弾が2連射されて


しばらくたった後


また


敵の弾が


2連射されるわけだ」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る