====== 正誤判定、HIT、BLOWの判定 ======
問題作成と、ユーザーの入力までできたので、次はいよいよヒットとブローの判定をする。\\
==== ルールのおさらい ====
__**今回のルール**__
* 被らない4桁の数字がランダムで生成され出題される
* プレイヤーは毎ターン4桁の数字を入力する
* **コンピュータの応答として、入力した数字を答えと比べ以下を返す**
* **ヒット:位置も数字も答えと一致している桁数**
* **ブロー:数字はあっているけれども位置が違う数字の数**
* ヒット=4の時は入力=出題なので、正解のメッセージを表示
* それ以外は、もう一度入力を促す。
* 正解するまでこれを繰り返す。
ヒットとブローの判定は、とても簡単。\\
問題の数列(''answer'')とユーザの入力(''input'')を比較して、ごにょごにょして、ヒット数とブロー数を数えるだけです。\\
それぞれ、以下のような関数を作ってHITとBLOW別々に判定してみましょう。(別に一緒にやってもいいんだけど、なんとなく別にします)\\
; C++ : int CountHit(string ans, string input);\\ int CountBlow(string ans, string input);
; C言語 : int CountHit(char ans[5], char input[5]);\\ int CountBlow(char ans[5], char input[5]);
=== int CountHit(string ans, string input);の作成 ===
HIT:数字も位置も一致している。なので。\\
HIT数は簡単に求められます。answerとinputの各桁同士を比較して一致しているものの数を返せばいいです。\\
//int CountHit(string ans, string input) C言語の時
int CountHit(string ans, string input)
{
int count = 0;
//チェック通ってるんで、ansとinputの長さは同じ前提
// for (int i = 0; i < 4; i++ ) C言語の時
for (int i = 0; i < ans.length(); i++ )
{
if (ヒットかどうかの判定)
{
count++;
}
}
return(count);
}
=== int CountBlow(string ans, string input);の作成 ===
BLOW:数字はあっているけど、位置はずれている。なので。\\
BLOW数は簡単に求められます。answerとinputの各桁同士を比較して一致しているものの数を返せばいいです。\\
int CountBlow(string ans, string input)
{
int count = 0;
//チェック通ってるんで、ansとinputの長さは同じ前提
//for (int i = 0; i < 4; i++) C言語の時
for (int i = 0; i < ans.length(); i++)
{
//for(int j = 0; j < 4; j++) { C言語の時
for(int j = 0; j < input.length(); j++) {
if (BLOWかどうか)
{
if(HITの時は除いてカウントする)
count++;
}
}
}
return(count);
}
==== HIT数、BLOW数の動作チェック ====
関数の中でいろんなチェックをしなくてよいように、エラーチェックに通った時だけHIT数、BLOW数のカウントを行います。\\
前回までの入力ループを以下のように変更してみよう\\
(さすがにC言語の人もここはもうじぶんでへんこうできるよね?)
int main()
{
string answer = "0000"; //正答
string input = "0000"; //入力用
srand((unsigned int)(time(nullptr)));
MakeProblem(answer);
cout << "THE HIT AND BLOW GAME" << endl;
cout << "Let's Play the GAME!!" << endl;
while (true)
{
cout << "予想した4桁の整数を入力:";
cin >> input;
if (エラー処理で問題なかったら) {
//HIT数を数えて表示
cout << " Hit:" << HIT数カウント呼び出し << endl;
//BLOW数を数えて表示
cout << "Blow:" << BLOW数カウント呼び出し << endl;
}
}
return 0;
}
|< 300px 50% 50% - >|
^ [[game-engineer:classes:2025:something-else:summertime-special-cource:console-4|その4へ]] ^ [[game-engineer:classes:2025:something-else:summertime-special-cource:console-6|その6へ]] ^