フラグのせい(?)でSleepが先攻してしまうのですが
Posted: 2012年1月22日(日) 12:40
DXライブラリを使って英単語のタイピングゲームを作っています。
メインwhileでどのキーが押されたかの判定や、入力されたものが正しい文字かの判定などをしています。
その他タイピングゲームの基本動作もそこで行っています。
文字の判定や表示は1文字ごとに行っています。
問題の単語の最後の文字をタイプしてもらったときで、ちゃんと一致していたら1秒ほどSleepしてから次の問題に移りたいと思い、最後の文字を表示する後にSleepや次の問題へ行くためにカウントを上げたりする処理を書いています。
ですが、実行させてみると最後の文字をタイプしたらSleepに入ってしまい、Sleepが終わったら最後の文字も表示してすぐ次の問題に変わってしまいます。
デバッグをかけてみても、私の思うようには動いてくれません。
どのようにしたら、最後の文字をタイプしたら最後の文字も表示してSleepに入り、Sleepが終わったら次の問題に変わるというような流れになるでしょうか?
メインwhileのソースコード
ソースコード全体はこちら
メイン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);
}
}