Если Fuel не равен 0 (например, FuelLeft==0 && Location!=100
), то это не вызовет событие окончания игры. Вы должны изменить его так, чтобы он выглядел следующим образом.
if (FuelLeft <= 0 && Location !=100)
Это сделает так, чтобы у вас была возможность исчерпать топливо, и он знал об этом. Когда вы проверяете расстояние:
if (distance<0) //Change to if (distance <= 0)
и
if(distance>0) //Change to if (distance >= 0)
Это должно позволить завершить GameOver.
-EDIT-
Я еще раз посмотрел на ваш код и обнаружил, что ваша проблема заключается в ваших данных. Ваш вклад никогда не повлияет на объект вашей лодки. Вам нужно будет изменить метод ввода. Может быть, получая входные данные из основной функции вместо объекта лодки.
Вам также нужно добавить цикл, который позволит вам повторять процесс «рыбалки» или «перемещения», потому что каждый раз, когда у вас кончается топливо, ваши «средства проверки ошибок» работают, потому что он говоритчто вам не хватает топлива для этого. Поскольку он работает только один раз, вы не можете выполнить требуемые спецификации, потому что у вас не может закончиться топливо.
Наконец, вы устанавливаете топливо на 5 уже в вашем коде, поэтому ваше топливо всегда будет на 5, когда вы запускаете программу. Вот что я бы предложил сделать:
сделать ввод в основной функции.
изменить свой класс лодки, чтобы сделать что-то, когда вы получитеопределенное значение. (прямо сейчас это ничего не делает, если бы вы просто изменили входные данные в объект лодки, вам нужно было бы добавить аргумент или что-то еще, чтобы он мог отслеживать, как далеко вы хотите двигаться. Вы можете сделать это, сделав переменную класса, котораясохраняет значения каждого из них, и затем объект Boat возвращает значения после его перемещения.)
Разбейте ваш код на несколько частей. Похоже, вы пытаетесь сделать слишком много вещей одновременно. Сделайте так, чтобы у вас были отдельные функции для каждой отдельной вещи. Например, Travel не обязательно должен быть int, потому что вы хотите, чтобы он перемещал лодку. Вам также не нужны все эти аргументы в командировке, потому что они уже хранятся в переменной лодки.
Убедитесь, что вы понимаете это каждый раз, когда нажимаете кнопку запуска. все сбрасывает. Это также может быть причиной того, что у вас всегда одинаковое количество топлива. Сделайте цикл вокруг входной части (это, вероятно, будет в главной функции), а затем снова заставьте функции лодки делать вещи, основанные на этом.
Я бы показал примеры всехмоего тестирования (что я и сделал), но для решения вашей проблемы мне пришлось бы переделать почти всю программу ввода и вывода, что заняло бы слишком много времени. Но вот предложение для начала:
public void Move(int distance) throws IOException
{
Travel( fuelLevel, location, fuelCapacity, distance); //distance is the distance
}
Вы можете добавить это, чтобы получить вход в вашу основную функцию:
Scanner keyboard = new Scanner(System.in);
int distance = keyboard.nextInt();
boat.Move(distance);
Куда двигатьсяЗатем функция (см. выше) переместит лодку и изменит значения переменных класса на правильные значения. Тогда вы могли бы сделать
do{
//display where the boat is with your picture
//get user input
}while(!gameOver);
Удачи в вашей игре! и я надеюсь, что это поможет!