ページ 11

ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:01
by kagari
13行目にwhile( 1 )とありますが、かっこの中は([変数名]==1) のような条件式にしなくてもよいのでしょうか。
また、この場合、何の変数が1になるまでループされるのでしょうか。

コード:

#include "DxLib.h"
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;      //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1; // DXライブラリ初期化処理 エラーが起きたら終了 
 
        int White ;   
        char KeyBuf[ 256 ] ;  
        White = GetColor( 255 , 255 , 255 ) ;//色の取得
 
        DrawString( 170 , 240 , "Z,X,スペースを同時に押すと終了します。" , White );
        
        while( 1 ){                                                     //←この行がわかりません!!
                GetHitKeyStateAll( KeyBuf ) ;                   // すべてのキーの状態を得る
 
                if( KeyBuf[ KEY_INPUT_Z ] == 1 && KeyBuf[ KEY_INPUT_X ] == 1 && KeyBuf[ KEY_INPUT_SPACE ] == 1 )
                        break ;
 
                if( ProcessMessage() == -1 ) break ;//エラーが起きたら終了
        }
 
 
        DxLib_End() ;           // DXライブラリ使用の終了処理
        return 0 ;              // ソフトの終了
}

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:07
by bitter_fox
kagari さんが書きました:13行目にwhile( 1 )とありますが、かっこの中は([変数名]==1) のような条件式にしなくてもよいのでしょうか。
また、この場合、何の変数が1になるまでループされるのでしょうか。

コード:

  
        while( 1 ){                                                     //←この行がわかりません!!
whileは条件式が真の間ループを実行します。
[変数名]==1というのは条件式に当たります。
この条件式を判定した結果に真か偽があります。
偽というのは数値で0、また、
真というのは偽以外、つまり0以外の数値ということになります。

ですのでwhile (1)の1というのは条件が1(つまり真)であるということを示しており無限ループになります。

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:20
by kagari
ありがとうございます。
無限ループなのはわかりました!

ただ一つ納得がいかないのですが、
while( 1 )というのは、何の変数が1なのでしょうか。

たとえば、

コード:

while( hensuu == 1 )
なら、hensuuという変数が1の間、whileの中を実行するのはわかるのですが、

コード:

while
while( 1 )
というのは、何が1の間、whileの中を実行しているのでしょうか。

度々申し訳ありませんが、よろしくおねがいします。

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:21
by kagari
2個目のコードでwhileがかぶってしまいました。上のwhileは無視してください。

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:39
by みけCAT
「何が1の間」という問題ではありません。

コード:

while(なんとか) {
    /*処理*/
}
というのは、「なんとかが真の間処理を繰り返し実行する」という意味になります。
したがって、あえて言うなら「1が真の間」実行します。
すなわち、ずっと実行します。

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:40
by maru
while 文の()の中は変数ではなく式です。別に変数を使った式を書く必要はなく、定数でもかまいません。

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:58
by はんなり
whileの()内が1だったら必ずループするんだと覚えた方が早いです。

whileは()内の条件を満たしていればループなので、条件が欲しければ、

コード:

while(ProcessMessage()==0){
とすれば、whileでProcessMessageを使ってくれるので一行お得ですよ。

Re: ゲームプログラミングの館 入門編11について

Posted: 2011年4月01日(金) 14:58
by kagari
みなさんありがとうございます。
やっと理解できました!