さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
なにかボタンを押したときだけ 飛行機の近くに 弾が表示されるようにしてみよう
なにかボタンを押したときだけ 飛行機の近くに 弾が表示されるようにしてみよう
つづきです
ソーラー「そうなんです
次は
飛行機の移動に応じて
弾も
一緒に
くっついて移動するようにしてみましょう」
マックス「なはは
そのプログラムは俺に任せろ」
飛行機の移動に応じて
弾も
一緒に
くっついて移動するプログラムはこちらです
👇
#include "DxLib.h"
struct Character {
int x;
int y;
int graphichandle;
};
//👆🌞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のメンバ変数の初期化を行っています
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);
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://www.youtube.com/watch?v=2gXJI4yS1zw
solarplexuss「う~ん ねえ
飛行機にくっついて弾が移動するのは
いいんだけど
普通のシューティングゲームでは
何かのボタンを押したときだけ
自分の弾が表示されて発射されるんじゃない?
飛行機に弾がくっついて表示されたままになるんじゃなくて
すくなくとも
なにかボタンを押したときだけ
飛行機の近くに
弾が表示されるようにできないかな?」
マックス「たとえば
Zボタンをおしたときだけ
自分の弾が
飛行機の近くに
表示されるようにするってわけか」
solarplexuss「そうそうそう」
ソーラー「それでは
なにかボタンを押したときだけ
飛行機の近くに
弾が表示されるようにしてみましょう
そのプログラムはこちらです」
👇
👇solarplexuss「え、もう完成したの?」
👇
👇
👇
#include "DxLib.h"
struct Character {
int x;
int y;
int graphichandle;
};
//👆🌞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のメンバ変数の初期化を行っています
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) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
ScreenFlip();
ClearDrawScreen();
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://youtu.be/m9YYUA_Mx3Q
マックス「
おお
なんか
自分の弾が
ついたり
消えたり
しているじゃないか?」
ソーラー「このプログラムでは
Zボタン
を押していると
自分の弾が表示され
Zボタン
を押していないと
自分の弾が表示されないという仕組みになっているんだよ」
solarplexuss「へえ~」
ソーラー「このプログラムの仕組みを考察してみましょう
このプログラムの注目ポイントはwhile{}文だね
👇
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) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
}
👆
このwhile{}文のブロック{}内の
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
に注目してください
Zボタンを押した状態で
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
16が返るので
keyには16が代入されることになります
ですので
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;
の
PAD_INPUT_UP
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
は
8
1
2
4
の値を持つので
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;
は
if (16 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;
if (16 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;
if (16 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;
if (16 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;
となります
&演算
16 & 8
16 & 1
16 & 2
16 & 4
は
0の値をもつので
if (16 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;
if (16 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;
if (16 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;
if (16 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;
は
if (0) jibunnohikouki.y = jibunnohikouki.y - 4;
if (0) jibunnohikouki.y = jibunnohikouki.y + 4;
if (0) jibunnohikouki.x = jibunnohikouki.x - 4;
if (0) jibunnohikouki.x = jibunnohikouki.x + 4;
となり
jibunnohikouki.y = jibunnohikouki.y - 4;
jibunnohikouki.y = jibunnohikouki.y + 4;
jibunnohikouki.x = jibunnohikouki.x - 4;
jibunnohikouki.x = jibunnohikouki.x + 4;
は
実行されません
ですので
DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);
が実行されると
飛行機の画像データは
飛行機の画像データの左上の頂点が
x座標 jibunnohikouki.x
y座標 jibunnohikouki.y
つまり
(jibunnohikouki.x,jibunnohikouki.y)
を
始点とする位置から
描かれることになります
次に
if (key & PAD_INPUT_A) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
の
PAD_INPUT_A
は
16の値を持つので
if (key & PAD_INPUT_A) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
if (16 & 16) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
となります
&演算
16 & 16
は
1の値をもつので
if (16 & 16) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
if (1) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
となり
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
が実行されることになります
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
が実行されると
DrawGraph関数の引数が
jibunnohikouki.x+35
jibunnohikouki.y+20,
となっているので
飛行機の画像データの表示される始点
x座標 jibunnohikouki.x
y座標 jibunnohikouki.y
つまり
(jibunnohikouki.x,jibunnohikouki.y)
から
x方向(右)に35ドット
y方向に(下)に20ドット
ずれた位置を始点として
自分の弾の画像データが表示されることになるんだよ
次は
もし
何もボタンを押していなければ
ゲーム画面には何が表示されるかな?
もし
何もボタンを押していない状態で
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
0が返るので
keyには0が代入されることになります
ですので
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;
の
PAD_INPUT_UP
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
は
8
1
2
4
の値を持つので
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;
は
if (0 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;
if (0 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;
if (0 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;
if (0 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;
となります
&演算
0 & 8
0 & 1
0 & 2
0 & 4
は
すべて
0の値をもつので
if (0 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;
if (0 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;
if (0 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;
if (0 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;
は
if (0) jibunnohikouki.y = jibunnohikouki.y - 4;
if (0) jibunnohikouki.y = jibunnohikouki.y + 4;
if (0) jibunnohikouki.x = jibunnohikouki.x - 4;
if (0) jibunnohikouki.x = jibunnohikouki.x + 4;
となり
jibunnohikouki.y = jibunnohikouki.y - 4;
jibunnohikouki.y = jibunnohikouki.y + 4;
jibunnohikouki.x = jibunnohikouki.x - 4;
jibunnohikouki.x = jibunnohikouki.x + 4;
は
実行されません
ですので
DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);
が実行されると
飛行機の画像データは
飛行機の画像データの左上の頂点が
x座標 jibunnohikouki.x
y座標 jibunnohikouki.y
(jibunnohikouki.x,jibunnohikouki.y)
を
始点とする位置から
描かれることになります
次に
if (key & PAD_INPUT_A) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
の
PAD_INPUT_A
は
16の値を持つので
if (key & PAD_INPUT_A) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
if (0 & 16) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
となります
&演算
0 & 16
は
0の値をもつので
if (0 & 16) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
if (0) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
となり
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
は実行されません
つまり
なにもボタンを押していないと
自分の弾の画像データは表示されないんだよ」
マックス「なにもボタンを押していないと
飛行機の画像データは
表示されても
自分の弾の画像データは
表示されないってわけだ
いったて普通のことだな」
ソーラー「
もし
キーボードの↑ボタンと
キーボードのZボタンを
同時に押している状態で
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
💖8と16を足した😊24😊が返るので💖
keyには24が代入されることになります
ですので
このwhile{}文のブロック{}内の命令文
👇
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) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
👆
の
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;
は
PAD_INPUT_UP
PAD_INPUT_DOWN
PAD_INPUT_LEFT
PAD_INPUT_RIGHT
は
8
1
2
4
の値を持つので
if (24 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;
if (24 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;
if (24 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;
if (24 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;
となります
&演算
24 & 8は1の値をもち
24 & 1は0の値をもち
24 & 2は0の値をもち
24 & 4は0の値をもつので
if (24 & 8) jibunnohikouki.y = jibunnohikouki.y - 4;
if (24 & 1) jibunnohikouki.y = jibunnohikouki.y + 4;
if (24 & 2) jibunnohikouki.x = jibunnohikouki.x - 4;
if (24 & 4) jibunnohikouki.x = jibunnohikouki.x + 4;
は
if (1) jibunnohikouki.y = jibunnohikouki.y - 4;
if (0) jibunnohikouki.y = jibunnohikouki.y + 4;
if (0) jibunnohikouki.x = jibunnohikouki.x - 4;
if (0) jibunnohikouki.x = jibunnohikouki.x + 4;
となり
jibunnohikouki.y = jibunnohikouki.y - 4;
が実行されることになります
飛行機の画像データの表示される始点の位置は
jibunnohikouki.yより4ドット
上になります
ですので
DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);
が実行されると
飛行機の画像データは
上に4ドット移動することになります
次に
if (key & PAD_INPUT_A) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
の
PAD_INPUT_A
は
16の値を持つので
if (key & PAD_INPUT_A) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
if (24 & 16) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
となります
&演算
24 & 16
は
1の値をもつので
if (24 & 16) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
if (1) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
となり
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
が実行されることになります
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
が実行されると
DrawGraph関数の引数が
jibunnohikouki.x+35
jibunnohikouki.y+20,
となっているので
飛行機の画像データの表示される始点
から
x方向(右)に35ドット
y方向に(下)に20ドット
ずれた位置を始点として
自分の弾の画像データが表示されることになるんだよ」
マックス「つまり
キーボードの↑ボタンと
キーボードのZボタンを
同時に押していると
while{}文
👇
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) {
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
は
以下の
while{}文
と等しくなるわけだ
👇
while (CheckHitKey(KEY_INPUT_ESCAPE) == 0 && ProcessMessage() == 0) {
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
jibunnohikouki.y = jibunnohikouki.y - 4;
DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
}
だから
while{}文のブロック{}内の命令文
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
jibunnohikouki.y = jibunnohikouki.y - 4;
DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
が
繰り返し実行されることになる
だから
キーボードの↑ボタンと
キーボードのZボタンを
同時に押していると
while{}文のブロック{}内の命令文が1回繰り返し実行
されるごとに
jibunnohikouki.y = jibunnohikouki.y - 4;
DrawGraph(jibunnohikouki.x, jibunnohikouki.y, jibunnohikouki.graphichandle, TRUE);
DrawGraph(jibunnohikouki.x+35, jibunnohikouki.y+20, jibunnotama.graphichandle, TRUE);
が実行されることになるわけだ
while{}文のブロック{}内の命令文が1回繰り返し実行
されるごとに
飛行機の画像データは上に4ドット移動することになる
飛行機の画像データは
飛行機の画像データの左上の頂点が
x座標 jibunnohikouki.x
y座標 jibunnohikouki.y
(jibunnohikouki.x,jibunnohikouki.y)
を
始点とする位置から描かれ
自分の弾の画像データは
自分の弾の画像データの左上の頂点が
x座標 jibunnohikouki.x+35
y座標 jibunnohikouki.y+20
(jibunnohikouki.x+35,jibunnohikouki.y+20)
を
始点とする位置から描かれることになる
飛行機の画像データの表示される始点から
x方向(右)に35ドット
y方向に(下)に20ドット
ずれた位置を始点として
自分の弾の画像データが表示されることになるわけだ
つまり
飛行機の近くに自分の弾が表示された状態で
飛行機の画像データは上に4ドット移動することになるわけだ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます