У меня небольшая проблема. Направления решения общей проблемы следующие:
На игровом поле 31 клетка. Первая ячейка помечена START, последняя ячейка END, а остальные ячейки пронумерованы от 1 до 29.
Есть три игрока, A, B и C. Игра начинается со всеми игроками в клетке START. Игрок А всегда ходит первым, затем В, затем С, затем А и так далее. Игра заканчивается, когда игрок достигает клетки END или за ее пределами.
Каждый ход состоит из броска 8-гранного кубика и перемещения на такое же количество клеток вперед. Однако, если на кубике выпало 4, переместитесь назад на столько же клеток (но не раньше, чем СТАРТ!); если на кубике выпало 6, игрок вообще не двигается и проигрывает следующий ход. Если игрок приземляется на клетку, занятую другим игроком, игрок, который был на этой клетке, немедленно переходит к СТАРТУ.
Входные данные: броски восьмигранного кубика для пяти игр. Каждая игра состоит из положительных целых чисел, представляющих броски, заканчивающихся 0. Первое число для игрока A, затем B, затем C, затем A и так далее. Каждая игра заканчивается, как описано выше, или когда считывается 0.
Выходные данные: для каждой игры выведите окончательные позиции игроков A, B и C. Позиции всех трех игроков должны быть правильными, чтобы получить кредит за каждый выход; частичного кредита нет.
Итак, прежде чем я начну объяснять проблему, у меня готово 80% кода. Я ни в коем случае не ищу кого-то, кто сделает мою работу, я просто ищу кого-то, кто мог бы объяснить мне стратегию, которую можно использовать для следующей части проблемы.
Я полностью завершил код для части движения в лаборатории, например, для всех случаев с кубиками от 1 до 8, за исключением 6. Теперь моя проблема в том, что я не совсем знаю, как заставить программу пропустить ход игроков И следующий ход если на костях выпало 6. Другими словами, как мне выполнить требование «пропустить ход и проиграть следующий ход»? Код, который у меня есть до сих пор (работает только для входов без числа 6), приведен ниже:
import java.util.Scanner;
public class seniorLab{
static String input;
static double parsedInput;
static int i = 0;
static int count = 1;
static int positionA;
static int positionB;
static int positionC;
static int valueOfRoll;
static boolean aAtEnd;
static boolean bAtEnd;
static boolean cAtEnd;
public seniorLab(){
}
static void labLoop(){
for (int i = 0; i < input.length(); i++){
if (input.charAt(i) != '0'){
if (i % 3 == 0){
valueOfRoll = charToNum(input.charAt(i));
positionA += valueOfRoll;
if (positionA == positionB){
positionB = 0;
}
if (positionA == positionC){
positionC = 0;
}
if (positionA >= 31){
aAtEnd = true;
break;
}
} else if (i % 3 == 1){
valueOfRoll = charToNum(input.charAt(i));
positionB += valueOfRoll;
if (positionB == positionA){
positionA = 0;
}
if (positionB == positionC){
positionC = 0;
}
if (positionB >= 31){
bAtEnd = true;;
break;
}
} else if (i % 3 == 2){
valueOfRoll = charToNum(input.charAt(i));
positionC += valueOfRoll;
if (positionC == positionA){
positionA = 0;
}
if (positionC == positionB){
positionB = 0;
}
if (positionC >= 31){
cAtEnd = true;
break;
}
}
} else if (input.charAt(i) == '0'){
break;
}
}
System.out.print("Output #" + count + ": ");
System.out.print("A-" + positionA + ", B-" + positionB + ", C-" + positionC);
}
static int charToNum(char ch){
switch (ch) {
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return -4;
case '5': return 5;
case '7': return 7;
case '8': return 8;
}
return 0;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("Line #" + count + ": ");
input = in.nextLine();
input = input.replaceAll("[,]", "");
seniorLab sL = new seniorLab();
sL.labLoop();
}
}
Спасибо за любую помощь!