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
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます