Я делаю текстовую приключенческую игру. В одной комнате я хочу спросить у игрока, что делать, и если он войдет в дверь, он/она перейдет в следующую комнату. Если он подберет фонарик, "что вы хотите сделать?" вопрос повторяется, после чего они могут пройти через дверь. Вот мой код:
case 1:
System.out.println("What do you want to do? Type 'door' to go through the door or 'flashlight' to pick up the flashlight.");
String roomOneAction = input.nextLine();
switch(roomOneAction) {
case "flashlight":
System.out.println("Picked up flashlight.");
//repeat what do you want to do? question
break;
case "door":
System.out.println("You open the door.");
//continue plot, don't repeat question
break;
default:
System.out.println("Error");
// repeat what do you want to do? question
break;
}
break;
С этим кодом прямо сейчас, он повторяет вопрос для всего, что вы набираете. Я не хочу, чтобы это произошло, если набрана "дверь".
Кроме того, как я могу сделать это так, что как только фонарик будет поднят и вопрос будет повторен, фонарик не может быть поднят во второй раз?
В этом случае вам, вероятно, следует сохранить информацию, если вы хотите снова спросить:
boolean askAgain = true;
//...
case "door":
//...
askAgain = false;
//...
if (askAgain) {
System.out.println("...");
}
Я бы рекомендовал использовать цикл while здесь. Может ли игрок делать что-либо еще в комнате или покидать комнату по-другому? Если они могут покинуть комнату, используя команду "дверь", настройте цикл while, чтобы конечным фактором являлась команда "дверь".
Это может быть близко к тому, что вы хотите:
import java.util.Scanner;
public class Game {
private static boolean flashlightPicked = false;
private static boolean doorEntered = false;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (true) {
int x = 1;
switch (x) {
case 1:
System.out
.println("What do you want to do? Type 'door' to go through the door or 'flashlight' to pick up the flashlight.");
String roomOneAction = input.nextLine();
switch (roomOneAction) {
case "flashlight" :
if(!flashlightPicked){
System.out.println("Picked up flashlight.");
flashlightPicked = true;
} else {
System.out.println("Already picked up flashlight!");
}
// repeat what do you want to do? question
break;
case "door":
if(!doorEntered){
System.out.println("You open the door.");
doorEntered = true;
}else{
System.out.println("Already opened the door!");
}
// continue plot, don't repeat question
break;
default:
System.out.println("Error");
// repeat what do you want to do? question
break;
}
}
}
}
private static
main должен создать new Game()
и позволить ей делать свою работу.
door
проеме? Из-за while (true)
оператор swtich вводится снова (и снова).
Мне не нравится идея каскадирования нескольких переключателей, как вы это делали. Вы должны использовать шаблон состояния и шаблон команды, но я предполагаю, что вы начинающий программист, поэтому я просто попытаюсь ответить на ваш вопрос.
Оберните roomOneAction
в цикле while, например
boolean foundFlashlight = false;
boolean askAgain = true;
while (askAgain)
{
// question + switch statement and so on
}
если игрок выбирает вспышку, установите для foundFlashlight
значение true
.
В следующем прогоне игрок снова спрашивает. Если он выбирает фонарик, вам нужно оценить переменную foundFlashlight
, если значение true
, сообщите игроку, что у него уже есть фонарик, и он должен ответить снова.
В случае с дверью просто установите для параметра askAgain
значение false.
Тогда цикл завершается.
Но опять же, это не хороший, чистый и простой в обслуживании подход. Вы должны взглянуть на некоторые шаблоны проектирования. Особенно вышеупомянутый государственный шаблон.