フラグのせい(?)でSleepが先攻してしまうのですが

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

フラグのせい(?)でSleepが先攻してしまうのですが

#1

投稿記事 by かなたん » 14年前

DXライブラリを使って英単語のタイピングゲームを作っています。
メインwhileでどのキーが押されたかの判定や、入力されたものが正しい文字かの判定などをしています。
その他タイピングゲームの基本動作もそこで行っています。
文字の判定や表示は1文字ごとに行っています。
問題の単語の最後の文字をタイプしてもらったときで、ちゃんと一致していたら1秒ほどSleepしてから次の問題に移りたいと思い、最後の文字を表示する後にSleepや次の問題へ行くためにカウントを上げたりする処理を書いています。
ですが、実行させてみると最後の文字をタイプしたらSleepに入ってしまい、Sleepが終わったら最後の文字も表示してすぐ次の問題に変わってしまいます。
デバッグをかけてみても、私の思うようには動いてくれません。
どのようにしたら、最後の文字をタイプしたら最後の文字も表示してSleepに入り、Sleepが終わったら次の問題に変わるというような流れになるでしょうか?

メインwhileのソースコード
ソースコード全体はこちら

コード:

while(ScreenFlip()==0&&ProcessMessage()==0&&ClearDrawScreen()==0){
	if(CheckHitKey(KEY_INPUT_ESCAPE)==1){
		return -1;
	}
	else{
		if(CheckHitKey(KeyModelData[27].keyInput)==1){
			KeyModelData[27].push = 10;  //沈む
		}
		else{
			KeyModelData[27].push = 0;   //戻す
		}
		for( int n=0 ; n<27; n++ ) {
			if( CheckHitKey(KeyModelData[n].keyInput)==1 ){
				if(flag[n]==false) {
					flag[n]=true;
					KeyModelData[n].push = 10;  //沈む
					if(flag2==false){
						check[c]=KeyModelData[n].keybord;
						if(KeyModelData[n].keybord==words[r][1][c]){
							c=c+1;
						}
						else{
							point=point-1;
						}
					}
				}
			}
			else{
				flag[n]=false;
				KeyModelData[n].push = 0;   //戻す
			}
		}
	}
	//表示
	StFontSize(50);
	DawString(60,50,"point:",GetColor(255,255,255));
	DawFormatString(210,50 ,GetColor(255,255,255) ,"%d" ,point );
	M1SetPosition(windowhandle,VGet(window.x,window.y,window.z));
	M1SetRotationXYZ(windowhandle,VGet(window.x_rotation,window.y_rotation,window.z_rotation));
	MV1DrawModel(windowhandle);
	DrawString(60 ,140 ,words[r][0] ,GetColor(255,255,255));
	int m=0;
	while(words[r][1][m]!='\0'){
		if(check[m]==words[r][1][m]){
			DrawFormatString(60+25*m ,185 ,GetColor(0,255,0) ,"%c" ,words[r][1][m] );
		}
		else{
			if(hint==true){
				DrawFormatString(60+25*m ,185 ,GetColor(255,255,255) ,"%c" ,words[r][1][m] );
			}
			if(check[m]!='\0'){
				DrawFormatString(60+25*m ,185 ,GetColor(255,0,0) ,"%c" ,check[m] );
			}
		}
		m++;
	}
	if(words[r][1][c]=='\0'){
		point=point+10;
		next=true;
		if(r==(max-1)){
			flag2=true;
		}
	}
		if(next==true&&flag2==false){
		Sleep(1000);
		r=r+1;
		next=false;
		if(flag2==false){
			for(c=0;c<50;c++){
				check[c]='\0';
			}
			c=0;
		}
	}
		if(flag2==true){
		DrawString(60,230,"終了",GetColor(255,255,255));
	}

	for(int n=0;n<28;n++){
		MV1SetPosition(KeyModelData[n].handle,VGet(KeyModelData[n].key.x,KeyModelData[n].key.y-KeyModelDatan].push,KeyModelData[n].key.z));
		MV1SetRotationXYZ(KeyModelData[n].handle,VGet(KeyModelData[n].key.x_rotation,KeyModelData[n].key.y_rotationKeyModelData[n].key.z_rotation));
		MV1DrawModel(KeyModelData[n].handle);
		
	}

}

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

Re: フラグのせい(?)でSleepが先攻してしまうのですが

#2

投稿記事 by jay » 14年前

実はSleepやWaitといった関数は使ってはいけないと言われています
詳しくはこちら参照
http://dixq.net/g/h_11.html


どうすればいいのかもURL先に書いてあるハズですので頑張ってくださいね。
URL先を見ても分からなければまた質問してください
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

かなたん

Re: フラグのせい(?)でSleepが先攻してしまうのですが

#3

投稿記事 by かなたん » 14年前

jayさん回答ありがとうございます。
教えてくれたサイトを参考にSleep関数を使わずにプログラミングしたところ、私の思っているような流れにすることができました。

かなたん

Re: フラグのせい(?)でSleepが先攻してしまうのですが

#4

投稿記事 by かなたん » 14年前

あ。 解決押すの忘れてました。

閉鎖

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