C#随机数生成无法按预期工作

时间:2017-03-16 02:19:06

标签: c# string for-loop int

编辑#2:随机编号现在可以正常工作,但是如果你像以前一样放入相同的编号。如果n1 = 7并且你输入7两次它将打印7正确两次但只添加一个到显示器。同时你也可以找到其他正确的数字。

编辑:我知道你们都认为这是重复的,但它根本没有用,因为我不理解那个帖子。

明天我需要这个工作,所以任何帮助都可以。

我有一个类和游戏内部的游戏我有这个安全破解拼图的东西,我似乎无法让它工作。

  • 第一个问题是,当你传递20个猜测时,它会播放generateCombo();的WriteLine();无限地。

  • 第二个是前两个数字总是不同,但数字2,3和4 总是相同。

我今年刚刚开始编码,并且不太了解如何修复无限循环。

提前致谢!

class Safe
{
    public bool safeLocked { get; set; }
    public int guesses { get; set; }
    public int cn1 { get; set; }
    public int cn2 { get; set; }
    public int cn3 { get; set; } 
    public int cn4 { get; set; }
    public int num1 { get; set; }
    public int num2 { get; set; }
    public int num3 { get; set; }
    public int num4 { get; set; }

}

class Guesses
{
    public string puzzleGuess { get; set; }
}

public static void Main(string[] args)
    {

    static Guesses numberOf = new Guesses();
    static Safe safe = new Safe();

        safe.guesses = 0;
        safe.safeLocked = true;
        safe.cn1 = 0;
        safe.cn2 = 0;
        safe.cn3 = 0;
        safe.cn4 = 0;
}
public static void generateCombo()
    {
        safe.cn1 = 0;
        safe.cn2 = 0;
        safe.cn3 = 0;
        safe.cn4 = 0;

        Random n = new Random();

        //First number
        safe.num1 = n.Next(1, 10);

        //Second number
        safe.num2 = n.Next(1, 10);

        //Third number
        safe.num3 = n.Next(1, 10);

        //Fourth number
        safe.num4 = n.Next(1, 10);

        Console.WriteLine("A new combonation has been generated.");
        Console.ReadLine();
        safeCracking();
    }

    public static void printScreen()
    {
        Console.Clear();
        Console.ForegroundColor = ConsoleColor.Green;
        Console.Write("Guesses: ");
        Console.ResetColor();
        Console.WriteLine("{0}", safe.guesses);
        Console.WriteLine("");

        Console.WriteLine("     =================================    ");
        Console.WriteLine("     |       |       |       |       |    ");
        Console.WriteLine("     |       |       |       |       |    ");
        Console.WriteLine("     |   {0}   |   {1}   |   {2}   |   {3}   |    ", safe.cn1, safe.cn2, safe.cn3, safe.cn4);
        Console.WriteLine("     |       |       |       |       |    ");
        Console.WriteLine("     |       |       |       |       |    ");
        Console.WriteLine("     =================================    ");
        Console.WriteLine("");
        Console.WriteLine("Guess the numbers of the combination one by one.");
        Console.WriteLine("");
        Console.Write(safe.num1);
        Console.Write(safe.num2);
        Console.Write(safe.num3);
        Console.Write(safe.num4);
    }


    public static void safeCracking()
    {
        string numg;
        int numberG;

        for (safe.guesses = 0; safe.guesses < 20;)
        {

            printScreen();

            try
            {
                numg = Console.ReadLine();
                numberG = int.Parse(numg);
            }
            catch
            {
                numg = "";
                numberG = 0;
            }
            numberOf.puzzleGuess = numg;

            //Check number 4
            if (safe.cn3 > 0 && (numg == safe.num4.ToString()) && safe.cn4 == 0)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("");
                Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
                Console.ResetColor();
                safe.safeLocked = false;
                safe.cn4 = numberG;
                safeUnlocked();
                break;
            }

            //Check number 3
            else if (safe.cn2 > 0 && (numg == safe.num3.ToString()) && safe.cn3 == 0)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("");
                Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
                Console.ResetColor();
                safe.cn3 = numberG;
                Console.ReadLine();
            }

            //Check number 2
            else if (safe.cn1 > 0 && (numg == safe.num2.ToString()) && safe.cn2 == 0)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("");
                Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
                Console.ResetColor();
                safe.cn2 = numberG;
                Console.ReadLine();
            }

            //Check number 1
            else if (safe.cn1 <= 0 && (numg == safe.num1.ToString()) && safe.cn1 == 0)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("");
                Console.WriteLine("{0} Is Correct!", numberOf.puzzleGuess);
                Console.ResetColor();
                safe.cn1 = numberG;
                Console.ReadLine();
            }

            else {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("");
                Console.WriteLine("{0} Is Incorrect!", numberOf.puzzleGuess);
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine("Press Enter to continue...");
                Console.ResetColor();
                Console.ReadLine();
                safe.guesses++;
            }

        }

        generateCombo();
        safe.guesses = 0;
    }

    public static void safeUnlocked()
    {
        Console.Clear();
        Console.WriteLine("The latch on the safe pops open and you give the door a pull.");
        Console.ReadLine();
        Console.WriteLine("Inside of the safe you find a medallion and 3 red potions.");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.ReadLine();
        Console.WriteLine("MEDALLION ADDED TO INVENTORY AND PLAYER DAMAGE 2X...");
        Console.ReadLine();
        Console.WriteLine("3 HEALTH POTIONS ADDED TO INVENTORY...");
        Console.ResetColor();
        Console.ReadLine();
        Console.WriteLine("As soon as you grab the last potion the roof opens and you hear a deep voice mumbling.");
        Console.ReadLine();
        Console.ForegroundColor = ConsoleColor.Magenta;
        switch (playerClass.richtofen)
        {
            case 0:
                Console.WriteLine("THE PURPLE KEEPER HAS AWOKEN...");
                purpleKeeperBattle();
                Console.ResetColor();
                return;
            case 1:
                Console.WriteLine("THE SHADOW MAN HAS AWOKEN...");
                shadowManBattle();
                Console.ResetColor();
                return;
        }

    }

0 个答案:

没有答案