Я думаю, что ваш вопрос указывает на причину, по которой вы находите это трудным.Вы пытаетесь решить слишком много в одном месте, и это становится ошеломляющим.Вы не хотите создавать один метод для этого.Вы захотите создать несколько.Начните с разложения проблемы на составные части.
Примечание. Я не подхожу к этому с точки зрения ОО, чтобы облегчить анализ ответа.Я бы посоветовал вам подумать о дизайне более подробно.
Требование 1: бросает кубик - 4, 6, 8, 10 или 12-гранный
Хорошо - нам нужен метод, подобный следующему:
int Roll (int сторон);
В основном Roll просто возвращает случайное значение между 1 и сторонами (включительно).
Требование 2: Можно свернуть до десяти кубиков этого типа
Вероятно, это цикл for.
Требование 3: Еслиболее половины кубиков равны единице, напечатайте им сообщение о том, что они разоряются и завершают программу
Это требование подразумевает, что вы сохраняете результаты каждого вызова Roll в коллекции - например,List или int [] (массив целых чисел).
Далее говорится, что вы выполняете итерацию по этой коллекции и подсчитываете число бросков, равное «1».Если количество больше половины общего количества бросков, чем вы заканчиваете программу.Подсчет прост (для вас лучше всего подойдет цикл или foreach), и вы знаете, сколько было сделано бросков (как по количеству предметов в коллекции, так и потому, что у вас был счетчик для цикла for, когда были сделаны броски).так что разделите и сравните.
Требование 4: Если какой-либо из кубиков соответствует типу броска кубика, возьмите самое высокое значение из группы. Также перебросьте кубик, равныйзначение типа броска кубика.
Опять же - вам нужно перебрать набор результатов и выполнить запрос операции. Я бы не стал пытаться «оптимизировать» ваше решение, объединив это правило спредыдущее правило - оно просто свернет решение без реальной выгоды.