敵の飛行機を10体用意しておいて弾が当たった時の爆発する時間がそれぞれ異なるようにしてみよう

ソーラー「今度は10体の敵の飛行機



敵の飛行機

敵の飛行機1

敵の飛行機2

敵の飛行機3

敵の飛行機4

敵の飛行機5

敵の飛行機6

敵の飛行機7

敵の飛行機8

敵の飛行機9


を用意しておいて


敵の飛行機

敵の飛行機1

敵の飛行機2

敵の飛行機3

敵の飛行機4

敵の飛行機5

敵の飛行機6

敵の飛行機7

敵の飛行機8

敵の飛行機9



が消滅したら


その場所で爆発が起こるアニメーションを設定します


ただし


爆発する時間は


異なるようにしてみたいと思います」


solarplexuss「そのために


struct Character bakuhatunohonoo[10];



実行して


構造体変数を10個


bakuhatunohonoo[0]

bakuhatunohonoo[1]

bakuhatunohonoo[2]

bakuhatunohonoo[3]

bakuhatunohonoo[4]

bakuhatunohonoo[5]

bakuhatunohonoo[6]

bakuhatunohonoo[7]

bakuhatunohonoo[8]

bakuhatunohonoo[9]



用意し


for (int i = 0; i < 10; i++) {


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


for (int j = 0; j < 2; j++) {


if ((jibunnotama[j].x < tekinohikouki[i].x + 35) && (tekinohikouki[i].x < jibunnotama[j].x + 15) && (jibunnotama[j].y < tekinohikouki[i].y + 20) && (tekinohikouki[i].y< jibunnotama[j].y + 5)) {


jibunnotama[j].life = 0;


tekinohikouki[i].life = 0;


bakuhatunohonoo[i].x = tekinohikouki[i].x;


bakuhatunohonoo[i].y = tekinohikouki[i].y;


bakuhatunohonoo[i].life = 112* (i + 1);//🌞🌞🌞 bakuhatunohonoo[0].lifeに0以上の値を代入しました



}


}

}


}



を実行します


bakuhatunohonoo[i].life = 112* (i + 1);/


の部分に注目だね



敵の飛行機に自分の弾が当たったときは


bakuhatunohonoo[0].lifeに


112


を代入し


敵の飛行機1に自分の弾が当たったときは


bakuhatunohonoo[1].lifeに


224


を代入し


敵の飛行機2に自分の弾が当たったときは


bakuhatunohonoo[2].lifeに


336


を代入し


敵の飛行機3に自分の弾が当たったときは


bakuhatunohonoo[3].lifeに


448


を代入し


敵の飛行機4に自分の弾が当たったときは


bakuhatunohonoo[4].lifeに


660


を代入し


敵の飛行機5に自分の弾が当たったときは


bakuhatunohonoo[5].lifeに


784


を代入し


敵の飛行機6に自分の弾が当たったときは


bakuhatunohonoo[6].lifeに


896


を代入し


敵の飛行機7に自分の弾が当たったときは


bakuhatunohonoo[7].lifeに


1008


を代入し


敵の飛行機8に自分の弾が当たったときは


bakuhatunohonoo[8].lifeに


1200


を代入し


敵の飛行機9に自分の弾が当たったときは


bakuhatunohonoo[9].lifeに


1312


を代入するようにします





bakuhatunohonoo[0].lifeに


に格納されている値が0になったら


敵の飛行機の爆発が終了し


bakuhatunohonoo[1].lifeに


に格納されている値が0になったら


敵の飛行機1がの爆発が終了し


bakuhatunohonoo[2].lifeに


に格納されている値が0になったら


敵の飛行機2の爆発が終了し


bakuhatunohonoo[3].lifeに


に格納されている値が0になったら


敵の飛行機3の爆発が終了し


bakuhatunohonoo[4].lifeに


に格納されている値が0になったら


敵の飛行機4の爆発が終了し


bakuhatunohonoo[5].lifeに


に格納されている値が0になったら


敵の飛行機5の爆発が終了し


bakuhatunohonoo[6].lifeに


に格納されている値が0になったら


敵の飛行機6の爆発が終了し


bakuhatunohonoo[7].lifeに


に格納されている値が0になったら


敵の飛行機7の爆発が終了し


bakuhatunohonoo[8].lifeに


に格納されている値が0になったら


敵の飛行機8の爆発が終了し


bakuhatunohonoo[9].lifeに


に格納されている値が0になったら


敵の飛行機9の爆発が終了するようにすればいいんだね」


マックス「おおお


な、なんか こだわってるな・・・」



solarplexuss「えへへ


そうかも


敵の飛行機が消滅したときっていうのは


tekinohikouki[0].life = 0;



実行された時だよね


だから


tekinohikouki[0].life = 0;



が実行されたとき


その敵の飛行機の位置


(tekinohikouki[0].x ,tekinohikouki[0].y )



爆発のアニメーションが起こるようにすればいいね


そして


敵の飛行機1が消滅したときっていうのは


tekinohikouki[1].life = 0;



実行された時だよね


だから


tekinohikouki[1].life = 0;



が実行されたとき


その敵の飛行機の位置


(tekinohikouki[1].x ,tekinohikouki[1].y )



爆発のアニメーションが起こるようにすればいいね


以下同様


マックス「おう😊 そうだな」


ソーラー「では


敵の飛行機

敵の飛行機1

敵の飛行機2

敵の飛行機3

敵の飛行機4

敵の飛行機5

敵の飛行機6

敵の飛行機7

敵の飛行機8

敵の飛行機9



消滅したら爆発するアニメーションの時間が異なる


プログラムを実行してみたいと思います」



そのプログラムは以下のようになります

👇




#include "DxLib.h"


struct Character {

int x;

int y;

int graphichandle[7];

int life;

};


//👆🌞Characterの構造体宣言です



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{



ChangeWindowMode(TRUE); // ウインドウモードに設定します


if (DxLib_Init() == -1) // DXライブラリを初期化処理しています

{

return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します

}




SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です 裏画面に画像を描きます printfDxで表示される文字も裏画面に描かれることになります



struct Character jibunnohikouki;

//👆🌞jibunnohikoukiの構造体変数宣言です


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


jibunnohikouki.graphichandle[0] = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");


jibunnohikouki.graphichandle[1] = LoadGraph("画像データ\\ソーラーが描いた飛行機1.bmp");


jibunnohikouki.graphichandle[2] = LoadGraph("画像データ\\ソーラーが描いた飛行機2.bmp");


jibunnohikouki.graphichandle[3] = LoadGraph("画像データ\\ソーラーが描いた飛行機3.bmp");


jibunnohikouki.graphichandle[4] = LoadGraph("画像データ\\ソーラーが描いた飛行機4.bmp");


jibunnohikouki.graphichandle[5] = LoadGraph("画像データ\\ソーラーが描いた飛行機5.bmp");


jibunnohikouki.graphichandle[6] = LoadGraph("画像データ\\ソーラーが描いた飛行機6.bmp");


jibunnohikouki.life = 1;//👈🌞🌞🌞ここがポイントです🌞🌞🌞


//👆🌞構造体変数jibunnohikoukiのメンバ変数の初期化を行っています

//👆😋自分の飛行機😋のデータをとりあつかっています




struct Character tekinohikouki[10];

//👆🌞敵の飛行機を1体登場させています


for (int i = 0; i < 10; i++) {


tekinohikouki[i].x = 605;


tekinohikouki[i].y = 35 * i;


tekinohikouki[i].graphichandle[0] = LoadGraph("画像データ\\赤い敵の飛行機1.8.bmp");


tekinohikouki[i].graphichandle[1] = LoadGraph("画像データ\\赤い敵の飛行機1.3.bmp");


tekinohikouki[i].graphichandle[2] = LoadGraph("画像データ\\赤い敵の飛行機2.3.bmp");


tekinohikouki[i].graphichandle[3] = LoadGraph("画像データ\\赤い敵の飛行機3.3.bmp");


tekinohikouki[i].graphichandle[4] = LoadGraph("画像データ\\赤い敵の飛行機4.3.bmp");


tekinohikouki[i].graphichandle[5] = LoadGraph("画像データ\\赤い敵の飛行機5.3.bmp");


tekinohikouki[i].graphichandle[6] = LoadGraph("画像データ\\赤い敵の飛行機6.5.bmp");


tekinohikouki[i].life = 1;


}



struct Character jibunnotama[2];

//🌞👆自分の弾を2つ作成しています

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


jibunnotama[i].x = 0;

jibunnotama[i].y = 0;


jibunnotama[i].graphichandle[0] = LoadGraph("画像データ\\自分の弾.bmp");


jibunnotama[i].life = 0;


}




struct Character bakuhatunohonoo[10];

//👆🌞構造体変数bakuhatuhonoo[0], bakuhatuhonoo[1]…bakuhatuhonoo[9]を作成し爆発の炎のデータを取り扱います


for (int i = 0; i < 10; i++) {


bakuhatunohonoo[i].x = 0;


bakuhatunohonoo[i].y = 0;


bakuhatunohonoo[i].graphichandle[0] = LoadGraph("画像データ\\爆発の炎.bmp");


bakuhatunohonoo[i].graphichandle[1] = LoadGraph("画像データ\\爆発の炎1.bmp");


bakuhatunohonoo[i].graphichandle[2] = LoadGraph("画像データ\\爆発の炎2.bmp");


bakuhatunohonoo[i].graphichandle[3] = LoadGraph("画像データ\\爆発の炎3.bmp");


bakuhatunohonoo[i].graphichandle[4] = LoadGraph("画像データ\\爆発の炎4.bmp");


bakuhatunohonoo[i].graphichandle[5] = LoadGraph("画像データ\\爆発の炎5.bmp");


bakuhatunohonoo[i].graphichandle[6] = LoadGraph("画像データ\\爆発の炎6.bmp");



bakuhatunohonoo[i].life = 0;//🌞🌞🌞 bakuhatunohonoo.lifeを初期化しています


}






int tsix;//🌞🌞🌞tsixには発射される弾の最初の位置のx座標が代入されることになります tは弾、sは最初、iは位置、xはx座標を表しています



int count = 0;//🌞🌞🌞ここでint型の変数countを作製し0で初期化しました


int graphicnumber = 0; //🌞🌞🌞ここでint型の変数graphicnumberを作製し0で初期化しました


while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {




DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);




int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);


if (4 <= jibunnohikouki.y && jibunnohikouki.y <= 460) {

if (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

}



if (0 <= jibunnohikouki.y && jibunnohikouki.y <= 456) {


if (key & PAD_INPUT_DOWN) jibunnohikouki.y = jibunnohikouki.y + 4;

}


if (4 <= jibunnohikouki.x && jibunnohikouki.x <= 605) {


if (key & PAD_INPUT_LEFT) jibunnohikouki.x = jibunnohikouki.x - 4;

}


if (0 <= jibunnohikouki.x && jibunnohikouki.x <= 601) {


if (key & PAD_INPUT_RIGHT) jibunnohikouki.x = jibunnohikouki.x + 4;

}




if (jibunnohikouki.life == 1) {


DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle[(graphicnumber / 32) % 7], TRUE);


//👆🌞🌞🌞 🌞🌞🌞 🌞🌞🌞graphicnumberを32で割っているので32分の1のアニメーション速度です🌞🌞🌞 🌞🌞🌞 🌞🌞🌞


}


//👆 jibunnohikouki.lifeに格納されている値が1なら自分の飛行機の画像を描きます

//👆jibunnohikouki.lifeに格納されている値が0なら自分の飛行機の画像が描かれることはありません



for (int i = 0; i < 10; i++) {


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


DrawGraph(tekinohikouki[i].x, tekinohikouki[i].y, tekinohikouki[i].graphichandle[(graphicnumber / 32) % 7], TRUE);


}


}


for (int i = 0; i < 10; i++) {


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


if ((jibunnohikouki.x < tekinohikouki[i].x + 35) && (tekinohikouki[i].x < jibunnohikouki.x + 35) && (jibunnohikouki.y + 7 < tekinohikouki[i].y + 20) && (tekinohikouki[i].y < jibunnohikouki.y + 20)) {


jibunnohikouki.life = 0;


tekinohikouki[i].life = 0;


bakuhatunohonoo[i].x = tekinohikouki[i].x;


bakuhatunohonoo[i].y = tekinohikouki[i].y;



bakuhatunohonoo[i].life = 112 * (i + 1);//🌞🌞🌞 bakuhatunohonoo[i].lifeに0以上の値を代入しました


}

}


}


for (int i = 0; i < 10; i++) {


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


for (int j = 0; j < 2; j++) {


if ((jibunnotama[j].x < tekinohikouki[i].x + 35) && (tekinohikouki[i].x < jibunnotama[j].x + 15) && (jibunnotama[j].y < tekinohikouki[i].y + 20) && (tekinohikouki[i].y < jibunnotama[j].y + 5)) {


jibunnotama[j].life = 0;


tekinohikouki[i].life = 0;


bakuhatunohonoo[i].x = tekinohikouki[i].x;


bakuhatunohonoo[i].y = tekinohikouki[i].y;


bakuhatunohonoo[i].life = 112 * (i + 1);//🌞🌞🌞 bakuhatunohonoo[i].lifeに0以上の値を代入しました



}


}

}


}


for (int i = 0; i < 10; i++) {


if (bakuhatunohonoo[i].life > 0) {


DrawGraph(bakuhatunohonoo[i].x, bakuhatunohonoo[i].y, bakuhatunohonoo[i].graphichandle[(graphicnumber / 32) % 7], TRUE);


//👆🌞🌞🌞 🌞🌞🌞 🌞🌞🌞graphicnumberを32で割っているので32分の1のアニメーション速度です🌞🌞🌞 🌞🌞🌞 🌞🌞🌞



bakuhatunohonoo[i].life = bakuhatunohonoo[i].life - 1;



}


//👆 bakuhatunohonoo[i].lifeに格納されている値が1なら爆発の炎の画像を描きます

//👆 bakuhatunohonoo[i].lifeに格納されている値が0なら爆発の炎の画像が描かれることはありません


}


graphicnumber= graphicnumber+1;


//👆🌞🌞🌞自分の飛行機と敵の飛行機と爆発の炎がアニメーションするようgraphicnumberの値を1増やしています🌞🌞🌞




if ((key & PAD_INPUT_A) && (count == 0)) {


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


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


jibunnotama[i].x = jibunnohikouki.x + 35;


tsix = jibunnotama[i].x;


jibunnotama[i].y = jibunnohikouki.y + 10;


jibunnotama[i].life = 1;


break;


}


}


count = 10;

}



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




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


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

//🌞🌞🌞 jibunnotama[i].lifeに1が代入されていると自分の弾がゲーム画面に表示されることになります jibunnotama[i].lifeに0が代入されていると自分の弾がゲーム画面に表示されることになります

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


jibunnotama[i].x = jibunnotama[i].x + 10;


if (jibunnotama[i].x - tsix > 640)

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

//🌞🌞🌞🌞🌞👆 tsixにはZボタンが押されたときの自分の弾のいる位置のx座標を記憶していたのでjibunnotama[i].xがZボタンが押されたときの自分の弾のいる位置から640ドット離れた時jibunnotama[i].x -tsix> 640は真の値1を持つことになります

jibunnotama[i].life = 0;


}


}




ScreenFlip();


ClearDrawScreen();


};



DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します


}


デバッグなしで実行をしてから一度プログラムを終了し

生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです

👇


https://www.youtube.com/watch?v=yuTIv4VAhoo



マックス「かっこいい〜なああ


時間差か


いいじゃないか


敵の飛行機の爆発している時間が変化した」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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