トップページ > 過去ログ > 記事閲覧
メニュー操作による終了
名前:うちうせん 日時: 2007/06/22 23:30

書籍を元にゲーム作成しています。 たとえばタイトル画面にスタートと終了ボタンを描画するとして、終了が選ばれてEnterが押された場合終了という処理をするとします。 書籍のように while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { ClsDrawScreen(); switch(gstate) { case GAME_TITLE: drawGameTitle(); break; case GAME_MAIN: drawGameMain(); break; case GAME_OVER: drawGameOver(); break; case GAME_CLEAR: drawGameClear(); break; default: break; } ScreenFlip(); animcounter = animcounter + 1 ; } というメッセージループを作成し、drawGameTitleの中でキー判定をしていますが、その中からソフトの終了要請をする方法がなにかあるんでしょうか? drawGameTitle自体に戻り値をつけてその戻り値によってループ脱出というのも考えましたが、もっとうまい方法があればと思って投稿してみました。 開発:C++

Page: 1 |

Re: メニュー操作による終了 ( No.1 )
名前: 日時:2007/06/23 12:32

DxLib_End(); exit(0); //強制終了 としてやればその時点で終了することはできますよ。
Re: メニュー操作による終了 ( No.2 )
名前:Will 日時:2007/06/23 18:23

>drawGameTitle自体に戻り値をつけてその戻り値によってループ脱出というのも考えましたが 私の個人的な意見ではこの方法がベストと思います。 終了処理のようなものはなるべく一箇所のまとめるほうが設計的にきれいだと思います。
Re: メニュー操作による終了 ( No.3 )
名前:うちうせん 日時:2007/06/23 21:46

返答ありがとうございました。 雪さんの強制終了はエラー時などに。 戻り値の方はメニュー終了に。 両方使い分けて作ってみます。
Re: メニュー操作による終了 ( No.4 )
名前:憂煉 日時:2007/06/23 23:11

蛇足ですが、専用の終了関数などを作っておくと便利です。 自分のをさらしますね。 void End(const char *c=NULL,int ernum=0x000000){ string en; if(c!=NULL){ en="エラー:"; en+=c; } if(ernum!=0x000000){ en+="\nErrorCode:0x"; char ci[8]; sprintf(ci,"%x",ernum); en+=ci; } MessageBox(NULL,en.c_str(),"エラー",MB_OK); #ifdef RETURN_USED Return(); #endif exit(0); } という関数と、 #define RETURN_USED と、 void Return(){ //メモリ開放処理 delete Cdrawstring; delete Cscript; delete Ckatamari; delete Cinput; //ライブラリ終了処理 DxLib_End(); } こんなかんじです。ただし、僕のはstring.hをインクルードして using namespace std; をどこかに書く必要があります。
Re: メニュー操作による終了 ( No.5 )
名前:憂煉 日時:2007/06/23 23:13

あ、ci[8]じゃなくてci[9]にしないとエラーですね すいません

Page: 1 |