さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
if (key == PAD_INPUT_UP)と if (key & PAD_INPUT_UP)の違いは何なのか 飛行機を斜め上に動かせるようにするには&演算子を用いることになります
if (key == PAD_INPUT_UP)と if (key & PAD_INPUT_UP)の違いは何なのか 飛行機を斜め上に動かせるようにするには&演算子を用いることになります
マックス「ジョイパッドの入力に応じて飛行機が動くプログラムの仕組みも
わかったじゃないか
いいのう」
ジョイパッドの入力に応じて飛行機が動くプログラムこちらです
👇
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE); // ウインドウモードに設定します
if (DxLib_Init() == -1) // DXライブラリを初期化処理しています
{
return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します
}
int graphichandle;
graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");
SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です
int x = 0;
int y = 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) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
DrawGraph(x,y,graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://youtu.be/UePaU-jOeKc
solarplexuss「ねえ ねえ
ちょっと ちょっと
みなさん
疑問におもってることがあるんだけど・・・」
マックス「喜ぶがいい 今日の昼はカレーだぞお 」
solarplexuss「そこじゃな~い」
マックス「なんだ 今日のデザートの話か?」
solarplexuss「そこでもな~い」
マックス「んん どこなんだ?」
solarplexuss「ええとね
今のプログラムのここの部分に注目してほしいな
👇
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
🐭 🐁 🐭 🐁 🐭 🐁
PAD_INPUT_DOWNは1
PAD_INPUT_LEFTは2
PAD_INPUT_RIGHTは4
PAD_INPUT_UPは8
をあらわしています
🐭 🐁 🐭 🐁 🐭 🐁
👆
この命令文は
🌞🌞🌞キーボードから十字キーの↑ボタンが入力されている状態で🌞🌞🌞
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
key に8が代入されるので
if (key & PAD_INPUT_UP) y = y - 4;
if (8 & 8) y = y - 4;
となり
if (8 & 8) y = y - 4;
は
if (8) y = y - 4;
イコール
if (1) y = y - 4;
となり
y = y - 4;
が実行されることになるよね
だからyの値が4小さくなるので
DrawGraph(x,y,graphichandle, TRUE);
が実行されると
飛行機は上に4ドット移動することになるわけだ」
マックス「なんだ そんなことか
そりゃあそうだろう」
solarplexuss「
だったら
🌞if (key & PAD_INPUT_UP) y = y - 4;🌞
でなくて
&を==に変えた
if (key == PAD_INPUT_UP) y = y - 4;
でもいいんじゃない?
これでも
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
key に8が代入されるので
if (key == PAD_INPUT_UP) y = y - 4;
if (8 == 8) y = y - 4;
となり
if (8 == 8) y = y - 4;
は
if (1) y = y - 4;
となり
y = y - 4;
が実行されることになるよね
だからyの値が4小さくなるので
DrawGraph(x,y,graphichandle, TRUE);
が実行されると
飛行機は上に4ドット移動することになるじゃない😊」
マックス「ほんとうだ」
solarplexuss「
つまり
今のプログラムのここの部分は
👇
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
🐭 🐁 🐭 🐁 🐭 🐁
PAD_INPUT_DOWNは1
PAD_INPUT_LEFTは2
PAD_INPUT_RIGHTは4
PAD_INPUT_UPは8
をあらわしています
🐭 🐁 🐭 🐁 🐭 🐁
👆
👇
こんな風にかきかえられるんじゃない?
👇
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key == PAD_INPUT_UP) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key== PAD_INPUT_RIGHT) x = x + 4;
//🌞🌞👆&演算子を==演算子に変更しました
🐭 🐁 🐭 🐁 🐭 🐁
PAD_INPUT_DOWNは1
PAD_INPUT_LEFTは2
PAD_INPUT_RIGHTは4
PAD_INPUT_UPは8
をあらわしています
🐭 🐁 🐭 🐁 🐭 🐁
👆
マックス「おお いいところにきづくじゃないか
そういえば
そうだな」
solarplexuss「==演算子を用いるこっちの方が普通なんじゃない?
なんで
&演算子が用いられているのかな?」
マックス「それも そうだなあ
なんで
&演算子が用いられているのか・・・
ふ~む
そうだなあ
試しに
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key == PAD_INPUT_UP) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key== PAD_INPUT_RIGHT) x = x + 4;
を用いたプログラムを実行してみたら
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
のように&演算子を用いた場合と
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key == PAD_INPUT_UP) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key== PAD_INPUT_RIGHT) x = x + 4;
のように==演算子を用いた場合の違い
がわかるんじゃないか?」
solarplexuss「そうしよっ
何か
違いが出るかな?」
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key == PAD_INPUT_UP) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key== PAD_INPUT_RIGHT) x = x + 4;
がもちいられたプログラムはこちらです
👇
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
ChangeWindowMode(TRUE); // ウインドウモードに設定します
if (DxLib_Init() == -1) // DXライブラリを初期化処理しています
{
return -1; // DXライブラリの初期化に失敗したら直ちにプログラムを終了します
}
int graphichandle;
graphichandle = LoadGraph("画像データ\\ソーラーが描いた飛行機.bmp");
SetDrawScreen(DX_SCREEN_BACK);//👈🌞SetDrawScreen関数です
int x = 0;
int y = 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) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key == PAD_INPUT_RIGHT) x = x + 4;
DrawGraph(x,y,graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
https://youtu.be/_qhH0pRE_kE
solarplexuss「・・・
ふつうに飛行機を動かせるし違いなんてなさそう・・・
あれえ?
なんかおかしい?
斜めにボタンを押しているのに
飛行機が斜めにとんでいかないいいいいいいいっ
なんで???」
ソーラー「それは
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンが🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に入力されている状態で🌞💖🌞💖🌞
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
🌞キーボードの↑ボタンの入力に対応した整数値🌞
と
🌞キーボードの→ボタンの入力に対応した整数値4🌞
が
🌞🌞🌞足し合わされた12🌞🌞🌞
が返されることになります
ですので
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
の実行により
keyには
🌞🌞🌞整数値12が 🌞🌞🌞
代入されることになります
そして
PAD_INPUT_UP
には
もとから
キーボードの↑ボタンの入力に対応した数値8が代入されています
PAD_INPUT_DOWN
には
もとから
キーボードの↓ボタンの入力に対応した数値1が代入されています
PAD_INPUT_LEFT
には
もとから
キーボードの←ボタンの入力に対応した数値2が代入されています
PAD_INPUT_RIGHT
には
もとから
キーボードの→ボタンの入力に対応した数値4が代入されています
ですので
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンが🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に入力されている状態で🌞💖🌞💖🌞
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key == PAD_INPUT_UP) y = y - 4;//👈==演算子が用いられているのがポイントです
if (key == PAD_INPUT_DOWN) y = y + 4;//👈==演算子が用いられているのがポイントです
if (key == PAD_INPUT_LEFT) x = x -4;//👈==演算子が用いられているのがポイントです
if (key == PAD_INPUT_RIGHT) x = x + 4;//👈==演算子が用いられているのがポイントです
が実行されると
if (key == PAD_INPUT_UP) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key == PAD_INPUT_RIGHT) x = x + 4;
は
if (12 == 8) y = y - 4;
if (12 == 1) y = y + 4;
if (12 == 2) x = x - 4;
if (12 == 4) x = x + 4;
が
実行されることになります
if (12 == 8) y = y - 4;
if (12 == 1) y = y + 4;
if (12 == 2) x = x - 4;
if (12 == 4) x = x + 4;
は
if (0) y = y - 4;
if (0) y = y + 4;
if (0) x = x - 4;
if (0) x = x + 4;
に等しいので
if (0)に続く命令文
y = y - 4;
y = y + 4;
x = x - 4;
x = x + 4;
は実行されません
ですので
DrawGraph(x,y,graphichandle, TRUE);
が実行されても
xとyの値は変化していないので
飛行機は
今いる位置から動くことはありません」
solarplexuss「なんと
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンを🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に押すと🌞💖🌞💖🌞
if (12 == 8) y = y - 4;
if (12 == 1) y = y + 4;
if (12 == 2) x = x - 4;
if (12 == 4) x = x + 4;
になって
飛行機は全く移動することができなくなるんだ
だから
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンを🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に押しても🌞💖🌞💖🌞
右斜め上にとんでいくこともなくなるんだね」
マックス「じゃあ
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンを🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に押して🌞💖🌞💖🌞
飛行機を右斜め上に飛ばしたいなら
このように
==演算子を用いるのはまずいってわけだ
👇
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key == PAD_INPUT_UP) y = y - 4;
if (key == PAD_INPUT_DOWN) y = y + 4;
if (key == PAD_INPUT_LEFT) x = x -4;
if (key == PAD_INPUT_RIGHT) x = x + 4;
じゃあ
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンを🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に押して🌞💖🌞💖🌞
飛行機を右斜め上に飛ばしたいなら
どのようにすればいいかだが・・・・
もうすでに答えは出ている
👇
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
👆
を実行すればいいんだろう
では
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンが🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に入力されている状態で🌞💖🌞💖🌞
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
キーボードの↑ボタンの入力に対応した整数値8
と
キーボードの→ボタンの入力に対応した整数値4
が足し合わされた12
が返されることになるんだが
そのとき
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
を実行した場合は何がおこなわれるんだ?」
ソーラー「
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンが🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に入力されている状態で🌞💖🌞💖🌞
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;//👈&演算子が用いられているのがポイントです
if (key & PAD_INPUT_DOWN) y = y + 4;//👈&演算子が用いられているのがポイントです
if (key & PAD_INPUT_LEFT) x = x -4;//👈&演算子が用いられているのがポイントです
if (key & PAD_INPUT_RIGHT) x = x + 4;//👈&演算子が用いられているのがポイントです
が実行されると
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x -4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
は
if (12 & 8) y = y - 4;
if (12 & 1) y = y + 4;
if (12 & 2) x = x - 4;
if (12 & 4) x = x + 4;
が実行されることになります
まずは
if (12 & 8) y = y - 4;
に注目してね
12は2進数で
00000000000000000000000000001100
8は2進数で
00000000000000000000000000001000
で表されるので
AND演算
12&8
が実行されると
00000000000000000000000000001100
××××××××××××××××××××××××××××××××
00000000000000000000000000001000
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
が行われて
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00000000000000000000000000001000
すなわち
整数値8
が生成されることになります
12&8の演算結果は8なんですね
なので
if (12&8) y = y - 4;
if (8) y = y - 4;
となります
if ()の()内に0以外の整数値が代入されると
1が代入されているとみなされます
ですので
if (8) y = y - 4;
は
if (1) y = y - 4;
が実行されていることになります
if ()の()内に1が代入されているので
if ()に続く命令文
y = y - 4;
が実行されることになります
だから
yの値は4減るので
DrawGraph(x,y,graphichandle, TRUE);
が実行されると
飛行機は
今いる位置から
4ドット上に表示されることになります
つまり
飛行機は
今いる位置から
4ドット上に移動することになるんだ
次に
if (12 & 1) y = y + 4;
に注目してね
12は2進数で
00000000000000000000000000001100
1は2進数で
00000000000000000000000000000001
で表されるので
AND演算
12&1
が実行されると
00000000000000000000000000001100
××××××××××××××××××××××××××××××××
00000000000000000000000000000001
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
が行われて
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00000000000000000000000000000000
すなわち
整数値0
が生成されることになります
12&1の演算結果は0なんですね
なので
if (12&1) y = y + 4;
は
if (0) y = y + 4;
となり
if ()の()内が0なので
if ()に続く命令文
y = y + 4;
は実行されません
次に
if (12 & 2) x = x - 4;
に注目してね
12は2進数で
00000000000000000000000000001100
2は2進数で
00000000000000000000000000000010
で表されるので
AND演算
12&2
が実行されると
00000000000000000000000000001100
××××××××××××××××××××××××××××××××
00000000000000000000000000000010
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
が行われて
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
00000000000000000000000000000000
すなわち
整数値0
が生成されることになります
12&2の演算結果は0なんですね
なので
if (12&2) x = x - 4;
は
if (0) x = x - 4;
となり
if ()の()内が0なので
if ()に続く命令文
x = x - 4;
は実行されません
次に
if (12 & 4) x = x + 4;
に注目してね
8は2進数で
00000000000000000000000000001100
4は2進数で
00000000000000000000000000000100
で表されるので
AND演算
12&4
が実行されると
00000000000000000000000000001100
××××××××××××××××××××××××××××××××
00000000000000000000000000000100
が行われて
00000000000000000000000000000100
すなわち
整数値4
が生成されることになります
12&4の演算結果は4なんですね
なので
if (12&4) x = x + 4;
は
if (4) x = x + 4;
イコール
if (1) x = x + 4;
となり
if ()の()内が1なので
if ()に続く命令文
x = x + 4;
が実行されます
xの値が4増えるので
DrawGraph(x,y,graphichandle, TRUE);
が実行されると
飛行機は
今いる位置から
4ドット右に表示されることになります
つまり
飛行機は
今いる位置から
4ドット右に移動することになるんだ
つまり
🌞💖🌞💖🌞キーボードから十字キーの↑ボタンと→ボタンが🌞💖🌞💖🌞
🌞💖🌞💖🌞同時に入力されている状態で🌞💖🌞💖🌞
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x - 4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
が実行されたとき
if (12 & 8) y = y - 4;
if (12 & 1) y = y + 4;
if (12 & 2) x = x - 4;
if (12 & 4) x = x + 4;
が実行されることになるので
実行されるのは
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
の2つなんです
ですので
飛行機が今いる位置から
上に4ドット
右に4ドット
移動することになります
つまり右斜め上に移動することになるんだよ」
マックス「&演算子 やるなあ」
solarplexuss「この仕組みを考えた人すごいなあ」
ソーラー「
次にもし
🐳🐳🐳何もキーボードのボタンが押されていない状態で🐳🐳🐳
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
0が返されることになります
ですので
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されていることにより
keyには
数値0が
代入されることになります
ですので
🐳🐳🐳何もキーボードのボタンが押されていない状態で🐳🐳🐳
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x - 4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
が実行されると
if (0 & 8) y = y - 4;
if (0 & 1) y = y + 4;
if (0 & 2) x = x - 4;
if (0 & 4) x = x + 4;
が
実行されることになります
まずは
if (0 & 8) y = y - 4;
に注目してね
0は2進数で
00000000000000000000000000000000
8は2進数で
00000000000000000000000000001000
と表されるので
AND演算
0&8
が実行されると
00000000000000000000000000000000
××××××××××××××××××××××××××××××××
00000000000000000000000000001000
が行われて
00000000000000000000000000000000
すなわち
整数値0
が生成されることになります
0&8の演算結果は0なんですね
なので
if (0 & 8) y = y - 4;
if (0) y = y - 4;
となり
if (0)に続く命令文
y = y - 4;
は実行されません
次に
if (0 & 1) y = y + 4;
に注目してね
0は2進数で
00000000000000000000000000000000
1は2進数で
00000000000000000000000000000001
で表されるので
AND演算
0&1
が実行されると
00000000000000000000000000000000
××××××××××××××××××××××××××××××××
00000000000000000000000000000001
が行われて
00000000000000000000000000000000
すなわち
整数値0
が生成されることになります
0&1の演算結果は0なんですね
なので
if (0&1) y = y + 4;
if (0) y = y + 4;
となり
if (0)に続く命令文
y = y + 4;
は実行されません
次に
if (0 & 2) x = x - 4;
に注目してね
0は2進数で
00000000000000000000000000000000
2は2進数で
00000000000000000000000000000010
で表されるので
AND演算
0&2
が実行されると
00000000000000000000000000000000
××××××××××××××××××××××××××××××××
00000000000000000000000000000010
が行われて
00000000000000000000000000000000
すなわち
整数値0
が生成されることになります
0&2の演算結果は0なんですね
なので
if (0&2) x = x - 4;
if (0) x = x - 4;
となり
if (0)に続く命令文
x = x - 4;
は実行されません
次に
if (0 & 4) x = x + 4;
に注目してね
0は2進数で
00000000000000000000000000000000
4は2進数で
00000000000000000000000000000100
で表されるので
AND演算
0&4
が実行されると
00000000000000000000000000000000
××××××××××××××××××××××××××××××××
00000000000000000000000000000100
が行われて
00000000000000000000000000000000
すなわち
整数値0
が生成されることになります
0&4の演算結果は0なんですね
なので
if (0&4) x = x + 4;
if (0) x = x + 4;
となり
if (0)に続く命令文
x = x + 4;
は実行されません
つまり
🐳🐳🐳何もキーボードのボタンが押されていない状態で🐳🐳🐳
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x - 4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
が実行されたときは
どのif文も実行されず
飛行機は動かないんだね
何もボタンが押されていないんだから
飛行機が動かないってのはいいことだね
さあ
どう
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y = y - 4;
if (key & PAD_INPUT_DOWN) y = y + 4;
if (key & PAD_INPUT_LEFT) x = x - 4;
if (key & PAD_INPUT_RIGHT) x = x + 4;
の仕組みは
理解できたかな」
solarplexuss「う~ん
この野菜スープの汁 うまいかも・・・」
ソーラー「何、飲んでるのお!?」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます