====== 正誤判定、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へ]] ^