В настоящее время я пишу Risk-игру на Java и пытаюсь атаковать часть кода.
Для тех из вас, кто не знает, как работает ход атаки в игре на риск, я кратко объясню: здесь мы находимся в случае, когда атакующий использует 3 отряда для атаки на противостоящую территорию с 2 отрядами для ее защиты , За каждое подразделение, участвующее в бою, будет брошен кубик. Таким образом, это означает, что атакующий собирается бросить 3 кубика, а защитник - 2 кубика.
Затем цель состоит в том, чтобы сохранить 3 значения кубиков атакующего, расположить их в порядке убывания, затем сделать то же самое для 2 значений защитника и сравнить два списка, чтобы определить, кто выиграл, а кто проиграл бой (для Дополнительную информацию о том, как работает атака риска, пожалуйста, проверьте на этом сайте: https://www.wikihow.com/Play-Risk)
Теперь возникает проблема. В моей игре на риск у меня есть 3 различных типа юнитов: стрелок (в моем коде карабинер, потому что я француз), десантник и стрелок.
Во время боя единственное важное различие между этими 3 юнитами состоит в том, что границы игральных костей различны:
- Стрелок: кости будут катиться от 1 до 6 включительно
- Десантник: от 2 до 7 в комплекте
- Стрелок: от 4 до 9 включительно.
То есть у стрелка больше шансов выиграть бой.
В моем классе игры в кости есть два важных метода: первый - это бросание кости и возвращение результата:
public int resultatdes (){
//borneinf = lower possible value of the dice
//bornesup = higher possible value of the dice
int resultat = 0;
Random rand = new Random();
resultat = rand.nextInt(this.bornesup) + this.borneinf ;
return resultat;
}
Второй метод - это тот, который возвращает результат боя (количество единиц, потерянных для атакующего и защитника). Здесь я просто собираюсь показать вам случай, когда атакующий атакует 1 стрелком, 1 десантником и 1 стрелком, поскольку возможностей слишком много, показывать их все было бы неуместно:
Случай, когда атакующий использует 1 стрелка, 1 десантника и 1 стрелка:
public void resultat_combat(ArrayList<Integer> attaque, ArrayList<Integer> defense ){
//a1 = number of rifleman for the attacker
//a2 = number of paratrooper for the attacker
//a3 = number of gunner for the attacker
//d1, d2, d3 are the same but for the defender
attaque.addAll(Arrays.asList(a1, a2, a3));
defense.addAll(Arrays.asList(d1, d2, d3));
if (a1 + a2 + a3 == 3 && a1 == 1 && a2 ==1 && a3 == 1){
Des de1 = new Des(1,6); //creating dice for the rifleman
Des de2 = new Des(2,7); //creating dice for the paratrooper
Des de3 = new Des(4,9); //creating dice for the gunner
int a = de1.resultatdes(); //rolling the dices
int b = de2.resultatdes();
int c = de3.resultatdes();
//Here there should be a code to store the results in a list, order it in decreasing order and compare it to the defense list
}
То же самое, но для защитника, где он защищается двумя стрелками:
if (d1 + d2 + d3 == 2 && d1==2){
Des de4 = new Des(1,6);
Des de5 = new Des(1,6);
int d = de4.resultatdes();
int e = de5.resultatdes();
}
МОЙ ВЫПУСК:
Когда я храню результаты игры в кости в списке или в таблице, я знаю, что первое значение в списке - это одно из стрелка, второе - у десантника, а третье - у стрелка.
НО, когда я сортирую список в порядке убывания, я теряю след, какой результат игры в кости соответствует какой единице.
Поэтому я могу сказать, кто выиграл между кубиком атакующего и кубиком защитника, но я не могу знать, какой тип юнита погиб, потому что я не могу связать значение кубика, отсортированного в списке, с юнитом.
Вы знаете, как это сделать?
Заранее спасибо, что нашли время прочитать этот длинный вопрос, я старался быть максимально ясным, хотя английский не является моим родным языком.