C # çalışmıyor Rastgele sayı tahmin oyunu

oy
-3

Ben oyun çalışmayı tahmin bu rastgele bir sayı almak için çalışıyorum. Doğru numarayı girip ipucu özelliği geri beslemeyi çok gerekiyordu vermez zaman program çalışır ama kazandığın mesajı vermez. Herhangi bir yardım takdir.

using System;

namespace randomNumberGame
{
    class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random();
            var val = r.Next(1, 100);
            var guess = 0;
            bool correct = false;
            var attemptsLeft = 5;


            Console.WriteLine(I'm thinking of a number between 1 and 100.);

            while (!correct && attemptsLeft >=  1)
            {

                Console.Write(You have  + attemptsLeft +  lives left. Please enter your Guess: );
                string input = Console.ReadLine();
                var message = ;
                var difference = val - guess;

                if (!int.TryParse(input, out guess))
                {
                    Console.WriteLine(That's not a number.);
                    continue;
                }
                if (difference == 0)
                {
                    Console.WriteLine(You have won);
                    correct = true;
                }


                else
                {

                    if (Math.Abs(difference) >= 50)
                    {
                        message = Math.Sign(difference) == -1 ? Very High : Very Low;
                    }
                    else if (Math.Abs(difference) < 50 && Math.Abs(difference) >= 20)
                    {
                        message = Math.Sign(difference) == -1 ? High : Low;
                    }
                    else if (Math.Abs(difference) < 20 && Math.Abs(difference) >= 10)
                    {
                        message = Math.Sign(difference) == -1 ? Moderatley High : Moderately Low;
                    }
                    else if (Math.Abs(difference) < 10)
                    {
                        message = Math.Sign(difference) == -1 ? Somewhat High : Somewhat Low;
                    }
                    else Console.WriteLine(???);
                }
                attemptsLeft--;


            }


        }
    }
}
Oluştur 10/10/2019 saat 00:46
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

"Doğru numarayı girdiğinizde size kazandı mesajı vermez"

Aslında öyle! Ama sonra programın bu kadar çabuk bunu görmek asla çıkar. Bu sorunu çözmek için, kullanıcı sonunda bir tuşa basmanızı bekler bir satır ekleyin Mainyöntemle, yani nihai sonucu görebilirsiniz:

// Add this as the last line of the main method:
Console.ReadKey();

"İpucu özelliği geri çok gerekiyordu yemi vermez"

Bu ipucu mesajı çünkü asla çıkışı! Senin sonunda whiledöngü, bunu yapmak için bir satırı ekleyin:

// Add this as the last line of the while loop:
Console.WriteLine(message);

Basitçe bir kesme noktası kodu ayarlarsanız Bunları kolayca bulunabilir (Vistal Studio, önümüzdeki hatlardan biri kırmızı bir nokta belirir (veya F9 tuşuna basın) sol marjı tıklayın). Sonra kullanarak kod boyunca adım F10ve değişir yerel değişkenlerin değerlerini izlemek ve adım adım neler olduğunu görebiliriz.


sorunları önlemek (ve onlar gerçekleştiği daraltmak için) yardımcı olmak için başka bir yolu da belirli bir işlem kod parçalarını çıkarıp bir yöntem koymak etmektir. Bu şekilde uzun vadede hata ayıklamak için yapacaktır.

Örneğin, giriş için istemi olarak kullanıcıya göstermek için bir dizede almak yöntemler yazmak ve onların girişi dayalı bir kesinlikle yazılan değer döndürebilir. Ayrıca bu yöntemler girdi onlar (1'den 100'e kadar bir sayı, ya da değil artık 25 den karaktere sahip bir isim gibi) geçerli bir aralıkta düşüşler girdiğinizi doğrulamak için kullanılan isteğe bağlı bir doğrulama yönteminde almak olabilir:

public static string GetStringFromUser(string prompt, 
    Func<string, bool> validator = null)
{
    string result;
    var cursorTop = Console.CursorTop;

    do
    {
        ClearSpecificLineAndWrite(cursorTop, prompt);
        result = Console.ReadLine();
    } while (!(validator?.Invoke(result) ?? true));

    return result;
}

public static int GetIntFromUser(string prompt, 
    Func<int, bool> validator = null)
{
    int result;
    var cursorTop = Console.CursorTop;

    do
    {
        ClearSpecificLineAndWrite(cursorTop, prompt);
    } while (!int.TryParse(Console.ReadLine(), out result) ||
                !(validator?.Invoke(result) ?? true));

    return result;
}

private static void ClearSpecificLineAndWrite(int cursorTop, 
    string message)
{
    Console.SetCursorPosition(0, cursorTop);
    Console.Write(new string(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, cursorTop);
    Console.Write(message);
}

Biz de tahmin sayıca sürebilir bizim "fark dize", almak için bir yardımcı yöntemini yazabilir ve minimum ve maksimum değerler, daha sonra ne kadar yakın olduklarına yüzdesi hesaplamak ve sonra uygun dize döndürür:

public static string GetDifferenceString(int guess, int number, 
    int minVal, int maxVal)
{
    var percentAway = 
        Math.Abs(guess - number) / (double)(maxVal - minVal) * 100;
    var direction = guess - number > 0 ? "High" : "Low";

    if (percentAway < 10) return $"Very close, but {direction}";
    if (percentAway < 20) return $"Just a little {direction}";
    if (percentAway < 30) return $"Somewhat {direction}";
    if (percentAway < 40) return $"Moderately {direction}";
    if (percentAway < 50) return $"{direction}";
    return $"Very {direction}";
}

Bu döngüler kaldırılması ve oradan sonuçları kontrol ederek ana kod kolaylaştırır ve bize ana işlere odaklanmasına olanak tanır:

static void Main(string[] args)
{
    var randomNumber = new Random().Next(1, 101);
    var maxAttempts = 5;
    var guess = 0;

    Console.WriteLine("I'm thinking of a number between 1 and 100.");

    for (int attempt = 0; attempt < maxAttempts; attempt++)
    {
        Console.WriteLine($"You have {maxAttempts - attempt} " + 
            $"out of {maxAttempts} attempts remaining.");

        guess = GetIntFromUser("Please enter your guess (1 - 100): ", 
            i => i > 0 && i < 101);

        if (guess == randomNumber)
        {
            Console.WriteLine($"You have won in {attempt + 1} tries!");
            break;
        }

        Console.WriteLine(GetDifferenceString(guess, randomNumber, 1, 100));
    }

    if (guess != randomNumber)
    {
        Console.WriteLine("Sorry, you lose! The number was: " + 
            $"{randomNumber}");
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}
Cevap 10/10/2019 saat 01:44
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more