ゲーム画面に飛行機が飛んでいる最中でも あるキーを押すと プログラムの実行が終了し ゲームが終了するようにした~い

ソーラー「そういえば何の話だったっけ?


そうそう 思い出した


あるキーを押したとき


プログラムの実行を終了させるようにしたい


つまり


あるキーを押したとき


ゲームを終了させるようにしたいんだったね


具体的には


ゲーム画面に飛行機が飛んでいる最中でも


あるキーを押すと


ゲームを終了させるように(プログラムの実行が終了するように)


したいんだったね」


solarplexuss「そうそう


それが


いつのまにやらCheckHitKey関数の話になっていたよね」


ソーラー「そうなんです


あるキーを押すと


ゲームを終了させるように(プログラムの実行が終了するように)


するには


CheckHitKey関数


をもちいることになります」


solarplexuss「なんでえ


CheckHitKey関数が実行されたとき


CheckHitKey関数の引数に与えられたキーが押されているならば


CheckHitKey関数には


戻り値として1が返されることになる


CheckHitKey関数の引数に与えられたキーが押されていないならば


CheckHitKey関数には


戻り値として0が返されることになる


というお話だけど


ただそれだけのことじゃない?


CheckHitKey関数をつかって


ゲーム画面に飛行機が飛んでいる最中に


あるキーを押すと


ゲームを終了させるように(プログラムの実行が終了するように)


するなんてことができるの?


のん、のん」


ソーラー「そう


確かに


CheckHitKey関数を実行しただけでは


CheckHitKey関数に戻り値として


0

もしくは

1

が返されるだけで


ゲーム画面に飛行機が飛んでいる最中に


あるキーを押しても


ゲームを終了させるように(プログラムの実行が終了するように)


することはできません


ですが


うまく


CheckHitKey関数をつかえば


プログラムの実行が終了するのを早めることができます」


solarplexuss「ええ? 


CheckHitKey関数をつかえば


プログラムの実行が終了するのを早めることができるぅ?💖


って


ど~いうことお?


プログラムの実行を終了させるの間違いなのね


そうなのね(*´▽`*)」


マックス「しかも


CheckHitKey関数をつかっても


全然、プログラムの実行の終了は


早まりそうにないぞ」


ソーラー「はは


それが


CheckHitKey関数をつかえば


プログラムの実行が終了するのを早めることができるんです


ゲームのプログラムはだいたい


while{}文もしくはfor{}文によって構成されています


そして


while{}文もしくはfor{}文は実行されると


ブロック{}内の命令文を


繰り返し実行することになります


そしてたいていの場合


while{}文もしくはfor{}文が実行される時間は


プログラムの全実行時間の内のかなりの部分を占めることになります


その様子を示す


次のプログラムをご覧ください

👇


#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;


while(x< 640){


ProcessMessage();//👈ここです ここにProcessMessage();を記述しました


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


x++;


};


DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します

}


デバッグなしで実行をしてから一度プログラムを終了し

生成されたexeファイルをハードディスクから探し出しクリックする方法により得られたプログラムの実行結果はこちらです

👇


https://youtu.be/YAC-j31RGl8


ソーラー「このプログラムは飛行機が右に飛んでいくプログラム(ゲームともいえます)ですが


プログラムの全実行時間の内のかなりの部分が


このwhile{}文

👇

while(x< 640){


ProcessMessage();//👈ここです ここにProcessMessage();を記述しました


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


x++;


};


のブロック{}内の命令文

👇

ProcessMessage();//👈ここです ここにProcessMessage();を記述しました


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


x++;

👆

が繰り返し実行される時間によって占められています


それ以外の部分は1瞬で実行が終了します


もし


何かのキーを押したとき


このwhile{}文


のブロック{}内の命令文

👇

ProcessMessage();//👈ここです ここにProcessMessage();を記述しました


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


x++;

👆

が繰り返し実行されるのを終了させることができれば


(while{}文の繰り返しループから抜け出すことができれば)



あとは


DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します


が実行されるだけとなります




DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します


の実行は


1瞬で終了するので


プログラムの実行(ゲーム)を終了させるのを相当早めることができるね



◎  ◎  ◎  ◎  ◎  ◎  ◎  ◎  ◎

DxLib_End(); // DXライブラリの使用を終了します DXライブラリの使用しているメモリ領域が解放されます


return 0; // プログラムを終了します

◎  ◎  ◎  ◎  ◎  ◎  ◎  ◎  ◎


が実行される時間は


ほんの1瞬です


ですので


このwhile{}文


のブロック{}内の命令文

👇

ProcessMessage();//👈ここです ここにProcessMessage();を記述しました


DrawBox(100, 100, 500, 300, GetColor(0, 255, 255), TRUE);


DrawGraph(x, 230, graphichandle, TRUE);


ScreenFlip();


ClearDrawScreen();


x++;

👆

の繰り返し実行が終了されたなら


(while{}文の繰り返しループから抜け出すことができれば)


もう


プログラムの実行は終了(ゲームは終了)したも当然なんだね」


マックス「なるほど


while{}文の繰り返しループから


抜け出すことさえできれば


プログラムの実行は終了(ゲームは終了)したも当然か・・・


となると


while{}文の繰り返しループから


抜け出す方法を見つければいいんだな


もしや・・・


ここに


CheckHitKey関数が関係してきたりしてな


なあ~んてな」


solarplexuss「関係しているっぽいね」










  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る