我正在制作基于文本的冒险游戏。在一个房间里,我想问玩家该做什么,如果他进门,他/她就会移动到下一个房间。如果他/她拿起手电筒,那么你想做什么?"问题重复,所以他们可以在那之后通过门。这是我的代码:
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;
现在使用此代码,它会针对您键入的任何内容重复该问题。如果" door"我不希望这种情况发生。输入。
此外,我怎样才能这样做,以便一旦拿起手电筒并重复问题,手电筒不能再次被拿起?
答案 0 :(得分:1)
这可能接近你想要的:
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;
}
}
}
}
答案 1 :(得分:1)
在这种情况下,如果您想再次询问,您应该存储信息:
boolean askAgain = true;
//...
case "door":
//...
askAgain = false;
//...
if (askAgain) {
System.out.println("...");
}
答案 2 :(得分:1)
我建议在这里使用while循环。玩家可以在房间里做任何其他事情,还是以不同的方式离开房间?如果他们只能使用'door'命令离开房间,请设置while循环以使终止因子为'door'命令。
答案 3 :(得分:0)
我不喜欢像你一样级联多个开关的想法。您应该使用state pattern和command pattern,但我认为您是编程初学者,因此我只是尝试回答您的问题。
将roomOneAction
开关语句包含在while循环中,如
boolean foundFlashlight = false;
boolean askAgain = true;
while (askAgain)
{
// question + switch statement and so on
}
如果玩家选择了闪光灯,请将foundFlashlight
设为true
。
在下一次比赛中,球员再次被问到。如果他选择手电筒,
如果值为foundFlashlight
,则必须评估true
变量,
告诉玩家他已经有手电筒,他应该再回答。
在门的情况下,只需将askAgain
设置为false.
然后终止循环。
但同样,这是不一种漂亮,干净且易于维护的方法。你应该看看一些设计模式。特别是上面提到的国家模式。