さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
GetJoypadInputState関数の引数にDX_INPUT_PAD1を用いれば ジョイパッド1のどのボタンから入力されているかどうかを 判断する(識別する)ことができま~す
GetJoypadInputState関数の引数にDX_INPUT_PAD1を用いれば ジョイパッド1のどのボタンから入力されているかどうかを 判断する(識別する)ことができま~す
solarplexuss「ふ~ん♪ ふふ~ん♬」
ソーラー「GetJoypadInputState関数の引数にDX_INPUT_PAD1を用いれば
ジョイパッド1のどのボタンから入力されているかどうかを
判断する(識別する)ことができま~す」
solarplexuss「おおお・・・ わかったかも(*^。^*)」
マックス「ところでだな
DXライブラリ置き場リファレンスページの
GetJoypadInputState関数の説明では
GetJoypadInputState関数の取れる引数は
👇
引数 InputType : 入力状態を取得するパッドの識別子
🐦DX_INPUT_KEY_PAD1 : キー入力とパッド1
DX_INPUT_PAD1 : パッド1
DX_INPUT_PAD2 : パッド2
DX_INPUT_PAD3 : パッド3
DX_INPUT_PAD4 : パッド4
🐤DX_INPUT_KEY : キー入力
👆
となっているが
🐤DX_INPUT_KEY : キー入力
ってどういうことなんだ?
GetJoypadInputState関数は
ジョイパッドのどのボタンから入力されているかどうかを
判断する(識別する)ことができるんだろう?
だが
GetJoypadInputState関数の取れる引数に
DX_INPUT_KEY : キー入力
って
引数があるということは
もしや・・・
ジョイパッドのどのボタンから入力されているかどうかを
判断する(識別する)ことができる
GetJoypadInputState関数の引数に
DX_INPUT_KEY
を用いれば
キーボードのどのボタンから入力されているかどうかを
判断する(識別する)ことができるってことか?
GetJoypadInputState関数はジョイパッドに対応した関数なのに?」
ソーラー「そうなんです
そのとおり!
GetJoypadInputState関数の引数に🐤DX_INPUT_KEY🐤を用いれば
キーボードのどのボタンから入力されているかどうかを
判断する(識別する)ことができます
GetJoypadInputState関数の引数に🐬DX_INPUT_PAD1🐬を用いれば
ジョイパッド1のどのボタンから入力されているかどうかを
判断する(識別する)ことができます
そして
GetJoypadInputState関数の引数に
💖DX_INPUT_KEY_PAD1💖
を用いれば
キーボードのどのボタンから入力されているかどうかを
判断する(識別する)ことができるだけでなく
🌞🌞🌞同時に🌞🌞🌞
ジョイパッド1のどのボタンから入力されているかも
判断できるんです
DX_INPUT_KEY_PAD1
の
😊KEYはキーボード😊
😊PAD1はジョイパッド1😊
を表しており
GetJoypadInputState関数の引数に
DX_INPUT_KEY_PAD1が用いられた
GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行された場合
キーボードからの入力
と
ジョイパッド1からの入力
の
両方の入力に応じた戻り値が
GetJoypadInputState(DX_INPUT_KEY_PAD1)
に返されることになります
つまり
GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されるまえに
キーボードから何かのボタンが入力されている状態で
GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
キーボードのその何かのボタンの入力に対応した数値が返されることになります
何もキーボードのボタンが押されていない場合は
戻り値として0が返されることになります
もしくは
GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されるまえに
ジョイパッド1から何かのボタンが入力されている状態で
GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
ジョイパッド1の何かのボタンの入力に対応した数値が返されることになります
何もジョイパッド1のボタンが押されていない場合は
戻り値として0が返されることになります」
solarplexuss「あ~😊 それ わかる わかる~(*´▽`*)
シューテイングゲームで遊んでいるとき
ジョイパッドから
自機の飛行機を
操作することもできれば
キーボードから
自機の飛行機を
操作することもできるよね」
マックス「そういや そうだ」
ソーラー「それでは
早速
GetJoypadInputState関数が用いられたプログラムを実行してみましょう」
そのプログラムはこちらです
👇
#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「ええっとぉ?
このプログラム・・・
な、なんだかわかりそうでわかりにくい・・・
よくわからない・・・
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されると
まず
int key
の実行により
int型の変数keyが作製されるのはわかる
で
もし
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されるまえに
ジョイパッド1から何かのボタンが入力されている状態で
GetJoypadInputState(DX_INPUT_KEY_PAD1)
が実行されると
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
ジョイパッド1の何かのボタンに対応した数値が返されることになるよね
だから
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
の実行により
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
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
ってなに?」
マックス「ううう」
solarplexuss「マックスがうめいている・・・」
マックス「うまいなあ この饅頭」
solarplexuss「!
何食べてるの?」
ソーラー「みなさ~ん
👇
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
👆
これって何だと思います?」
マックス「う~ん
なんか分かりにくいなあ
とくにこの
&
ってなんだ?」
solarplexuss「まさか
key & PAD_INPUT_UP
で
何かの1つの単語なのかな」
ぶーにゃん「にゃんこも なんのことか わかんにゃ~い」
マックス「そうだろう そうだろう
突然
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;
が実行される前に
その1
ジョイパッド1の十字キー(キーボード)の↑ボタンが押されていたら
if (key & PAD_INPUT_UP) y = y - 4;
の()内の
key & PAD_INPUT_UPの値は1となり
if(1)が成立するので
y = y - 4;
が実行され
飛行機は今いる位置から4ドット上に移動することになるんじゃないか?
(ご注意 yの値が小さくなればなるほど飛行機は画面の上の方に表示されることになります)
その2
ジョイパッドの十字キー(キーボード)の↓ボタンが押されていたら
if (key & PAD_INPUT_DOWN) y = y + 4;
の()内の
key & PAD_INPUT_DOWNの値は1となり
if(1)が成立するので
y = y + 4;
が実行され
飛行機は今いる位置から4ドット下に移動することになるんだろう
(ご注意 yの値が大きくなればなるほど飛行機は画面の下のほうに表示されることになります)
その3
ジョイパッドの十字キー(キーボード)の←ボタンが押されていたら
if (key & PAD_INPUT_LEFT) x = x - 4;
の()内の
key & PAD_INPUT_LEFTの値は1となり
if(1)が成立するので
x = x - 4;
が実行され
飛行機は今いる位置から4ドット左に移動することになるんじゃないか?
その4
ジョイパッドの十字キー(キーボード)の右ボタンが押されていたら
if (key & PAD_INPUT_RIGHT) x = x + 4;
の()内の
key & PAD_INPUT_RIGHTの値は1となり
if(1)が成立するので
x = x + 4;
が実行され
飛行機は今いる位置から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;
👆
は
たぶんそういう仕組みの命令文なんだろうね
だけど
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
が
何なのかあ
よくわからないよね
いったい
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
は
なんなんだろう?」
ソーラー「まず1つ目のポイントは
if()の()内で
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
が記述されているところかな
if()の()内で
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
が記述されているので
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
は条件式なんだね
だから
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
の取る値によって
if文が実行されるかされないかが決まってくるね
具体的には
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
の取る値によって
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;
の
y = y - 4;
y = y + 4;
x = x - 4;
x = x + 4;
が実行されるかどうかが決まってくるね
そして
もう1つのポイントは
key & PAD_INPUT_UP
key & PAD_INPUT_DOWN
key & PAD_INPUT_LEFT
key & PAD_INPUT_RIGHT
で
用いられている&なんだよ」
solarplexuss「&???に注目するの?
key & PAD_INPUT_UP
って
1つの単語なんじゃないの?」
ソーラー「実は
key & PAD_INPUT_UP
の
keyとPAD_INPUT_UP
は
オペランド(被演算子)
で
&
は
オペレータ(演算子)なんです」
マックス「ど~いうこと 何の説明だ わから~ん」
ソーラー「ははっ
実は
key & PAD_INPUT_UP
は
1+2
と構造は同じです
key は1
&は+
PAD_INPUT_UPは2
に相当するんです」
solarplexuss「ほええ?」
ソーラー「&は
オペレータ(演算子)
で
AND演算を行うために用いられる演算子なんです
つまり
key & PAD_INPUT_UP
は
AND演算という計算が行われているんです」
solarplexuss「AND演算?」
ソーラー「
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
が実行されるまえに
🚄🚄🚄ジョイパッド1からの何かのボタンが入力されていると🚄🚄🚄
GetJoypadInputState(DX_INPUT_KEY_PAD1)
の実行の際
GetJoypadInputState(DX_INPUT_KEY_PAD1)には戻り値として
ジョイパッド1の何かのボタンに対応した数値が返されることになるよね
だから
int key=GetJoypadInputState(DX_INPUT_KEY_PAD1);
の実行により
int型の変数keyにはGetJoypadInputState(DX_INPUT_KEY_PAD1)に返された戻り値(整数値)
が
代入されることになります
そう
keyには整数値が代入されているんです
そして
次は
key & PAD_INPUT_UP
の
PAD_INPUT_UP
に注目だね
PAD_INPUT_UP
には
もとから
(ジョイパッドの十字キー(キーボード)の右ボタンに対応する)
ある整数値が割り当てられています(代入されています)
つまり
key & PAD_INPUT_UP
は
整数値&整数値
をあらわしているんです
整数値&整数値
は
&演算子によって
整数値同士の
AND演算(計算)が行われているんです」
マックス「AND演算(計算)か・・・
いったいどういう仕組みなんだ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます