Zボタンを押したら2連射される弾の間隔を調整してみましょう

ソーラー「


Zボタンを押したら


弾が2連射されるプログラムを実行してきました


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

👇

#include "DxLib.h"


struct Character {

int x;

int y;

int graphichandle;

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関数です 裏画面に画像を描きます


struct Character jibunnohikouki;

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


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


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

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

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



struct Character jibunnotama;

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


jibunnotama.x = 0;


jibunnotama.y = 0;


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


jibunnotama.life = 0;


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


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


struct Character jibunnotama1;

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


jibunnotama1.x = 0;


jibunnotama1.y = 0;


jibunnotama1.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");


jibunnotama1.life = 0;


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


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



int i = 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 (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

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

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

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




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


//👆飛行機の画像を描きます





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


if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 20;


}



//🌞Zボタンが押されるとjibunnotama.life に格納される値が1になります ゲーム画面に自分の弾の画像データの表示が可能となります




if (jibunnotama.life == 1) {


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります

}






if (i > 0) { i = i -1; }//👈🌞🌞🌞ここです







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




if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 20;


}



//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります




if (jibunnotama1.life == 1) {



DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります


}





ScreenFlip();


ClearDrawScreen();


};



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


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


}


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

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

👇


https://www.youtube.com/watch?v=H-w2JMeYWPs

(そのまま動画をみただけではわかりにくいのですが


動画を一時停止してみれば弾が2連射


その後


単発で弾が発射されているのがよくわかります)



ソーラー「このプログラムの実行結果をごらんになられても


お分かりになられますように


Zボタンを押して


2連射される弾と弾の間隔がちょっと広かったですね


そこで


もうちょっと


2連射される弾と弾の間隔を短くしてみましょう


i=20;



i=5;



変更することにより


Zボタンを押したとき2連射される弾と弾の間隔を短くすることができます


2連射される弾と弾の間隔が短くなったプログラムはこちらです


(iに5が代入されるi=5;が実行される場合)


#include "DxLib.h"


struct Character {

int x;

int y;

int graphichandle;

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関数です 裏画面に画像を描きます


struct Character jibunnohikouki;

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


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


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

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

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



struct Character jibunnotama;

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


jibunnotama.x = 0;


jibunnotama.y = 0;


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


jibunnotama.life = 0;


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


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


struct Character jibunnotama1;

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


jibunnotama1.x = 0;


jibunnotama1.y = 0;


jibunnotama1.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");


jibunnotama1.life = 0;


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


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



int i = 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 (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

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

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

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




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


//👆飛行機の画像を描きます





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


if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 5;


}



//🌞Zボタンが押されるとjibunnotama.life に格納される値が1になります ゲーム画面に自分の弾の画像データの表示が可能となります




if (jibunnotama.life == 1) {


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります

}






if (i > 0) { i = i -1; }//👈🌞🌞🌞ここです







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




if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 5;


}



//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります




if (jibunnotama1.life == 1) {



DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります


}





ScreenFlip();


ClearDrawScreen();


};



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


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


}


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

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

👇


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


(そのまま動画をみただけではわかりにくいのですが


動画を一時停止してみれば弾が2連射


その後


単発で弾が発射されているのがよくわかります)




マックス「Zボタンを押して2連射される弾と弾の間隔が短くなった


ということは


iに格納される値をもっと


小さくすれば


もっと


Zボタンを押して2連射される弾と弾の間隔を短くすることができるんじゃないか?




ソーラー「それでは


今度は


i=5;


の部分を


i=3;


に変えてプログラムを実行してみましょう


Zボタンを押して2連射される弾と弾の間隔は


さらに短くなるかな?


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


👇(iに3が代入されるi=3;が実行される場合)


#include "DxLib.h"


struct Character {

int x;

int y;

int graphichandle;

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関数です 裏画面に画像を描きます


struct Character jibunnohikouki;

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


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


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

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

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



struct Character jibunnotama;

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


jibunnotama.x = 0;


jibunnotama.y = 0;


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


jibunnotama.life = 0;


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


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


struct Character jibunnotama1;

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


jibunnotama1.x = 0;


jibunnotama1.y = 0;


jibunnotama1.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");


jibunnotama1.life = 0;


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


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



int i = 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 (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

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

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

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




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


//👆飛行機の画像を描きます





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


if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 3;


}



//🌞Zボタンが押されるとjibunnotama.life に格納される値が1になります ゲーム画面に自分の弾の画像データの表示が可能となります




if (jibunnotama.life == 1) {


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります

}






if (i > 0) { i = i -1; }//👈🌞🌞🌞ここです







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




if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 3;


}



//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります




if (jibunnotama1.life == 1) {



DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります


}





ScreenFlip();


ClearDrawScreen();


};



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


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


}


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

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

👇


https://www.youtube.com/watch?v=ay0alC6-yHM


(そのまま動画をみただけではわかりにくいのですが


動画を一時停止してみれば弾が2連射


その後


単発で弾が発射されているのがよくわかります)






マックス「おお 


Zボタンを押して2連射される弾と弾の間隔がさらに短くなった


今は


i=3;


を実行した場合だろう


なら・・・


i=2;


を実行したらどうなるんだ?」


ソーラー「それでは


i=2;


が実行されたプログラムはこちらです


Zボタンを押したら2連射される


弾と弾の間隔はどうなるかな


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

👇

#include "DxLib.h"


struct Character {

int x;

int y;

int graphichandle;

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関数です 裏画面に画像を描きます


struct Character jibunnohikouki;

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


jibunnohikouki.x = 0;


jibunnohikouki.y = 0;


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

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

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



struct Character jibunnotama;

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


jibunnotama.x = 0;


jibunnotama.y = 0;


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


jibunnotama.life = 0;


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


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


struct Character jibunnotama1;

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


jibunnotama1.x = 0;


jibunnotama1.y = 0;


jibunnotama1.graphichandle = LoadGraph("画像データ\\自分の弾.bmp");


jibunnotama1.life = 0;


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


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



int i = 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 (key & PAD_INPUT_UP) jibunnohikouki.y = jibunnohikouki.y - 4;

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

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

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




DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);


//👆飛行機の画像を描きます





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


if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 2;


}



//🌞Zボタンが押されるとjibunnotama.life に格納される値が1になります ゲーム画面に自分の弾の画像データの表示が可能となります




if (jibunnotama.life == 1) {


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります

}






if (i > 0) { i = i - 1; }//👈🌞🌞🌞ここです







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




if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 2;


}



//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります




if (jibunnotama1.life == 1) {



DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります


}





ScreenFlip();


ClearDrawScreen();


};



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


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


}


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

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

👇


https://www.youtube.com/watch?v=p-Dj7rwYLbM


(そのまま動画をみただけではわかりにくいのですが


動画を一時停止してみれば弾が2連射


その後


単発で弾が発射されているのがよくわかります)




マックス「なんだか


Zボタンを押したら2連射される


弾と弾の間隔が短すぎて


前に発射される弾に


次に発射される弾が


めりこんでないか?」


solarplexuss「かわいいなあ😊」


ソーラー「それでは何が行われているか


このプログラムを観察してみましょう


まず


Zボタンを押している状態で


while{}文のブロック{}内の命令文の1回目の繰り返しです


👇


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


if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 2;


}



👆


が実行されると


jibunnotama.x には35が代入され


jibunnotama.y には20が代入され


jibunnotama.life には1 が代入されることになります


そして


i = 2;


の実行により


iに代入される値は2になりますね


次に


if (jibunnotama.life == 1) {


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります

}



実行に移りますね


jibunnotama.life には1 が代入されているので


条件式


jibunnotama.life == 1



1


を満たすので


ブロック{}内の命令文



DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります



実行されることになります


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


が実行されると


自分の弾の画像データの左上の頂点が(35,20)


となる位置に


自分の弾の画像が表示されます



次に


jibunnotama.x = jibunnotama.x + 10;


の実行により


jibunnotama.x に格納される値は


45になります


jibunnotama.x に格納される値は


45なので


jibunnotama.x > 640


とはなりません


ですので


if (jibunnotama.x > 640)に続く命令文


jibunnotama.life = 0;


は実行されず


jibunnotama.life に格納される値は1のままです


次に


if (i > 0) { i = i - 1; }//👈🌞🌞🌞ここです


の実行により


iの値は1になります


次に



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




if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 2;


}



//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります


の実行に移りますが


iの値は1なので


if ((key & PAD_INPUT_A) && (i == 0)) {}のブロック{}内の命令文は実行されません



jibunnotama1.life = 1;


も実行されないので


続く命令文


👇



if (jibunnotama1.life == 1) {



DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります


}

👆

のブロック{}内の命令文


も実行されません


ですので


自分の弾1の画像が表示されることはありません



次に


while{}文のブロック{}内の命令文の2回目の繰り返しです



まず

👇


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


if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 2;


}



👆


の実行ですが


iの値は1なので


if ((key & PAD_INPUT_A) && (i == 0)) {}の


ブロック{}内の命令文

👇

if (jibunnotama.life == 0) {


jibunnotama.x = jibunnohikouki.x + 35;


jibunnotama.y = jibunnohikouki.y + 20;


jibunnotama.life = 1;


}


i = 2;


👆


は実行されません



次に続く命令文


if (jibunnotama.life == 1) {


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります

}



実行に移りますね


jibunnotama.life には1 が代入されているので


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


jibunnotama.x = jibunnotama.x + 10;


if (jibunnotama.x > 640)


jibunnotama.life = 0;

//🌞🌞 jibunnotama.lifeが0の値をもつと自分の弾の画像はゲーム画面に表示されなくなります



実行されることになります


DrawGraph(jibunnotama.x, jibunnotama.y, jibunnotama.graphichandle, TRUE);


が実行されると


自分の弾の画像データの左上の頂点が(45,20)


となる位置に


自分の弾の画像が表示されます



次に


jibunnotama.x = jibunnotama.x + 10;


の実行により


jibunnotama.x に格納される値は


55になります


jibunnotama.x に格納されている値は


55なので


jibunnotama.x > 640


とはなりません


ですので


if (jibunnotama.x > 640)


に続く命令文


jibunnotama.life = 0;


は実行されず


jibunnotama.life に格納される値は1のままです


次に


if (i > 0) { i = i - 1; }//👈🌞🌞🌞ここです


の実行により


iの値は0になります


次に


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




if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 2;


}



//🌞Zボタンが押されるとjibunnotama1.life に格納される値が1になります ゲーム画面に自分の弾1の画像データの表示が可能となります


の実行に移ります


iの値は0なので


if ((key & PAD_INPUT_A) && (i == 0)) {}のブロック{}内の命令文



if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


i = 2;


が実行されることになります


まずは


if (jibunnotama1.life == 0) {


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;

}


の実行ですね



jibunnotama1.lifeに格納されている値は0なので



ブロック{}内の命令文


jibunnotama1.x = jibunnohikouki.x + 35;


jibunnotama1.y = jibunnohikouki.y + 20;


jibunnotama1.life = 1;


が実行されます


すると


jibunnotama1.x に格納される値は35


jibunnotama1.y に格納される値は20


jibunnotama1.life に格納される値は1になります



次に


👇


if (jibunnotama1.life == 1) {



DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります


}

👆

の実行に移ります


jibunnotama1.life に格納される値は1になったので


if (jibunnotama1.life == 1) {}のブロック{}内の命令文

👇

DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


jibunnotama1.x = jibunnotama1.x + 10;


if (jibunnotama1.x > 640)


jibunnotama1.life = 0;

//🌞 🌞jibunnotama1.lifeが0の値をもつと自分の弾1の画像はゲーム画面に表示されなくなります

👆

が実行されることになります


DrawGraph(jibunnotama1.x, jibunnotama1.y, jibunnotama1.graphichandle, TRUE);


が実行されると


自分の弾1の画像データの左上の頂点が(35,20)


となる位置に


自分の弾1の画像が表示されます


先ほど


自分の弾の画像データの左上の頂点が(45,20)


となる位置に


自分の弾の画像が表示されることになったので


自分の弾1の画像データの左上の頂点が(35,20)


となる位置に


自分の弾1の画像が表示されると


自分の弾と自分の弾1に用いられている画像データは


幅20

高さ5


なので


以下の図に示すように


自分の弾の画像と自分の弾1の画像が重なることになります


その図はこちらです

👇


https://solalion.blogspot.com/2021/10/blog-post.html




















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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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