Математический подсчёт, а не ручной - C#
Формулировка задачи:
Привет! Я тут эксперементирую. Пытаюсь сделать некое подобие детской игры фортуны. Вроде бы всё получилось, только когда я захотел увеличить количество цифр я столкнулся с тем, что вручную замучаюсь переписывать все возможные комбинации, которые могут выпасть. Я понимаю, что для этого нужно использовать цикл. Но я в монитор долблюсь и не понимаю, как это сделать. Помогите пожалуйста.
static void Main()
{
Game();
Console.ReadKey();
}
static void Game()
{
Random random = new Random();
int a, b, c;
do
{
a = random.Next(1, 4);
b = random.Next(1, 4);
c = random.Next(1, 4);
Console.WriteLine("{0} {1} {2}", a, b, c);
while (true)
{
if ((a == b && a == c))
{
if (a == 1)
{
Console.WriteLine("Единицы! Выигрыш x10.\n");
break;
}
if (a == 2)
{
Console.WriteLine("Двойки! Выигрыш x20.\n");
break;
}
if (a == 3)
{
Console.WriteLine("Тройки! Выигрыш x30.\n");
break;
}
}
if (a == (b - 1) && a == (c - 2)
|| a == (b - 2) && a == (c - 1)
|| b == (a - 1) && b == (c - 2)
|| b == (a - 2) && b == (c - 1)
|| c == (a - 1) && c == (b - 2)
|| c == (a - 2) && c == (b - 1)
)
{
Console.WriteLine("Лесенка! Выигрыш x5.\n");
break;
}
if (a == b || a == c || b == c)
{
Console.WriteLine("Пара! Выигрыш x2.\n");
break;
}
}
} while (Console.ReadKey().Key == ConsoleKey.Enter);
}
}
Кто по опытнее, чем я, то вы можете увеличить количество чисел до 10, а количество ячеек до 5. Добавить 4 и 5 совпадений подряд одинаковых чисел, плюс лесенки и остальное я просто не разбирал, что там может выпадать. Вы поймёте, что я имел ввиду.
Решение задачи: «Математический подсчёт, а не ручной»
textual
Листинг программы
static void Main()
{
Game();
Console.ReadKey();
}
static void Game()
{
Random random = new Random();
int a, b, c;
string[] outcomes = {
"Единицы! Выигрыш x10.\n",
"Двойки! Выигрыш x20.\n",
"Тройки! Выигрыш x30.\n",
"Четверки! Выигрыш x40.\n",
// TODO: Дописать до 10
// ...
};
do
{
a = random.Next(1, 4);
b = random.Next(1, 4);
c = random.Next(1, 4);
Console.WriteLine("{0} {1} {2}", a, b, c);
do
{
if ((a == b && a == c))
{
bool leave_flag = false;
for (int i = 0; i < outcomes.Length; ++i)
{
if (a == 1 + i)
{
leave_flag = true;
Console.WriteLine(outcomes[i]);
break;
}
}
if (leave_flag) break;
}
if (
a == (b - 1) && a == (c - 2)
|| a == (b - 2) && a == (c - 1)
|| b == (a - 1) && b == (c - 2)
|| b == (a - 2) && b == (c - 1)
|| c == (a - 1) && c == (b - 2)
|| c == (a - 2) && c == (b - 1)
)
{
Console.WriteLine("Лесенка! Выигрыш x5.\n");
break;
}
if (a == b || a == c || b == c)
{
Console.WriteLine("Пара! Выигрыш x2.\n");
break;
}
}while (false) ;
} while (Console.ReadKey().Key == ConsoleKey.Enter);
}