さあC言語(DXライブラリ)を使って超繊細、美麗、箱庭シューティングゲームを作ってみましょう 超初心者向けです 0.367
for{}文やwhile{}文の条件式の中で関数が記述されていると1回ごとのループの前にその関数が実行されることになります その1
for{}文やwhile{}文の条件式の中で関数が記述されていると1回ごとのループの前にその関数が実行されることになります その1
以下が
飛行機が飛んでいる最中でも
Escキーを押すと
すぐに
プログラムの実行が終了する
プログラムです
👇
#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 a=0;
while (x < 640 && a == 0) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
x++;
a = CheckHitKey(KEY_INPUT_ESCAPE);//KEY_INPUT_ESCAPEはEscキーに対応しています
};
DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます
return 0; // プログラムを終了します
}
デバッグなしで実行をしてから一度プログラムを終了し
生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです
👇
ソーラー「マックス 飛行機が右に飛んでいるよ
さあ
今のうちにEscキーを押すんだ!」
マックス「おっしゃあ~
Escキー
プゥッ~シュ~」
👇
https://youtu.be/BWh8-0QSyjA
solarplexuss 「うぅ なんて 優雅に吸い込まれるようにプログラムが終了するんだ
うつくし~~~~~」
涙を流しながら喜ぶsolarplexuss
ソーラー「👆いいプログラムだね
Escキーをおすことにより
飛行機が飛んでいる最中でも
プログラムを終了することができるようになったね」
solarplexuss 「あおう~~~~~」
ソーラー「さあ
今日はこの美しいプログラムをさらに洗練することになります
今まで秘密でしたが(別に秘密でもありませんが(笑))
実は
for{}文やwhile{}文の条件式の中では
関数を用いた論理式を記述することができます」
solarplexuss「ああ~おおおうう??
おああ・・・
こ、これ以上美しく・・・?」
ソーラー「もうちょっと
分かりやすくすると
for{}文やwhile{}文の条件式内で関数を用いた論理式が記述されていると
for{}文やwhile{}文のブロック{}内の命令文
が繰り返し実行される
その前に
for{}文やwhile{}文の条件式内で記述されている関数が実行されることになります
そして
そして関数に返される戻り値によって
関数を用いた論理式
の論理値は
0
か
1
の値を持つことになるんだ
その
0
か
1
の値によって
for{}文やwhile{}文のブロック{}内の命令文が
実行される
実行されない
がきまるんだよ」
」
solarplexuss「あ~いい~~よよよよよ?」
マックス「ぜんぜん意味が分から~んん なんだそれ?」
ソーラー「じゃあ・・・
もっと具体的な説明を
してみよっかな
まずは
今の
while{}文をご覧ください
👇
int x = 0;
int a=0;
while (x < 640 && a == 0) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
x++;
a = CheckHitKey(KEY_INPUT_ESCAPE);//KEY_INPUT_ESCAPEはEscキーに対応しています
};
👆
CheckHitKey(KEY_INPUT_ESCAPE)が実行されたとき
Escキーが押されていない場合は
CheckHitKey(KEY_INPUT_ESCAPE)
には
戻り値として0が返されます
ですので
aには
0が返されます
CheckHitKey(KEY_INPUT_ESCAPE)が実行されたとき
Escキーが押されている場合は
CheckHitKey(KEY_INPUT_ESCAPE)
には
戻り値として1が返されます
ですので
aには
1が返されます
このwhile{}文では
while (x < 640 && a == 0)のように
条件式が
x < 640 && a == 0
になっているので
Escキーが押されていなくて
CheckHitKey(KEY_INPUT_ESCAPE)
に
戻り値として0が返される場合は
論理式
a == 0
は
0==0
となり
真の値1をもちます
ですので
論理式
x < 640 も真の値1
を持つ場合は
条件式
x < 640 && a == 0
は
1&&1
となり
真の値を持つことになるので
while{}文のブロック{}内の命令文は実行されることになります
Escキーが押されていて
CheckHitKey(KEY_INPUT_ESCAPE)
に
戻り値として1が返される場合は
論理式
a == 0
は
1==0
となり
論理式
a == 0
は
偽の値0をもちます
ですので
論理式
x < 640 が真の値1
を持っていても
条件式
x < 640 && a == 0
は
1&&0
となり
偽の値0 を持つことになるので
while{}文のブロック{}内の命令文は実行されず
さらにこれ以降の
while{}文のブロック{}内の命令文の繰り返し実行は行われないことになります
つまり
while{}文のブロック{}内の命令文の繰り返し実行(繰り返しループ)から抜け出すことになります」
マックス「おお そうだよな」
ソーラー「ただ
この
while{}文
ちょっと
長いと思いませんか?」
solarplexss「え? どこどこ?」
ソーラー「
int x = 0;
int a=0;
while (x < 640 && a == 0) {
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
x++;
a = CheckHitKey(KEY_INPUT_ESCAPE);//KEY_INPUT_ESCAPEはEscキーに対応しています
};
ソーラー「ヒントは
int a;
と
while (x < 640 && a == 0)
と
a = CheckHitKey(KEY_INPUT_ESCAPE);//KEY_INPUT_ESCAPEはEscキーに対応しています
の部分です」
solarplexuss「
int a;
と
while (x < 640 && a == 0)
と
a = CheckHitKey(KEY_INPUT_ESCAPE);//KEY_INPUT_ESCAPEはEscキーに対応しています
の部分
??
まあ
確かに
これらを記述するのは
ちょっと長いと思うけど
まあ
仕方ないよね」
ソーラー「実は
int a;
と
while (x < 640 && a == 0)
a = CheckHitKey(KEY_INPUT_ESCAPE);//KEY_INPUT_ESCAPEはEscキーに対応しています
は
while (x < 640 && a == 0)の
aに直接
CheckHitKey(KEY_INPUT_ESCAPE)
を代入した
while (x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
で置き換えることができます(ただし 本当に微妙ですが違いがあります)
aがいらなくなるので
変数宣言
int a;
を実行して
変数aを作成する必要もなくなります
その場合
while{}文
は
int x = 0;
while (x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
x++;
};
と
シンプルに書き換えられることになります」
solarplexuss「おおう シンプル~~プルプルゥ~~」
マックス「
while{}文
は
int x = 0;
while (x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ProcessMessage();//👈ここです ここにProcessMessage();を記述しました
DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);
DrawGraph(x, 230, graphichandle, TRUE);
ScreenFlip();
ClearDrawScreen();
x++;
};
となっている場合
この
while{}文はどのように実行されるんだ」
ソーラー「このように
while{}文が記述されている場合
while{}文のブロック{}内の命令文の繰り返し実行が行われる際
🌞while{}文のブロック{}内の命令文が行われる前に🌞
まず
CheckHitKey(KEY_INPUT_ESCAPE)
が実行されることになります
そして
CheckHitKey(KEY_INPUT_ESCAPE)が実行されたとき
Escキーが押されていない場合は
CheckHitKey(KEY_INPUT_ESCAPE)
には
戻り値として0が返されます
CheckHitKey(KEY_INPUT_ESCAPE)が実行されたとき
Escキーが押されている場合は
CheckHitKey(KEY_INPUT_ESCAPE)
には
戻り値として1が返されます
このwhile{}文では
while (x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)のように
条件式が
x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0
になっているので
Escキーが押されていなくて
CheckHitKey(KEY_INPUT_ESCAPE)
に
戻り値として0が返される場合は
論理式
CheckHitKey(KEY_INPUT_ESCAPE) == 0
は
0==0
となり
真の値1をもちます
ですので
論理式
x < 640 も真の値1
を持つ場合は
x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0
は
1&&1となり
真の値1
をもつので
while{}文のブロック{}内の命令文は実行されることになります
Escキーが押されていて
CheckHitKey(KEY_INPUT_ESCAPE)
に
戻り値として1が返される場合は
論理式
CheckHitKey(KEY_INPUT_ESCAPE) == 0 == 0
は
1==0
となり
論理式
CheckHitKey(KEY_INPUT_ESCAPE) == 0 == 0
は
偽の値0をもちます
ですので
論理式
x < 640 が真の値1
を持っていても
x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0
は
1&&0となり
偽の値1
をもつので
while{}文のブロック{}内の命令文は実行されず
さらにこれ以降の
while{}文のブロック{}内の命令文の繰り返し実行は行われないことになります
つまり
while{}文のブロック{}内の命令文の繰り返し実行(繰り返しループ)から抜け出すことになります」
solarplexuss「おお
条件式内にCheckHitKey(KEY_INPUT_ESCAPE) を記述する
この方法
👇
while (x < 640 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
👆
プログラムが短くなってとっても便利だね
なんていうかこっちのほうがわかりやすいね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます