Qendrim Istrefi Ответов: 1

Лотерейные игры с C# в консольном приложении


Мне нужно создать программное обеспечение (консольное приложение) для лотерейных игр с номерами (1-39), функциональные возможности которого таковы:
Первоначально играть игроки, выбрав семь номеров
Программа генерирует семь выигрышных номеров случайным образом
Программное обеспечение автоматически, после окончания игры, должно перечислить игроков-победителей, имеющих более трех голов, и представить их количество.

Что я уже пробовал:

class Program
    {
        private static void InitArray()
        {
            int[] arr = new int[7];
            Random rnd = new Random();
            int tmp;

            for (int i = 0; i < arr.Length; i++)
            {
                tmp = rnd.Next(1, 39);
                while (IsDup(tmp,arr))
                {
                    tmp = rnd.Next(1, 39);
                }
                arr[i] = tmp;
            }           
            PrintTheArray(arr);
        }
        private static void PrintTheArray(int[] arr)
        {
            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }
        }
        private static bool IsDup(int tmp, int[] arr)
        {
            foreach (var item in arr)
            {
                if(item==tmp)
                {
                    return true;
                }
            }
            return false;
        }


        static void Main(string[] args)
        {
                
                //User Input
                List<int> lista1 = new List<int>();
            for (int i = 1; i <= 7; i++)
            {
                try
                {
                    Console.Write("First Number {0}: ", i);
                    int x = Convert.ToInt16(Console.ReadLine());

                    lista1.Add(x);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("The input number is incorret! It has to be whole number");
                    Console.WriteLine("Error: {0}", ex.Message);
                    i--;
                }
            }
            Console.WriteLine("\nChoosen Numbers are: ");
            foreach (int item in lista1)
            {
                Console.WriteLine(item);
            }

            //Random Number Generator
            Console.WriteLine("Random Numbers are: ");
            InitArray();
            Console.ReadLine();
        }

0x01AA

И что теперь?

Patrice T

Ладно, в чем вопрос ?

1 Ответов

Рейтинг:
1

OriginalGriff

Не делай этого так!
Сгенерируйте массив и заполните его 39 элементами: числами от 1 до 39 включительно.
Затем напишите метод, который скремблирует их: сгенерируйте 500 или 5000 пар чисел между 0 и 38 и поменяйте местами эти два элемента.
Первые "n" элементов массива являются выигрышными числами,поэтому скопируйте их в массив из "n" элементов и отсортируйте их.

Теперь попросите пользователя ввести "n" чисел, отсортировать их и проверить наличие дубликатов. Если все они в порядке, проверьте наличие выигрышных номеров. (Это легко - два массива отсортированы, так что это приятно и легко сделать!)

Прекратите использовать такие имена, как "print the array", и используйте имена, которые отражают, почему они это делают: например, "ShowWinningNumbers" означает, что ваш код начинает объяснять, что он делает и почему для вас, и это облегчает задачу всем - включая вас! - чтобы понимать и поддерживать его.

В принципе, сделайте так, чтобы ваше приложение отражало то, что делает лотерея "реального мира", а не то, как работает язык. Так гораздо проще писать!


Richard MacCutchan

Цитата:сделайте так, чтобы ваше приложение отражало то, что "реальный мир"
Напоминает мне о программе Cobol, над которой мне однажды пришлось работать, которая содержала такие утверждения, как:

IF (JAIL IS FULL)   MOVE JESSE_JAMES TO DODGE_CITY.

:смеяться:

Patrice T

ЛОЛ

Qendrim Istrefi

Если у вас есть лучшее представление о решении, можете ли вы написать его, чем?

OriginalGriff

- Да, могу.
Но... нет, не буду.
Это твое домашнее задание, а не мое, и ты ничему не научишься, если я буду делать его за тебя.
Попробуйте: на самом деле это совсем не сложно!

Qendrim Istrefi

Да, я работаю над этим, но мне нужна помощь ... если этот сайт не для того, чтобы помочь вам, то зачем он существует?? и вы можете видеть мой код, но мне нужен последний шаг, чтобы соединить входное значение в консольном приложении с информацией о плеере..

OriginalGriff

Мы готовы помочь, но мы не делаем все это для вас!

Qendrim Istrefi

Мне не нужно все это, я пишу код ниже.. и смотрите, что я попросил о помощи

OriginalGriff

Я и близко не подойду к этому коду.

Это C#. Современный, ой-ориентированный, полнофункциональный язык.
Так почему же, черт возьми, ты играешь с Гото?

Забудь о существовании Гото. Потеряйте способность создавать ярлыки. И не пытайтесь делать ни то, ни другое в течение по крайней мере пяти лет, к этому времени вы поймете, когда они действительно полезны, а когда превращают ваш код в груду нечитаемых спагетти.
За те 10 лет, что я кодирую на C# (а до этого еще двадцать или около того на C / C++ ) Я еще ни разу не находил необходимости использовать goto. Что должно сказать вам только сейчас, что они есть в вашем коде!

Qendrim Istrefi

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

OriginalGriff

Почему? Остальная часть вашего кода полна циклов "for", поэтому вы знаете, что существует по крайней мере один тип - есть также "foreach", "while" и "do", но вы, вероятно, знаете это.
Так зачем же вдруг бросаться в спагетти после того, как столько раз написал "правильные" петли?

Qendrim Istrefi

Да, я знаю, но я точно не знаю, как их использовать ... это я создал с помощью for loop..

OriginalGriff

while (condition)
   {
   repeat this bit
   }


do
   {
   repeat this bit
   } while (condition)


Насколько это может быть трудно, если вы свободно владеете циклами "for".

Qendrim Istrefi

Мне нужно, чтобы мое консольное приложение выглядело так в командной строке.. Если вы хотите помочь мне, чем решить эту проблему или сказать мне, что мне нужно изучать или создавать..
Дайте номера игроков: 2
Игрок 1
имя:
фамилия:
Ваше предположение номер:
Номер 1: 2
Номер 2: 2
Ряд 3: 2
Число 4: 2
Число 5: 2
Число 6: 2
Число 7: 2

Игрок 2
имя:
фамилия:
Ваше предположение номер: 1 Количество: 2
Номер 2: 2
Ряд 3: 2
Число 4: 2
Номер 5: 22
Число 6: 2
Число 7: 2
Результаты были получены
Генерируемые числа: 9 35 10 31 22 12 36

Были найдены следующие совпадения:
У игрока 1 есть 1 матч: 9
Игрок 2 имеет 3 матча: 22 12 36

OriginalGriff

Ты уже знаешь, что делать.
Читайте по количеству игроков.
Повторите это число. Цикл "для" сделает это, и вы знаете, как это сделать.
Внутри петли спросите имена.
Попросите угадать, затем повторите цикл 7 раз, чтобы прочитать цифры. И снова - петля "за".

Храните все это в экземпляре класса "Player" и храните игроков в массиве или списке, или ... все, что ты умеешь использовать.

- Я? Я бы написал метод для извлечения данных игрока и вызвал его в цикле.
В этом методе я получал имена и догадки и возвращал новый экземпляр игрока. Затем я бы обработал "выигрыш".

Так что же в этом сложного?

Тогда делай то, что я тебе сказал Для начала.