ライフゲージにどの飛行機のライフなのかがわかるようにDrawString関数を使って名前をつけてみましょう


solarplexuss「


自分の飛行機のライフゲージまでつくっちゃった


👇


https://youtu.be/B-Ff3RzG_G0


ねえ


このライフゲージに名前をつけられないかな?


名前がついていると


このゲージがどの飛行機のライフゲージか


わかりやすくなるんじゃない?」


ソーラー「そうだね


文字列を表示することのできるDrawString関数をつかってみる?


DrawString関数の書式は


DrawString(0, 460, "ソーラーの飛行機", GetColor(255, 255, 255));


のようになります


第1引数の0は文字列の表示が開始されるx座標の値


第2引数の460は文字列の表示が開始されるy座標の値


を表しています


第3引数が


"ソーラーの飛行機"

だと


ソーラーの飛行機



ゲーム画面に描かれることになります


第4引数に


GetColor(255, 255, 255)



記述されていると


白色で文字列が表示されることになります



GetColor(255, 255, 255)



白色に対応するデータを表しています


GetColor(255, 255, 255)


が実行されると


GetColor(255, 255, 255)には戻り値として白色に対応する値が返されます


DrawString関数は


その値を利用して


文字列を白く表示することになります


DrawString(0, 460, "ソーラーの飛行機", GetColor(255, 255, 255));



int color;


color = GetColor(255, 255, 255);

// GetColor関数には戻り値として白色に対応する値が返されます

DrawString(0, 460, "ソーラーの飛行機", color);



記述してもいいね



じゃあ


ライフゲージに名前を付けるプログラムを実行してみたいと思います


そのプログラムはこちらです

👇



#include "DxLib.h"


struct Character {

double x;

double y;

int graphichandle[7];

int graphicnumber;//👈🌞メンバ変数にgraphicnumber を追加しました

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 = 600;//👈🌞🌞🌞 jibunnohikouki.life に格納される値を100にしてみました🌞🌞🌞



jibunnohikouki.graphicnumber = 0;

//👆 jibunnohikouki.graphicnumberは😋自分の飛行機😋のアニメーションパターンをとりあつかっています


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

//👆 構造体変数jibunnohikoukiは😋自分の飛行機😋のデータをとりあつかっています



struct Character akaitekinohikouki[10];

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


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


akaitekinohikouki[i].x = 605;


akaitekinohikouki[i].y = 35 * i;


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


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


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


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


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


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


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




akaitekinohikouki[i].graphicnumber = 128 * GetRand(6);


//👆 akaitekinohikouki[i].graphicnumberは😋敵の飛行機😋のアニメーションパターンをとりあつかっています


//👆ここです🌞🌞🌞ここでAkai tekinohikouki[i].graphicnumberにランダムに0,128,256,384,512,640,768の値が代入されることになります




akaitekinohikouki[i].life = 100;//👈🌞🌞🌞敵の飛行機に自分の弾が100発当たると破壊されるようにしました




}


struct Character jibunnotama[11];

//🌞👆自分の弾を11個作成しています

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


jibunnotama[i].x = 0;

jibunnotama[i].y = 0;


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


jibunnotama[i].life = 0;


}


jibunnotama[10].x = 641;

jibunnotama[10].y = 0;


//🌞🌞🌞見えない弾にするために jibunnotama[10].graphichandle[0] は初期化しません

jibunnotama[10].life = 0;




struct Character akaitekinohikoukinotama[10][10];


//🌞👆敵の飛行機、敵の飛行機1、敵の飛行機2、敵の飛行機3、敵の飛行機4、敵の飛行機5、敵の飛行機6、敵の飛行機7 、敵の飛行機8、敵の飛行機9、敵の飛行機10から発射される10個の敵の弾のデータをとりあつかうために100個の構造体変数を作成しています



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


for (int j = 0; j < 10; j = j + 1) {


akaitekinohikoukinotama[i][j].x = 1000;

akaitekinohikoukinotama[i][j].y = 1000;


akaitekinohikoukinotama[i][j].graphichandle[0] = LoadGraph("画像データ\\敵の飛行機の弾ハート.bmp");


akaitekinohikoukinotama[i][j].life = 0;


}


}





struct Character akaitekinohikoukinobakuhatunohonoo[10];

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


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


akaitekinohikoukinobakuhatunohonoo[i].x = 0;


akaitekinohikoukinobakuhatunohonoo[i].y = 0;


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


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


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


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


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


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


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



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



akaitekinohikoukinobakuhatunohonoo[i].graphicnumber = 0; //🌞🌞🌞爆発の炎ごとにgraphicnumberを用意して初期化しています


}



struct Character akaitekinohikoukiwooouhikari;


akaitekinohikoukiwooouhikari.x = 0;


akaitekinohikoukiwooouhikari.y = 0;


akaitekinohikoukiwooouhikari.graphichandle[0] = LoadGraph("画像データ\\赤い敵の飛行機を覆う光.bmp");




akaitekinohikoukiwooouhikari.life = 0;




struct Character jibunnohikoukinobakuhatunohonoo;

//👆🌞構造体変数jibunnohikoukinobakuhatunohonooを作成し自分の飛行機の爆発の炎のデータを取り扱います




jibunnohikoukinobakuhatunohonoo.x = 0;


jibunnohikoukinobakuhatunohonoo.y = 0;


jibunnohikoukinobakuhatunohonoo.graphichandle[0] = LoadGraph("画像データ\\自分の飛行機の爆発の炎.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[1] = LoadGraph("画像データ\\自分の飛行機の爆発の炎1.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[2] = LoadGraph("画像データ\\自分の飛行機の爆発の炎2.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[3] = LoadGraph("画像データ\\自分の飛行機の爆発の炎3.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[4] = LoadGraph("画像データ\\自分の飛行機の爆発の炎4.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[5] = LoadGraph("画像データ\\自分の飛行機の爆発の炎5.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[6] = LoadGraph("画像データ\\自分の飛行機の爆発の炎6.bmp");



jibunnohikoukinobakuhatunohonoo.life = 0;//🌞🌞🌞 jibunnohikoukinobakuhatunohonoo.lifeを初期化しています



jibunnohikoukinobakuhatunohonoo.graphicnumber = 0; //🌞🌞🌞自分の飛行機の爆発の炎のgraphicnumberを用意して初期化しています



struct Character jibunnohikoukiwooouhikari;



jibunnohikoukiwooouhikari.x = 0;


jibunnohikoukiwooouhikari.y = 0;


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



jibunnohikoukiwooouhikari.life = 0;




int jibunnotama_tsix[11];//🌞🌞🌞tsix[i]には自分の飛行機から発射される弾の最初の位置のx座標が代入されることになります tは弾、sは最初、iは位置、xはx座標を表しています


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


jibunnotama_tsix[i] = 0;


}






int jibunnotama_count[11];//🌞🌞🌞ここでint型の変数count[i](0<i<11)を作製し0で初期化しました


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


jibunnotama_count[i] = 0;


}





int akaitekinohikoukinotama_count[10][10];


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


for (int j = 0; j < 10; j = j + 1) {


akaitekinohikoukinotama_count[i][j] = 0;


}


}


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


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


for (int j = 0; j < 10; j = j + 1) {


akaitekinohikoukinotama_tsix[i][j] = 0;


}


}


double akaitekinohikoukinoidoupattern[4][3] = { {20,-0.1, 0.1},{20,-0.1,-0.1},{20,-0.1, 0.1},{20,-0.1,-0.1} };//👈🌞🌞🌞🌞🌞ここです敵の飛行機の移動速度は1ドットのときの10分の1になります



int akaitekinohikouki_m = 0;


int akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[0][0];






int hassyasareru_jibunnotama = 0;


int hassyasareru_akaitekinohikoukinotama[10];



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


hassyasareru_akaitekinohikoukinotama[i] = 0;


}




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




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


DrawBox(0, 470, jibunnohikouki.life, 480, GetColor(255, 0, 255), TRUE);


DrawString(0, 460, "ソーラーの飛行機", GetColor(255, 255, 255));//👈💖💖💖ここです




int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);



if (jibunnohikouki.life > 0) {


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 > 0) {


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


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


jibunnohikouki.graphicnumber = jibunnohikouki.graphicnumber + 1;


}


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

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


if (akaitekinohikouki_repeat > 0) {


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


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


akaitekinohikouki[i].x = akaitekinohikouki[i].x + akaitekinohikoukinoidoupattern[akaitekinohikouki_m][1];


akaitekinohikouki[i].y = akaitekinohikouki[i].y + akaitekinohikoukinoidoupattern[akaitekinohikouki_m][2];

}



}


akaitekinohikouki_repeat = akaitekinohikouki_repeat - 1;

}


if (akaitekinohikouki_repeat == 0) {


if (akaitekinohikouki_m < 4) {


akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[akaitekinohikouki_m][0];


akaitekinohikouki_m = akaitekinohikouki_m + 1;

}




if (akaitekinohikouki_m == 4) {

akaitekinohikouki_m = 0;

akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[akaitekinohikouki_m][0];


}


}



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


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



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


akaitekinohikouki[i].graphicnumber = akaitekinohikouki[i].graphicnumber + 1;


//🌞🌞🌞 (akaitekinohikouki[i].graphicnumber)を128で割っているので通常のアニメーション速度の128分の1の速度で画像が切り替わります

//👆🌞🌞🌞ここです すでにakaitekinohikouki[i].graphicnumberには0,128,256,384,512,640,768の値のうちの1つがランダムに代入されているので敵の飛行機, 敵の飛行機1・・・敵の飛行機9はそれぞれ異なるタイミングでアニメーションすることになります


}


}


//🌞🌞🌞👇自分の飛行機と敵の飛行機がぶつかったとき自分の飛行機と敵の飛行機が消滅するプログラムはこちらです



if (jibunnohikouki.life > 0)//👈💖💖💖ここです


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


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


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

{


jibunnohikouki.life = 0;


akaitekinohikouki[i].life = 0;


//👆🌞自分の飛行機と敵の飛行機が衝突すると共に消滅することになります



akaitekinohikoukinobakuhatunohonoo[i].x = akaitekinohikouki[i].x;


akaitekinohikoukinobakuhatunohonoo[i].y = akaitekinohikouki[i].y;



akaitekinohikoukinobakuhatunohonoo[i].life = 128 + 128 * GetRand(9); //🌞🌞🌞 akaitekinohikoukinobakuhatunohonoo[0].lifeに0以上の値を代入しました akaitekinohikoukinobakuhatunohonoo[0].lifeにランダムに異なる値を代入することにより爆発する時間をランダムに変化させています




jibunnohikoukinobakuhatunohonoo.x = jibunnohikouki.x;


jibunnohikoukinobakuhatunohonoo.y = jibunnohikouki.y;


jibunnohikoukinobakuhatunohonoo.life = 128 + 128 * GetRand(9); //🌞🌞🌞 jibunnohikoukinobakuhatunohonoo.lifeに0以上の値を代入しました jibunnohikoukinobakuhatunohonoo.lifeにランダムに異なる値を代入することにより自分の飛行機が爆発する時間をランダムに変化させています



}

}


}

//🌞🌞🌞👆自分の飛行機と敵の飛行機がぶつかったとき自分の飛行機と敵の飛行機が消滅するプログラムはこちらです




//👇🌞🌞🌞自分の飛行機と敵の弾が衝突したとき当たった自分の飛行機と敵の弾が消え自分の飛行機が爆発するはず😊のプログラムです



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


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


if (akaitekinohikoukinotama[i][j].life > 0) //👈💖ここなのよん


if (jibunnohikouki.life > 0) {


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


jibunnohikouki.life = jibunnohikouki.life - 1;


akaitekinohikoukinotama[i][j].life = 0;


//👆🌞自分の飛行機と敵の弾が衝突すると敵の弾だけが消滅することになります


//👇💖💖💖注目ポイントはここです


jibunnohikoukiwooouhikari.x = jibunnohikouki.x;


jibunnohikoukiwooouhikari.y = jibunnohikouki.y;


//🌞🌞🌞敵の弾と自分の飛行機がぶつかると、そのときの自分の飛行機の位置座標がjibunnohikoukiwooouhikari.x, jibunnohikoukiwooouhikari.yに代入されます


jibunnohikoukiwooouhikari.life = 5;



//👆💖💖💖注目ポイントはここです



if (jibunnohikouki.life == 0) {


jibunnohikoukinobakuhatunohonoo.x = jibunnohikouki.x;


jibunnohikoukinobakuhatunohonoo.y = jibunnohikouki.y;


jibunnohikoukinobakuhatunohonoo.life = 128 + 128 * GetRand(9); //🌞🌞🌞 jibunnohikoukinobakuhatunohonoo.lifeに0以上の値を代入しました jibunnohikoukinobakuhatunohonoo.lifeにランダムに異なる値を代入することにより自分の飛行機が爆発する時間をランダムに変化させています

}



}

}


}


}


//👆🌞🌞🌞自分の飛行機と敵の弾が衝突したとき当たった自分の飛行機と敵の弾が消え自分の飛行機が爆発するはず😊のプログラムです







//👇🌞🌞🌞敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムです


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


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


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


if (jibunnotama[j].life > 0)


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


jibunnotama[j].life = 0;


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


//👆🌞自分の弾と敵の飛行機が衝突すると自分の弾は消滅しakaitekinohikouki[i].lifeに格納されている値は1減ることになります akaitekinohikouki[i].lifeに格納されている値が0になると敵の飛行機は消滅することになります


akaitekinohikoukiwooouhikari.x = akaitekinohikouki[i].x;


akaitekinohikoukiwooouhikari.y = akaitekinohikouki[i].y;


//🌞🌞🌞自分の弾と敵の飛行機がぶつかると敵の飛行機の位置座標がakaitekinohikoukiwooouhikari.x, akaitekinohikoukiwooouhikari.yに代入されます


akaitekinohikoukiwooouhikari.life = 5;






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


akaitekinohikoukinobakuhatunohonoo[i].x = akaitekinohikouki[i].x;


akaitekinohikoukinobakuhatunohonoo[i].y = akaitekinohikouki[i].y;


akaitekinohikoukinobakuhatunohonoo[i].life = 128 + 128 * GetRand(9); //🌞🌞🌞 akaitekinohikoukinobakuhatunohonoo[i].lifeに0以上の値を代入しました akaitekinohikoukinobakuhatunohonoo[0].life, akaitekinohikoukinobakuhatunohonoo[1].life, akaitekinohikoukinobakuhatunohonoo[2].life, akaitekinohikoukinobakuhatunohonoo[3].life, akaitekinohikoukinobakuhatunohonoo[4].life, akaitekinohikoukinobakuhatunohonoo[5].life, akaitekinohikoukinobakuhatunohonoo[6].life, akaitekinohikoukinobakuhatunohonoo[7].life, akaitekinohikoukinobakuhatunohonoo[8].life, akaitekinohikoukinobakuhatunohonoo[9].lifeにランダムに異なる値を代入することにより爆発する時間をランダムに変化させています


}

}


}

}


}



//👆🌞🌞🌞敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムです




if (akaitekinohikoukiwooouhikari.life > 0) {



SetDrawBlendMode(DX_BLENDMODE_ALPHA, 200);


//👆🌞🌞🌞描画ブレンドモードがアルファブレンドになっています


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



SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);

akaitekinohikoukiwooouhikari.life = akaitekinohikoukiwooouhikari.life - 1;


// 👆🌞🌞🌞描画ブレンドモードをノーブレンドにして描画ブレンドモードを解除しています

}



//👆🌞🌞🌞敵の飛行機を覆う光の画像が描かれます akaitekinohikoukiwooouhikari.lifeに格納されている値が0になると敵の飛行機を覆う光の画像が描かれることはありません


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


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


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


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

akaitekinohikoukinobakuhatunohonoo[i].graphicnumber = akaitekinohikoukinobakuhatunohonoo[i].graphicnumber + 1;

//👆🌞🌞🌞爆発の炎がアニメーションするよう設定が行われています



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



}


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

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


}




if (jibunnohikoukiwooouhikari.life > 0) {



SetDrawBlendMode(DX_BLENDMODE_ALPHA, 200);


//👆🌞🌞🌞描画ブレンドモードがアルファブレンドになっています


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



SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);

jibunnohikoukiwooouhikari.life = jibunnohikoukiwooouhikari.life - 1;


// 👆🌞🌞🌞描画ブレンドモードをノーブレンドにして描画ブレンドモードを解除しています

}



//👆🌞🌞🌞自分の飛行機を覆う光の画像が描かれます jibunnohikoukiwooouhikari.lifeに格納されている値が0になると自分の飛行機を覆う光の画像が描かれることはありません




if (jibunnohikoukinobakuhatunohonoo.life > 0) {


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


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

jibunnohikoukinobakuhatunohonoo.graphicnumber = jibunnohikoukinobakuhatunohonoo.graphicnumber + 1;

//👆🌞🌞🌞自分の飛行機の爆発の炎がアニメーションするよう設定が行われています



jibunnohikoukinobakuhatunohonoo.life = jibunnohikoukinobakuhatunohonoo.life - 1;



}


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

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





//👇🌞🌞🌞新型 自分の飛行機から弾が10連射されるプログラムです


//👇新たに11個目の弾jibunnotama[10]の登場です


if (jibunnohikouki.life > 0)


if (jibunnotama[10].x > 640)

if (key & PAD_INPUT_A) {


if (jibunnotama[0].life == 0 && hassyasareru_jibunnotama == 0) {


jibunnotama[0].x = jibunnohikouki.x + 10;


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


jibunnotama_tsix[0] = jibunnotama[0].x;


jibunnotama[0].life = 1;


hassyasareru_jibunnotama = 1;


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


}


}




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


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



if (jibunnotama_count[i] == 0 && hassyasareru_jibunnotama == i + 1) {


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


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


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


jibunnotama_tsix[i + 1] = jibunnotama[i + 1].x;


jibunnotama[i + 1].life = 1;


hassyasareru_jibunnotama = i + 2;


jibunnotama_count[i + 1] = 30;


}


}


}


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




if (jibunnotama_count[10] == 0 && hassyasareru_jibunnotama == 11) {


hassyasareru_jibunnotama = 0;


}






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


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

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

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


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


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

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

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

jibunnotama[i].life = 0;


}


}


//👆🌞🌞🌞新型 自分の飛行機から弾が10連射されるプログラムです







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





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



if (akaitekinohikouki[i].life > 1 && GetRand(15) == 0 && akaitekinohikoukinotama[i][0].life == 0 && hassyasareru_akaitekinohikoukinotama[i] == 0) {


akaitekinohikoukinotama[i][0].x = akaitekinohikouki[i].x - 10;


akaitekinohikoukinotama[i][0].y = akaitekinohikouki[i].y + 10;


akaitekinohikoukinotama_tsix[i][0] = akaitekinohikoukinotama[i][0].x;


akaitekinohikoukinotama[i][0].life = 1;


hassyasareru_akaitekinohikoukinotama[i] = 1;


akaitekinohikoukinotama_count[i][0] = 20 + GetRand(25);//👈🌞🌞🌞敵akaitekinohikouki[i]から10連射される最初の弾akaitekinohikoukinotama[i][0]と次弾akaitekinohikoukinotama[i][1]の間隔を調整することができます



}




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


if (akaitekinohikoukinotama_count[i][j] > 0) { akaitekinohikoukinotama_count[i][j] = akaitekinohikoukinotama_count[i][j] - 1; }



if (akaitekinohikoukinotama_count[i][j] == 0 && hassyasareru_akaitekinohikoukinotama[i] == j + 1) {


if (akaitekinohikoukinotama[i][j + 1].life == 0) {


akaitekinohikoukinotama[i][j + 1].x = akaitekinohikouki[i].x - 10;


akaitekinohikoukinotama[i][j + 1].y = akaitekinohikouki[i].y + 10;


akaitekinohikoukinotama_tsix[i][j + 1] = akaitekinohikoukinotama[i][j + 1].x;




akaitekinohikoukinotama[i][j + 1].life = 1;


hassyasareru_akaitekinohikoukinotama[i] = j + 2;


akaitekinohikoukinotama_count[i][j + 1] = 20 + GetRand(25);//👈🌞🌞🌞敵の飛行機akaitekinohikouki[i]から10連射される敵の弾akaitekinohikoukinotama[i][j + 1]と次に発射される弾akaitekinohikoukinotama[i][j + 2]の間隔を調整することができます


}


}


}




if (akaitekinohikoukinotama_count[i][9] > 0) { akaitekinohikoukinotama_count[i][9] = akaitekinohikoukinotama_count[i][9] - 1; }




if (akaitekinohikoukinotama_count[i][9] == 0 && hassyasareru_akaitekinohikoukinotama[i] == 10) {


hassyasareru_akaitekinohikoukinotama[i] = 0;


}


for (int j = 0; j < 10; j = j + 1) {


if (akaitekinohikoukinotama[i][j].life == 1) {

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

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


akaitekinohikoukinotama[i][j].x = akaitekinohikoukinotama[i][j].x - 1;


if (akaitekinohikoukinotama_tsix[i][j] - akaitekinohikoukinotama[i][j].x > 640)

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

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

akaitekinohikoukinotama[i][j].life = 0;


}


}


}





ScreenFlip();


ClearDrawScreen();


};



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


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


}



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

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

👇

https://youtu.be/Z5YgSi_qrQ0


solarplexuss「あ


ソーラーの飛行機



ライフゲージの上に表示されてる


しかし


ちょっと


文字の大きさが大きい感じがする


もっと小さくできないかな?」



ソーラー「そう


じゃあ


こんなのはどうかな?」



👇


#include "DxLib.h"


struct Character {

double x;

double y;

int graphichandle[7];

int graphicnumber;//👈🌞メンバ変数にgraphicnumber を追加しました

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 = 600;//👈🌞🌞🌞 jibunnohikouki.life に格納される値を100にしてみました🌞🌞🌞



jibunnohikouki.graphicnumber = 0;

//👆 jibunnohikouki.graphicnumberは😋自分の飛行機😋のアニメーションパターンをとりあつかっています


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

//👆 構造体変数jibunnohikoukiは😋自分の飛行機😋のデータをとりあつかっています



struct Character akaitekinohikouki[10];

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


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


akaitekinohikouki[i].x = 605;


akaitekinohikouki[i].y = 35 * i;


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


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


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


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


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


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


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




akaitekinohikouki[i].graphicnumber = 128 * GetRand(6);


//👆 akaitekinohikouki[i].graphicnumberは😋敵の飛行機😋のアニメーションパターンをとりあつかっています


//👆ここです🌞🌞🌞ここでAkai tekinohikouki[i].graphicnumberにランダムに0,128,256,384,512,640,768の値が代入されることになります




akaitekinohikouki[i].life = 100;//👈🌞🌞🌞敵の飛行機に自分の弾が100発当たると破壊されるようにしました




}


struct Character jibunnotama[11];

//🌞👆自分の弾を11個作成しています

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


jibunnotama[i].x = 0;

jibunnotama[i].y = 0;


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


jibunnotama[i].life = 0;


}


jibunnotama[10].x = 641;

jibunnotama[10].y = 0;


//🌞🌞🌞見えない弾にするために jibunnotama[10].graphichandle[0] は初期化しません

jibunnotama[10].life = 0;




struct Character akaitekinohikoukinotama[10][10];


//🌞👆敵の飛行機、敵の飛行機1、敵の飛行機2、敵の飛行機3、敵の飛行機4、敵の飛行機5、敵の飛行機6、敵の飛行機7 、敵の飛行機8、敵の飛行機9、敵の飛行機10から発射される10個の敵の弾のデータをとりあつかうために100個の構造体変数を作成しています



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


for (int j = 0; j < 10; j = j + 1) {


akaitekinohikoukinotama[i][j].x = 1000;

akaitekinohikoukinotama[i][j].y = 1000;


akaitekinohikoukinotama[i][j].graphichandle[0] = LoadGraph("画像データ\\敵の飛行機の弾ハート.bmp");


akaitekinohikoukinotama[i][j].life = 0;


}


}





struct Character akaitekinohikoukinobakuhatunohonoo[10];

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


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


akaitekinohikoukinobakuhatunohonoo[i].x = 0;


akaitekinohikoukinobakuhatunohonoo[i].y = 0;


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


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


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


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


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


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


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



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



akaitekinohikoukinobakuhatunohonoo[i].graphicnumber = 0; //🌞🌞🌞爆発の炎ごとにgraphicnumberを用意して初期化しています


}



struct Character akaitekinohikoukiwooouhikari;


akaitekinohikoukiwooouhikari.x = 0;


akaitekinohikoukiwooouhikari.y = 0;


akaitekinohikoukiwooouhikari.graphichandle[0] = LoadGraph("画像データ\\赤い敵の飛行機を覆う光.bmp");




akaitekinohikoukiwooouhikari.life = 0;




struct Character jibunnohikoukinobakuhatunohonoo;

//👆🌞構造体変数jibunnohikoukinobakuhatunohonooを作成し自分の飛行機の爆発の炎のデータを取り扱います




jibunnohikoukinobakuhatunohonoo.x = 0;


jibunnohikoukinobakuhatunohonoo.y = 0;


jibunnohikoukinobakuhatunohonoo.graphichandle[0] = LoadGraph("画像データ\\自分の飛行機の爆発の炎.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[1] = LoadGraph("画像データ\\自分の飛行機の爆発の炎1.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[2] = LoadGraph("画像データ\\自分の飛行機の爆発の炎2.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[3] = LoadGraph("画像データ\\自分の飛行機の爆発の炎3.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[4] = LoadGraph("画像データ\\自分の飛行機の爆発の炎4.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[5] = LoadGraph("画像データ\\自分の飛行機の爆発の炎5.bmp");


jibunnohikoukinobakuhatunohonoo.graphichandle[6] = LoadGraph("画像データ\\自分の飛行機の爆発の炎6.bmp");



jibunnohikoukinobakuhatunohonoo.life = 0;//🌞🌞🌞 jibunnohikoukinobakuhatunohonoo.lifeを初期化しています



jibunnohikoukinobakuhatunohonoo.graphicnumber = 0; //🌞🌞🌞自分の飛行機の爆発の炎のgraphicnumberを用意して初期化しています



struct Character jibunnohikoukiwooouhikari;



jibunnohikoukiwooouhikari.x = 0;


jibunnohikoukiwooouhikari.y = 0;


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



jibunnohikoukiwooouhikari.life = 0;




int jibunnotama_tsix[11];//🌞🌞🌞tsix[i]には自分の飛行機から発射される弾の最初の位置のx座標が代入されることになります tは弾、sは最初、iは位置、xはx座標を表しています


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


jibunnotama_tsix[i] = 0;


}






int jibunnotama_count[11];//🌞🌞🌞ここでint型の変数count[i](0<i<11)を作製し0で初期化しました


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


jibunnotama_count[i] = 0;


}





int akaitekinohikoukinotama_count[10][10];


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


for (int j = 0; j < 10; j = j + 1) {


akaitekinohikoukinotama_count[i][j] = 0;


}


}


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


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


for (int j = 0; j < 10; j = j + 1) {


akaitekinohikoukinotama_tsix[i][j] = 0;


}


}


double akaitekinohikoukinoidoupattern[4][3] = { {20,-0.1, 0.1},{20,-0.1,-0.1},{20,-0.1, 0.1},{20,-0.1,-0.1} };//👈🌞🌞🌞🌞🌞ここです敵の飛行機の移動速度は1ドットのときの10分の1になります



int akaitekinohikouki_m = 0;


int akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[0][0];






int hassyasareru_jibunnotama = 0;


int hassyasareru_akaitekinohikoukinotama[10];



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


hassyasareru_akaitekinohikoukinotama[i] = 0;


}




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




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


DrawBox(0, 470, jibunnohikouki.life, 480, GetColor(255, 0, 255), TRUE);


DrawString(0, 460, "LIFE", GetColor(255, 255, 255));//👈💖💖💖ここです




int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);



if (jibunnohikouki.life > 0) {


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 > 0) {


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


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


jibunnohikouki.graphicnumber = jibunnohikouki.graphicnumber + 1;


}


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

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


if (akaitekinohikouki_repeat > 0) {


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


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


akaitekinohikouki[i].x = akaitekinohikouki[i].x + akaitekinohikoukinoidoupattern[akaitekinohikouki_m][1];


akaitekinohikouki[i].y = akaitekinohikouki[i].y + akaitekinohikoukinoidoupattern[akaitekinohikouki_m][2];

}



}


akaitekinohikouki_repeat = akaitekinohikouki_repeat - 1;

}


if (akaitekinohikouki_repeat == 0) {


if (akaitekinohikouki_m < 4) {


akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[akaitekinohikouki_m][0];


akaitekinohikouki_m = akaitekinohikouki_m + 1;

}




if (akaitekinohikouki_m == 4) {

akaitekinohikouki_m = 0;

akaitekinohikouki_repeat = akaitekinohikoukinoidoupattern[akaitekinohikouki_m][0];


}


}



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


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



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


akaitekinohikouki[i].graphicnumber = akaitekinohikouki[i].graphicnumber + 1;


//🌞🌞🌞 (akaitekinohikouki[i].graphicnumber)を128で割っているので通常のアニメーション速度の128分の1の速度で画像が切り替わります

//👆🌞🌞🌞ここです すでにakaitekinohikouki[i].graphicnumberには0,128,256,384,512,640,768の値のうちの1つがランダムに代入されているので敵の飛行機, 敵の飛行機1・・・敵の飛行機9はそれぞれ異なるタイミングでアニメーションすることになります


}


}


//🌞🌞🌞👇自分の飛行機と敵の飛行機がぶつかったとき自分の飛行機と敵の飛行機が消滅するプログラムはこちらです



if (jibunnohikouki.life > 0)//👈💖💖💖ここです


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


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


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

{


jibunnohikouki.life = 0;


akaitekinohikouki[i].life = 0;


//👆🌞自分の飛行機と敵の飛行機が衝突すると共に消滅することになります



akaitekinohikoukinobakuhatunohonoo[i].x = akaitekinohikouki[i].x;


akaitekinohikoukinobakuhatunohonoo[i].y = akaitekinohikouki[i].y;



akaitekinohikoukinobakuhatunohonoo[i].life = 128 + 128 * GetRand(9); //🌞🌞🌞 akaitekinohikoukinobakuhatunohonoo[0].lifeに0以上の値を代入しました akaitekinohikoukinobakuhatunohonoo[0].lifeにランダムに異なる値を代入することにより爆発する時間をランダムに変化させています




jibunnohikoukinobakuhatunohonoo.x = jibunnohikouki.x;


jibunnohikoukinobakuhatunohonoo.y = jibunnohikouki.y;


jibunnohikoukinobakuhatunohonoo.life = 128 + 128 * GetRand(9); //🌞🌞🌞 jibunnohikoukinobakuhatunohonoo.lifeに0以上の値を代入しました jibunnohikoukinobakuhatunohonoo.lifeにランダムに異なる値を代入することにより自分の飛行機が爆発する時間をランダムに変化させています



}

}


}

//🌞🌞🌞👆自分の飛行機と敵の飛行機がぶつかったとき自分の飛行機と敵の飛行機が消滅するプログラムはこちらです




//👇🌞🌞🌞自分の飛行機と敵の弾が衝突したとき当たった自分の飛行機と敵の弾が消え自分の飛行機が爆発するはず😊のプログラムです



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


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


if (akaitekinohikoukinotama[i][j].life > 0) //👈💖ここなのよん


if (jibunnohikouki.life > 0) {


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


jibunnohikouki.life = jibunnohikouki.life - 1;


akaitekinohikoukinotama[i][j].life = 0;


//👆🌞自分の飛行機と敵の弾が衝突すると敵の弾だけが消滅することになります


//👇💖💖💖注目ポイントはここです


jibunnohikoukiwooouhikari.x = jibunnohikouki.x;


jibunnohikoukiwooouhikari.y = jibunnohikouki.y;


//🌞🌞🌞敵の弾と自分の飛行機がぶつかると、そのときの自分の飛行機の位置座標がjibunnohikoukiwooouhikari.x, jibunnohikoukiwooouhikari.yに代入されます


jibunnohikoukiwooouhikari.life = 5;



//👆💖💖💖注目ポイントはここです



if (jibunnohikouki.life == 0) {


jibunnohikoukinobakuhatunohonoo.x = jibunnohikouki.x;


jibunnohikoukinobakuhatunohonoo.y = jibunnohikouki.y;


jibunnohikoukinobakuhatunohonoo.life = 128 + 128 * GetRand(9); //🌞🌞🌞 jibunnohikoukinobakuhatunohonoo.lifeに0以上の値を代入しました jibunnohikoukinobakuhatunohonoo.lifeにランダムに異なる値を代入することにより自分の飛行機が爆発する時間をランダムに変化させています

}



}

}


}


}


//👆🌞🌞🌞自分の飛行機と敵の弾が衝突したとき当たった自分の飛行機と敵の弾が消え自分の飛行機が爆発するはず😊のプログラムです







//👇🌞🌞🌞敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムです


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


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


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


if (jibunnotama[j].life > 0)


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


jibunnotama[j].life = 0;


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


//👆🌞自分の弾と敵の飛行機が衝突すると自分の弾は消滅しakaitekinohikouki[i].lifeに格納されている値は1減ることになります akaitekinohikouki[i].lifeに格納されている値が0になると敵の飛行機は消滅することになります


akaitekinohikoukiwooouhikari.x = akaitekinohikouki[i].x;


akaitekinohikoukiwooouhikari.y = akaitekinohikouki[i].y;


//🌞🌞🌞自分の弾と敵の飛行機がぶつかると敵の飛行機の位置座標がakaitekinohikoukiwooouhikari.x, akaitekinohikoukiwooouhikari.yに代入されます


akaitekinohikoukiwooouhikari.life = 5;






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


akaitekinohikoukinobakuhatunohonoo[i].x = akaitekinohikouki[i].x;


akaitekinohikoukinobakuhatunohonoo[i].y = akaitekinohikouki[i].y;


akaitekinohikoukinobakuhatunohonoo[i].life = 128 + 128 * GetRand(9); //🌞🌞🌞 akaitekinohikoukinobakuhatunohonoo[i].lifeに0以上の値を代入しました akaitekinohikoukinobakuhatunohonoo[0].life, akaitekinohikoukinobakuhatunohonoo[1].life, akaitekinohikoukinobakuhatunohonoo[2].life, akaitekinohikoukinobakuhatunohonoo[3].life, akaitekinohikoukinobakuhatunohonoo[4].life, akaitekinohikoukinobakuhatunohonoo[5].life, akaitekinohikoukinobakuhatunohonoo[6].life, akaitekinohikoukinobakuhatunohonoo[7].life, akaitekinohikoukinobakuhatunohonoo[8].life, akaitekinohikoukinobakuhatunohonoo[9].lifeにランダムに異なる値を代入することにより爆発する時間をランダムに変化させています


}

}


}

}


}



//👆🌞🌞🌞敵の飛行機と自分の弾が衝突したとき当たった自分の弾と敵の飛行機が消滅するプログラムです




if (akaitekinohikoukiwooouhikari.life > 0) {



SetDrawBlendMode(DX_BLENDMODE_ALPHA, 200);


//👆🌞🌞🌞描画ブレンドモードがアルファブレンドになっています


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



SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);

akaitekinohikoukiwooouhikari.life = akaitekinohikoukiwooouhikari.life - 1;


// 👆🌞🌞🌞描画ブレンドモードをノーブレンドにして描画ブレンドモードを解除しています

}



//👆🌞🌞🌞敵の飛行機を覆う光の画像が描かれます akaitekinohikoukiwooouhikari.lifeに格納されている値が0になると敵の飛行機を覆う光の画像が描かれることはありません


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


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


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


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

akaitekinohikoukinobakuhatunohonoo[i].graphicnumber = akaitekinohikoukinobakuhatunohonoo[i].graphicnumber + 1;

//👆🌞🌞🌞爆発の炎がアニメーションするよう設定が行われています



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



}


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

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


}




if (jibunnohikoukiwooouhikari.life > 0) {



SetDrawBlendMode(DX_BLENDMODE_ALPHA, 200);


//👆🌞🌞🌞描画ブレンドモードがアルファブレンドになっています


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



SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0);

jibunnohikoukiwooouhikari.life = jibunnohikoukiwooouhikari.life - 1;


// 👆🌞🌞🌞描画ブレンドモードをノーブレンドにして描画ブレンドモードを解除しています

}



//👆🌞🌞🌞自分の飛行機を覆う光の画像が描かれます jibunnohikoukiwooouhikari.lifeに格納されている値が0になると自分の飛行機を覆う光の画像が描かれることはありません




if (jibunnohikoukinobakuhatunohonoo.life > 0) {


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


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

jibunnohikoukinobakuhatunohonoo.graphicnumber = jibunnohikoukinobakuhatunohonoo.graphicnumber + 1;

//👆🌞🌞🌞自分の飛行機の爆発の炎がアニメーションするよう設定が行われています



jibunnohikoukinobakuhatunohonoo.life = jibunnohikoukinobakuhatunohonoo.life - 1;



}


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

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





//👇🌞🌞🌞新型 自分の飛行機から弾が10連射されるプログラムです


//👇新たに11個目の弾jibunnotama[10]の登場です


if (jibunnohikouki.life > 0)


if (jibunnotama[10].x > 640)

if (key & PAD_INPUT_A) {


if (jibunnotama[0].life == 0 && hassyasareru_jibunnotama == 0) {


jibunnotama[0].x = jibunnohikouki.x + 10;


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


jibunnotama_tsix[0] = jibunnotama[0].x;


jibunnotama[0].life = 1;


hassyasareru_jibunnotama = 1;


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


}


}




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


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



if (jibunnotama_count[i] == 0 && hassyasareru_jibunnotama == i + 1) {


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


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


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


jibunnotama_tsix[i + 1] = jibunnotama[i + 1].x;


jibunnotama[i + 1].life = 1;


hassyasareru_jibunnotama = i + 2;


jibunnotama_count[i + 1] = 30;


}


}


}


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




if (jibunnotama_count[10] == 0 && hassyasareru_jibunnotama == 11) {


hassyasareru_jibunnotama = 0;


}






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


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

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

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


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


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

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

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

jibunnotama[i].life = 0;


}


}


//👆🌞🌞🌞新型 自分の飛行機から弾が10連射されるプログラムです







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





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



if (akaitekinohikouki[i].life > 1 && GetRand(15) == 0 && akaitekinohikoukinotama[i][0].life == 0 && hassyasareru_akaitekinohikoukinotama[i] == 0) {


akaitekinohikoukinotama[i][0].x = akaitekinohikouki[i].x - 10;


akaitekinohikoukinotama[i][0].y = akaitekinohikouki[i].y + 10;


akaitekinohikoukinotama_tsix[i][0] = akaitekinohikoukinotama[i][0].x;


akaitekinohikoukinotama[i][0].life = 1;


hassyasareru_akaitekinohikoukinotama[i] = 1;


akaitekinohikoukinotama_count[i][0] = 20 + GetRand(25);//👈🌞🌞🌞敵akaitekinohikouki[i]から10連射される最初の弾akaitekinohikoukinotama[i][0]と次弾akaitekinohikoukinotama[i][1]の間隔を調整することができます



}




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


if (akaitekinohikoukinotama_count[i][j] > 0) { akaitekinohikoukinotama_count[i][j] = akaitekinohikoukinotama_count[i][j] - 1; }



if (akaitekinohikoukinotama_count[i][j] == 0 && hassyasareru_akaitekinohikoukinotama[i] == j + 1) {


if (akaitekinohikoukinotama[i][j + 1].life == 0) {


akaitekinohikoukinotama[i][j + 1].x = akaitekinohikouki[i].x - 10;


akaitekinohikoukinotama[i][j + 1].y = akaitekinohikouki[i].y + 10;


akaitekinohikoukinotama_tsix[i][j + 1] = akaitekinohikoukinotama[i][j + 1].x;




akaitekinohikoukinotama[i][j + 1].life = 1;


hassyasareru_akaitekinohikoukinotama[i] = j + 2;


akaitekinohikoukinotama_count[i][j + 1] = 20 + GetRand(25);//👈🌞🌞🌞敵の飛行機akaitekinohikouki[i]から10連射される敵の弾akaitekinohikoukinotama[i][j + 1]と次に発射される弾akaitekinohikoukinotama[i][j + 2]の間隔を調整することができます


}


}


}




if (akaitekinohikoukinotama_count[i][9] > 0) { akaitekinohikoukinotama_count[i][9] = akaitekinohikoukinotama_count[i][9] - 1; }




if (akaitekinohikoukinotama_count[i][9] == 0 && hassyasareru_akaitekinohikoukinotama[i] == 10) {


hassyasareru_akaitekinohikoukinotama[i] = 0;


}


for (int j = 0; j < 10; j = j + 1) {


if (akaitekinohikoukinotama[i][j].life == 1) {

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

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


akaitekinohikoukinotama[i][j].x = akaitekinohikoukinotama[i][j].x - 1;


if (akaitekinohikoukinotama_tsix[i][j] - akaitekinohikoukinotama[i][j].x > 640)

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

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

akaitekinohikoukinotama[i][j].life = 0;


}


}


}





ScreenFlip();


ClearDrawScreen();


};



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


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


}


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

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

👇

https://youtu.be/fOlEw4CEcyQ


solarplexuss「あ 


ライフゲージの名前が


ソーラーの飛行機から


LIFEになった


いいんじゃない


ちょっち


文字が大きいかな


だけど


文字の大きさなんて


どうやって


変えたらいいのかな


DrawString関数では


文字の大きさを変えることはできないよね」





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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