Как можно выбрать несколько значений из массива случайных чисел - PullRequest
1 голос
/ 12 февраля 2020

Я создаю программу для игры в кости для дальнейшего обучения. Программа бросит 5 кубиков и назначит значения случайных чисел массиву из 5 и выведет значения. После этого я хочу, чтобы игрок выбрал d ie или кости, которые он или она хотел бы сохранить, отобразил эти значения, и позже я создам метод броска оставшихся костей.

У меня проблема с выбором части нескольких кубиков.

Это то, что у меня есть до сих пор:

    using System;


class HelloWorld {

  static void Main() {

    Random random = new Random();

    int[] diceEach = new int[5];


    int diceCount = 1;

    for(int i = 0; i < 5; i++)
    {
        diceEach[i] = random.Next(1, 7);
        Console.WriteLine("Dice " + diceCount +": " + diceEach[i]);
        diceCount++;
    }
    Console.WriteLine("To roll again hit R");

    Console.WriteLine("Please type the dice numbers that you would like to keep...");
    string diceKept = Console.ReadLine();

        if(diceKept == "1")
        {
            Console.Write(diceEach[0]);
        }

        else if(diceKept == "1")
        {
            Console.WriteLine(diceEach[1]);
        }

        else if(diceKept == "3")
        {
            Console.WriteLine(diceEach[2]);
        }

        else if(diceKept == "4")
        {
            Console.WriteLine(diceEach[3]);
        }

        else if(diceKept == "5")
        {
            Console.WriteLine(diceEach[4]);
        }

        else if(diceKept == "r")
        {
            Console.WriteLine("You have chosen to roll again");
        }


    Console.ReadLine();

  }

}

В настоящее время у меня распечатывается одно значение кости что вы выбираете, но я не был уверен, как распечатать несколько вариантов. Единственный способ, которым я могу придумать, - это набрать все варианты. Но это кажется неправильным и сделает мой код таким длинным.

Я думал, что какой-то al oop может сработать? Но я могу видеть как.

Я впервые здесь пишу, так что, надеюсь, я все сделал правильно. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Другой способ решить эту проблему - l oop до тех пор, пока пользователь не выберет кости для сохранения и не захочет перебросить, используя do ... while l oop.

        string diceKept;
        do
        {
            Console.WriteLine("Please type the dice number that you would like to keep...and type 'r' to when finished to re-roll remaining dice");
            diceKept = Console.ReadLine();

            if(int.TryParse(diceKept, out var diceNumber))
            {
                // I am making an assumption here that the user will always input a number between 1-6.
                // It would be best to put some logic to catch that scenario though.
                Console.WriteLine(diceEach[diceNumber - 1]);
            }

        } while (diceKept.ToLower() != "r");

        Console.WriteLine("Now re-rolling the rest....");
        // Do some re-relling stuff here.
        Console.Read()
0 голосов
/ 12 февраля 2020

Вы можете получить несколько вариантов выбора пользователя, позволяя ему вводить выбранные кубики, разделяя их запятой ',' например,

1,2,5

, а затем развернуть код

string diceKept = Console.ReadLine();

try{
    int[] selectedDices = diceKept.Split(',').Select(x => int.Parse(x)).ToArray();
}catch{
//invalid input - string value could not be parsed to int value.
}

, который вы можете использовать блок try-catch в функции, затем, если ошибки не были сброшены, продолжайте работу, иначе повторите ввод выбранных значений.

...