首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 猜數字遊戲 (4A4B) 完整實作:隨機生成、提示邏輯、次數統計

     編輯:程式設計疑難解答

需求:電腦產生 4 位不重複數字,玩家猜測,回饋 `xA yB` (A=位置數字皆對,B=數字對位置錯),直到 4A0B 結束並顯示猜測次數。

核心演算法


static string GenAnswer() {
    var digits = "0123456789".ToCharArray();
    var rnd = new Random();
    for (int i = digits.Length - 1; i > 0; --i) {
        int j = rnd.Next(i + 1);
        (digits[i], digits[j]) = (digits[j], digits[i]);
    }
    return new string(digits, 0, 4); // 取前 4 個不重複數字
}

static (int A, int B) Judge(string ans, string guess) {
    int a = 0, b = 0;
    for (int i = 0; i < 4; ++i) {
        if (ans[i] == guess[i]) a++;
        else if (ans.Contains(guess[i])) b++;
    }
    return (a, b);
}

完整主程式 (互動式)


using System;

class Guess4AB {
    static void Main() {
        string ans = GenAnswer();
        int times = 0;
        Console.WriteLine("歡迎來到 4A4B 猜數字遊戲!輸入 4 位不重複數字,輸入 q 退出。");
        while (true) {
            Console.Write("請輸入猜測: ");
            string input = Console.ReadLine()?.Trim();
            if (input == "q") break;
            if (input.Length != 4 || input.Distinct().Count() != 4 || !input.All(char.IsDigit)) {
                Console.WriteLine("格式錯誤:需 4 位不重複數字。");
                continue;
            }
            ++times;
            var (A, B) = Judge(ans, input);
            Console.WriteLine($"{A}A{B}B");
            if (A == 4) {
                Console.WriteLine($"恭喜!答案是 {ans},共猜了 {times} 次。");
                break;
            }
        }
    }
    // GenAnswer, Judge 如上
}

進階功能擴充

  • 歷史紀錄:`List<(string guess, int A, int B)> history` 結束時列印。
  • 難度選擇:3 位/5 位/允許重複數字。
  • GUI 版:WinForms/WPF 繫結 `TextBox`、`ListView` 顯示歷史。
  • 作弊模式**

關鍵細節

  1. 答案與輸入**必須 4 位不重複**,否則 `Contains` 判斷 B 會出錯 (重複數字會被多算)。
  2. `Random` 實例化一次,避免短時間相同種子。
  3. 輸入驗證用 LINQ `Distinct().Count() == 4` 簡潔明確。

複製上方代碼即可跑起來玩,邏輯清晰、易於擴充 GUI 或加入提示功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved