2016-04-30 8 views
-2

私はCでテトリスゲームを構築しています。新しいブロックを展開するかどうかを制御するbooleanがあります。私は次のtypedefを使って変数boolを作成しました。私がプログラム(int main())を実行すると、初期化の後、私のプログラムは無限ループに入ります。これはかなりゲームです。なんらかの理由で、私はコメントされていないときに何かから私のプログラムを停止する行new_block = FALSE;を持っています。これは私がそれの前と後に置いた文printfの文を含んでいます。私はこの単純な声明で何が間違っているのか理解できません。おかげで:)bool new_blockをFALSEに設定すると、コードは何もしません(C)

typedef enum 
{ 
    FALSE, 
    TRUE 
} bool; 

while(1) { 
    if (new_block) { 
     printf("test1"); 
     i = 1; 
     //i = rand() % 7; 
     block = all_blocks[(i-1)*4]; 
     block.x = 5; 
     block.y = 0; 
     new_block = FALSE; 
     printf("test2"); 
     //update_stack(tetris_stack, block, i); 
     printf("test"); 
    } 
} 

私がチェックしているとprint文はnew_block = FALSE;私は参考のためにその下に追加されているもののので、エラーが私のブロック構造ではありませんコメントアウトされたときに正常に動作します。それを見てから、

typedef struct { 
int x; 
int y; 
int block_no; 
int rotation; 
int other_x[3]; 
int other_y[3]; 
int up_check_no; 
int up_x[3]; 
int up_y[3]; 
int left_rotate; 
int right_rotate; 
int down_rotate; 
int max_left; 
int left_check_no; 
int left_x[4]; 
int left_y[4]; 
int max_right; 
int right_check_no; 
int right_x[4]; 
int right_y[4]; 
int max_down; 
int down_check_no; 
int down_x[4]; 
int down_y[4]; 
}block; 
+2

[MCVE](/ help/mcve)を作成してください。コードをコンパイルする必要があります。 – Sumurai8

+0

homebrewのブール型を定義するのではなく、 'bool'という名前で定義します。 Cには組み込みのブール型と名前のための標準ヘッダーと定数用のマクロがあります。 – Olaf

答えて

0

、あなたが言う:

new_block = FALSE; 

if文:

if (new_block) 

は何度も何度も繰り返し失敗し、あなたのプログラムは、基本的に永遠にハングアップします。 if文に別の条件を追加したり、新しいブロックを作成するときにelse文や大文字小文字を使用してfalseを返すことがあります。

+0

私はあなたが言っていることを得るが、なぜそれが起こるだろうか? Cコードは連続していないのですか? new_blockを初期化したとき(whileループの外側)、私はそれをTRUEに設定します。それはフラグになっていたが、別の変数が必要な場合は、その目的を無効にする –

+0

だから私は "new_block = TRUE;"それは何らかの理由で物事を修正するようです。誰にもフラグを作成する他の方法はありますか?私はブール値が最も簡単な方法だと思った。 –

+0

フラグを作成した方法は問題ありませんが、if文の条件が失敗したとき(つまりnew_blockがfalseのとき)は何もしないコードがありません。 new_blockがfalseであるかどうかを調べるだけで、whileループに戻って再びテストします。 new_blockがfalseのときに何をしたいですか? – Mark

関連する問題