if文がうまく動かない
Posted: 2013年1月31日(木) 04:49
初めまして。プログラミング初心者の者です。
C++,DXライブラリに関しては文字通り初心者です。苦しんで覚えるC言語や新・C言語の館をサッと読んだ程度のレベルです。
Windows7,C++2010,DXライブラリでミニゲームを製作しているのですが、if文の挙動がどうしてもうまくいかないので書き込ませてもらいました
作りたいと考えていたものは時限爆弾処理ゲームみたいなもので、ABCのキーに対応したコードを順に切っていくものです。
時間制限制で、いくつの爆弾を時間内に解体できるか?という内容です。
いくつかの問題パターンを想定しており、A→B→Cの順で切るパターンのAのコードを切るときの動きを作りました。
Aボタンを押し、その後Bボタンを押さなければならない状況になったとき、押し続けられた状態になっているとBボタンを押さなくてはならないのにAボタンを押していることになり、問題を間違えたことになってしまうので押し続け判定を作りました。
挙動としては、
何も押されていない→タイムが減る(timec();)
Aボタン(正答)が押されている→報償としてスコアとタイムを増やす(scorep();とtimep();)、キーが押し続けられている判定をONにする
それら以外のキー(誤答)が押されている→ペナルティによりスコアとタイムを減らす(scorem();とtime();)
何等かのキーが押し続けられている→タイムが減る(timec();)
しかし、Aボタンを押すだけのif文でも問題が出てしまいました。
テストのために正答のスコアを+1000、誤答のスコアを-15000にしているのですが、Aボタンを押したときスコアの動きが「+1000」か「-14000」になってしまうのです。
(なぜか-14000のほうが多く、lv関連(次の問題にいく操作)を無くしたところ、押し続けるとスコアが増加、連打するとスコアが減少するのを確認しました)
想定している動きは、Aボタンを押せば「+1000」のスコアだけが出ることです。
何度か見直しましたが、原因がわかりませんでした…。以下if文のコードです。
どのように直したらいいか、そして何が原因かご教授願いたいです。
また、スコアとタイムの管理をしている関数はこうなっています
C++,DXライブラリに関しては文字通り初心者です。苦しんで覚えるC言語や新・C言語の館をサッと読んだ程度のレベルです。
Windows7,C++2010,DXライブラリでミニゲームを製作しているのですが、if文の挙動がどうしてもうまくいかないので書き込ませてもらいました
作りたいと考えていたものは時限爆弾処理ゲームみたいなもので、ABCのキーに対応したコードを順に切っていくものです。
時間制限制で、いくつの爆弾を時間内に解体できるか?という内容です。
いくつかの問題パターンを想定しており、A→B→Cの順で切るパターンのAのコードを切るときの動きを作りました。
Aボタンを押し、その後Bボタンを押さなければならない状況になったとき、押し続けられた状態になっているとBボタンを押さなくてはならないのにAボタンを押していることになり、問題を間違えたことになってしまうので押し続け判定を作りました。
挙動としては、
何も押されていない→タイムが減る(timec();)
Aボタン(正答)が押されている→報償としてスコアとタイムを増やす(scorep();とtimep();)、キーが押し続けられている判定をONにする
それら以外のキー(誤答)が押されている→ペナルティによりスコアとタイムを減らす(scorem();とtime();)
何等かのキーが押し続けられている→タイムが減る(timec();)
しかし、Aボタンを押すだけのif文でも問題が出てしまいました。
テストのために正答のスコアを+1000、誤答のスコアを-15000にしているのですが、Aボタンを押したときスコアの動きが「+1000」か「-14000」になってしまうのです。
(なぜか-14000のほうが多く、lv関連(次の問題にいく操作)を無くしたところ、押し続けるとスコアが増加、連打するとスコアが減少するのを確認しました)
想定している動きは、Aボタンを押せば「+1000」のスコアだけが出ることです。
何度か見直しましたが、原因がわかりませんでした…。以下if文のコードです。
どのように直したらいいか、そして何が原因かご教授願いたいです。
if(lv==0)//Aを切る
{ //1.レベルは0か?
if(Key[KEY_INPUT_A]>=1) //2.正答のキーは押されているか?
{ //押されているので
scorep(); //スコアプラス
timep(); //タイムプラス
osaretsuduke=1; //押され続け判定設置
lv=1; //Bを切るのに移る
}
else //押されていないので
{
if(CheckHitKeyAll()==0) //3.何等かのキーは押されているか?
{ //押されていないので
timec(); //タイム減少
osaretsuduke=0; //押され続け判定解除
}
else //押されているので
{
if(osaretsuduke==1) //4.何等かのキーは押され続けているか?
{ //押され続けているので
timec(); //タイム現象
}
else //押され続けていないので
{
scorem(); //スコアマイナス
timem(); //タイムマイナス
osaretsuduke=1; //押され続け判定設置
}
}
}
}
else //レベルは0でないので
{
if(lv==1) //以降、Bを切るのに移る
{}
else
{}
int ptimes=50;
int ltimes=100;
int times=1000;
int pscore=1000;
int lscore=15000;
//ポイント関連関数//
int scorep()
{
score=score+pscore;
return 0;
}
int scorem()
{
score=score-lscore;
return 0;
}
//ポイント関連関数//
//時間関連関数//
int timep()
{
times=times+ptimes;
return 0;
}
int timem()
{
times=times-ltimes;
return 0;
}
int timec()
{
times=times-1;
return 0;
}