main関数の書き方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hazard

main関数の書き方について

#1

投稿記事 by hazard » 15年前

ゲームプログラミングの館に 34.main関数の書き方。 という項目がありますが、
この章の書き方だと

0の時は、オープニングに関する関数へ、
1の時は、メニュー画面に関する関数へ、
2の時は、キャラがダンジョンにいるときに処理する関数へ、
3の時は、戦闘シーンを処理する関数へ、
4の時は、エンディングを処理する関数へ、

というのは 0から順番にキーを押すしかないですよね?

0から3 や 1から4 など 0,1,2,3,4のどれを始めに押しても対応できる
ようには どうすれば良いのでしょうか?

以下がそのソースです


#include "DxLib.h"

int function_status=0,White;
char KeyBuf[ 256 ] ;

void Opening(){
DrawString(100,100,"オープニング画面 (zをプッシュ)",White);
if(KeyBuf[KEY_INPUT_Z]==1)
function_status=1;
}

void Menu(){
DrawString(100,140,"メニュー画面 (xをプッシュ)",White);
if(KeyBuf[KEY_INPUT_X]==1)
function_status=2;
}

void Danjon(){
DrawString(100,180,"ダンジョン画面 (cをプッシュ)",White);
if(KeyBuf[KEY_INPUT_C]==1)
function_status=3;
}

void attack(){
DrawString(100,220,"戦闘画面 (vをプッシュ)",White);
if(KeyBuf[KEY_INPUT_V]==1)
function_status=4;
}

void Ending(){
DrawString(100,260,"エンディング画面 (bをプッシュ)",White);
if(KeyBuf[KEY_INPUT_B]==1)
function_status=5;
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; //ウィンドウモードに変更
if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了

White = GetColor( 255 , 255 , 255 ) ; //色の取得

SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定

while( 1 ){
ClearDrawScreen(); // 裏画面のデータを全て削除
GetHitKeyStateAll( KeyBuf ) ; // すべてのキーの状態を得る

switch(function_status){
case 0:
Opening();
break;
case 1:
Menu();
break;
case 2:
Danjon();
break;
case 3:
attack();
break;
case 4:
Ending();
break;
default:
DxLib_End() ; // DXライブラリ使用の終了処理
return 0;
break;
}

if( ProcessMessage() == -1 ) break ; //エラーが起きたら終了

ScreenFlip() ; // 裏画面データを表画面へ反映
}

DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}

hazard

Re:main関数の書き方について

#2

投稿記事 by hazard » 15年前

訂正
 
   質問文に

    0から3 や 1から4 など 0,1,2,3,4のどれを始めに押しても対応できる
ようには どうすれば良いのでしょうか?

と 書いてありましたが、 1から3 や 1から4 など 0,1,2,3,4のどれを始めに押しても対応できるようには どうすれば良いのでしょうか?

でした ごめんなさい

kazuoni

Re:main関数の書き方について

#3

投稿記事 by kazuoni » 15年前

関数内に
ボタン判定→function_status
の制御を書かず、関数mainで制御を行えばよいと思います。

Tatu

Re:main関数の書き方について

#4

投稿記事 by Tatu » 15年前

では、以下の問題を考えてみてください。

(1) 処理を変更するために何を変更しているでしょうか?

(2) 34章のプログラムにおいて、以下の関数はいつ実行され、どのような処理をするか説明できますか?
void Menu(){
DrawString(100,140,"メニュー画面 (xをプッシュ)",White);
if(KeyBuf[KEY_INPUT_X]==1)
function_status=2;
}

(3) (2)の関数をどのように変更したら
Xキーを押したときダンジョン画面にし、
Cキーを押したとき戦闘画面にすることができるようになるでしょうか?

hazard

Re:main関数の書き方について

#5

投稿記事 by hazard » 15年前

ありがとうございます!

hazard

Re:main関数の書き方について

#6

投稿記事 by hazard » 15年前

解決をわすれてました


閉鎖

“C言語何でも質問掲示板” へ戻る