正解判定とか

あとは正解判定をして、正解の時はおめでとうメッセージを表示して終わるとかすれば完成です。
つまり

今回のルール

  • 被らない4桁の数字がランダムで生成され出題される
  • プレイヤーは毎ターン4桁の数字を入力する
  • コンピュータの応答として、入力した数字を答えと比べ以下を返す
    • ヒット:位置も数字も答えと一致している桁数
    • ブロー:数字はあっているけれども位置が違う数字の数
  • ヒット=4の時は入力=出題なので、正解のメッセージを表示
  • それ以外は、もう一度入力を促す
  • 正解するまでこれを繰り返す。

の部分をこしらえて完成!

正誤判定

文字列同士が同じかどうかはどうやったら判定できるっけ?
C言語では、 strcmp関数を使わないと文字列比較ができないですし、そもそも文字列という方がなかったので、文字配列+'\0'なんていう、疲れるものを使っていました。(みんなにも文字配列による文字列表現は教えたけど、C言語のことは知らんよね)
string同士の比較はどうやるかは教えてあると思うのでそれを使ってください。
そうすると、メインのループは以下のようになります。

"正解判定入り入力ループ"
int main()
{
	string answer = "0000"; //正答
	string input = "0000"; //入力用
	srand((unsigned int)(time(nullptr)));
 
	answer = MakeProblem();
 
	cout << "THE HIT AND BLOW GAME" << endl;
	cout << "Let's Play the GAME!!" << endl;
	while (true)
	{
		cout << "予想した4桁の整数を入力:";
		cin >> input;
		if (エラー処理で問題なかったら) {
                        if(もし正解だったら)
                           break;//どうせ正解したらループ抜けちゃうから、elseと書かなくてすむ
                        //HIT数を数えて表示
			cout << " Hit:" << HIT数カウント呼び出し << endl;
                        //BLOW数を数えて表示
			cout << "Blow:" << BLOW数カウント呼び出し << endl;
		}
	}
        //正解した時しかここにたどり着かない。
        //ループの中で処理してもいいけど、今回はこんな感じにしてみました。
	cout << "おめでとう!" << endl;
	cout << "答えは" << answer << "でした" << endl;
	return 0;
}

実行例を載せておくので参考にしてください。
見づらい時は、画像をクリックして拡大してみてね

Fig. 1: 実行例(あんま効率いい解き方じゃないけど

後は、ゲームの追加要素として以下のようなものを考えてみよう!

  1. タイトル、プレイ、結果画面の移行
  2. エラーの種類(何が悪かったのか)を表示してから再入力を促す
  3. 入力メニューと履歴表示の追加
  4. 桁数を変えてみる
  5. ソースとヘッダの分離(関数のプロトタイプ宣言と、定義を別ファイルにする)
  6. DxLibによるグラフィック表示

例えば、履歴の表示は以下のようなイメージ
いつも通り見づらい時は(ry

Fig. 2: 履歴の表示
  • game-engineer/classes/2023/something-else/summertime-special-cource/console-5.txt
  • 最終更新: 6カ月前
  • by root