制作一个简单的基于文本的角色扮演游戏比预期的要难
Making a simple Text-Based RPG is harder than expected
Sooooo...我正在使用 JAVA 构建基于文本的角色扮演游戏,但出了点问题....
它会编译,它会 运行,但是......好吧,这很难解释。我先把代码贴上去
import java.util.Scanner;
public class XOBYT
{
public static void main(String[] args)
{
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("COPYRIGHT 2016 HARBNGER STUDIOS\nYou wake up in a broken-down alabaster\nhouse with no knowledge of who\nyou are or where you came from.\nWhich direction do you want to head? (options: NORTH, SOUTH, EAST, WEST)");
choice = scan.nextLine();{
if(choice.equals("NORTH")){System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED NORTH TO A RUN-DOWN VILLAGE. CARCASSES EVERYWHERE.\nNO SURVIVORS. I WONDER WHAT HAPPENED HERE.\nI LOOTED THE BODIES, TALOS BLESS MY SOUL. I FOUND A PISTOL AND SOME GAUZE. I CAN VIEW MY INVENTORY, HIT THE ROAD, OR LINGER AROUND.\n\n(options: INVENTORY,ROAD,LINGER)");}
choice = scan.nextLine();{
if(choice.equals("INVENTORY")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();{
}
if(choice.equals("FARTHER")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();{
}
if(choice.equals("EXPLORE")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();{}
if(choice.equals("SOUTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();{
}
if(choice.equals("EAST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();{
}
if(choice.equals("WEST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();{
}
}
}
我似乎无法弄明白,但我认为 "if" 语句相互冲突。当我 运行 它时,键入 "NORTH",然后键入 "FARTHER" 或 "EXPLORE",命令提示符变为空白。它没有做它应该做的事......除非你输入 "INVENTORY"。然后它完美地工作。如果我将 "choice equals INVENTORY" 的位置与任何其他 "Choice equals," 的位置切换,它会再次发生,除非它再次成为顶部的 "if" 语句。我在 Notepad++ 上输入这个并通过命令提示符编译。提前致谢。
编辑:根据一些评论,我忘记了我忘记在 java 中添加我是半生疏的,我需要细节。如果可以的话,请像对待婴儿一样陪我度过难关。如果太麻烦,请跳过我的问题。
编辑:我删除了大部分不需要的括号。如果我还有一些,请告诉我。这是我所拥有的,它 运行 几乎可以完美地编译。
import java.util.Scanner;
public class XOBYT
{
public static void main(String[] args)
{
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("COPYRIGHT 2016 HARBNGER STUDIOSYou wake up in a broken-down alabaster\nhouse with no knowladge of who\nyou are or where you came from.\nWhich direction do you want to head? (options: NORTH, SOUTH, EAST, WEST)");
choice = scan.nextLine();
if(choice.equals("NORTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED NORTH TO A RUN-DOWN VILLAGE. CARCASSES EVERYWHERE.\nNO SURVIVORS. I WONDER WHAT HAPPENED HERE.\nI LOOTED THE BODIES, TALOS BLESS MY SOUL. I FOUND A PISTOL AND SOME GAUZE. I CAN VIEW MY INVENTORY, HIT THE ROAD, OR LINGER AROUND.\n\n(options: INVENTORY,ROAD,LINGER)");
}
choice = scan.nextLine();
if(choice.equals("INVENTORY")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");
}
choice = scan.nextLine();
if(choice.equals("FARTHER")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");
}
choice = scan.nextLine();
if(choice.equals("EXPLORE")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");
}
choice = scan.nextLine();
if(choice.equals("SOUTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");
}
choice = scan.nextLine();
if(choice.equals("EAST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");
}
choice = scan.nextLine();
if(choice.equals("WEST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}
}
choice = scan.nextLine();
}
}
已测试。近乎完美。
看来您是从 Basic/Pascal.
这样的程序语言过来的
要允许扩展和更多房间,您应该将功能分解为 类。
位置 - 玩家所在位置的详细信息
出口 - 房间的有效出口(添加到该位置的出口列表)
物品 - 房间或库存中的任何物品
命令 - 可能是 Exit 的超类,详细说明了可以用某物做什么。
这只是一个开始的想法。然后你可以有一个包含在开始时加载的房间等的文件,这样你就可以使用一个引擎来制作多个 RPG levels/adventures。 (您甚至可以 link 在图形和声音中)
如果你想看看像 TinyMuck (C/C++) 这样的东西是如何工作的,你可能会有一个更好的主意——有一个 Java 版本的 MUD/MUCK 那里是高度面向对象的。
另外请注意,这是您的代码的清理版本
import java.util.Scanner;
public class XOBYT
{
public static void main(String[] args)
{
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("COPYRIGHT 2016 HARBNGER STUDIOS\nYou wake up in a broken-down alabaster\nhouse with no knowledge of who\nyou are or where you came from.\nWhich direction do you want to head? (options: NORTH, SOUTH, EAST, WEST)");
choice = scan.nextLine();
if(choice.equals("NORTH")){System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED NORTH TO A RUN-DOWN VILLAGE. CARCASSES EVERYWHERE.\nNO SURVIVORS. I WONDER WHAT HAPPENED HERE.\nI LOOTED THE BODIES, TALOS BLESS MY SOUL. I FOUND A PISTOL AND SOME GAUZE. I CAN VIEW MY INVENTORY, HIT THE ROAD, OR LINGER AROUND.\n\n(options: INVENTORY,ROAD,LINGER)");}
choice = scan.nextLine();
if(choice.equals("INVENTORY")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();
if(choice.equals("FARTHER")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();
if(choice.equals("EXPLORE")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();
if(choice.equals("SOUTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();
if(choice.equals("EAST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();
if(choice.equals("WEST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();
}
顺便说一下,它没有任何类型的循环来一遍又一遍地执行命令。
对于之前的错误回答,我深表歉意。我又看了一眼,我不认为那些 if 语句是嵌套的。 NORTH if 语句在 print 语句之后立即结束。因此,如果您不说 north,它就不会跳过与询问操作相关的 if 语句。
另外,我认为你的问题是当你不说库存时,它不会崩溃。它实际上只是要求另一个输入。但是因为没有提示,所以看起来好像什么都没做
我认为代码应该如下所示:(当然,您应该根据自己的目的对其进行编辑)
public static void main(String[] args){
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("text");
choice = scan.nextLine();
if(choice.equals("NORTH")){
System.out.println("text");
choice = scan.nextLine();
if(choice.equals("INVENTORY")){
System.out.println("text");
}
if(choice.equals("FARTHER")){
System.out.println("text");
}
if(choice.equals("EXPLORE")){
System.out.println("text");
}
}
}
Sooooo...我正在使用 JAVA 构建基于文本的角色扮演游戏,但出了点问题.... 它会编译,它会 运行,但是......好吧,这很难解释。我先把代码贴上去
import java.util.Scanner;
public class XOBYT
{
public static void main(String[] args)
{
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("COPYRIGHT 2016 HARBNGER STUDIOS\nYou wake up in a broken-down alabaster\nhouse with no knowledge of who\nyou are or where you came from.\nWhich direction do you want to head? (options: NORTH, SOUTH, EAST, WEST)");
choice = scan.nextLine();{
if(choice.equals("NORTH")){System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED NORTH TO A RUN-DOWN VILLAGE. CARCASSES EVERYWHERE.\nNO SURVIVORS. I WONDER WHAT HAPPENED HERE.\nI LOOTED THE BODIES, TALOS BLESS MY SOUL. I FOUND A PISTOL AND SOME GAUZE. I CAN VIEW MY INVENTORY, HIT THE ROAD, OR LINGER AROUND.\n\n(options: INVENTORY,ROAD,LINGER)");}
choice = scan.nextLine();{
if(choice.equals("INVENTORY")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();{
}
if(choice.equals("FARTHER")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();{
}
if(choice.equals("EXPLORE")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();{}
if(choice.equals("SOUTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();{
}
if(choice.equals("EAST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();{
}
if(choice.equals("WEST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();{
}
}
}
我似乎无法弄明白,但我认为 "if" 语句相互冲突。当我 运行 它时,键入 "NORTH",然后键入 "FARTHER" 或 "EXPLORE",命令提示符变为空白。它没有做它应该做的事......除非你输入 "INVENTORY"。然后它完美地工作。如果我将 "choice equals INVENTORY" 的位置与任何其他 "Choice equals," 的位置切换,它会再次发生,除非它再次成为顶部的 "if" 语句。我在 Notepad++ 上输入这个并通过命令提示符编译。提前致谢。
编辑:根据一些评论,我忘记了我忘记在 java 中添加我是半生疏的,我需要细节。如果可以的话,请像对待婴儿一样陪我度过难关。如果太麻烦,请跳过我的问题。
编辑:我删除了大部分不需要的括号。如果我还有一些,请告诉我。这是我所拥有的,它 运行 几乎可以完美地编译。
import java.util.Scanner;
public class XOBYT
{
public static void main(String[] args)
{
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("COPYRIGHT 2016 HARBNGER STUDIOSYou wake up in a broken-down alabaster\nhouse with no knowladge of who\nyou are or where you came from.\nWhich direction do you want to head? (options: NORTH, SOUTH, EAST, WEST)");
choice = scan.nextLine();
if(choice.equals("NORTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED NORTH TO A RUN-DOWN VILLAGE. CARCASSES EVERYWHERE.\nNO SURVIVORS. I WONDER WHAT HAPPENED HERE.\nI LOOTED THE BODIES, TALOS BLESS MY SOUL. I FOUND A PISTOL AND SOME GAUZE. I CAN VIEW MY INVENTORY, HIT THE ROAD, OR LINGER AROUND.\n\n(options: INVENTORY,ROAD,LINGER)");
}
choice = scan.nextLine();
if(choice.equals("INVENTORY")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");
}
choice = scan.nextLine();
if(choice.equals("FARTHER")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");
}
choice = scan.nextLine();
if(choice.equals("EXPLORE")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");
}
choice = scan.nextLine();
if(choice.equals("SOUTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");
}
choice = scan.nextLine();
if(choice.equals("EAST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");
}
choice = scan.nextLine();
if(choice.equals("WEST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}
}
choice = scan.nextLine();
}
}
已测试。近乎完美。
看来您是从 Basic/Pascal.
这样的程序语言过来的要允许扩展和更多房间,您应该将功能分解为 类。
位置 - 玩家所在位置的详细信息
出口 - 房间的有效出口(添加到该位置的出口列表)
物品 - 房间或库存中的任何物品
命令 - 可能是 Exit 的超类,详细说明了可以用某物做什么。
这只是一个开始的想法。然后你可以有一个包含在开始时加载的房间等的文件,这样你就可以使用一个引擎来制作多个 RPG levels/adventures。 (您甚至可以 link 在图形和声音中)
如果你想看看像 TinyMuck (C/C++) 这样的东西是如何工作的,你可能会有一个更好的主意——有一个 Java 版本的 MUD/MUCK 那里是高度面向对象的。
另外请注意,这是您的代码的清理版本
import java.util.Scanner;
public class XOBYT
{
public static void main(String[] args)
{
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("COPYRIGHT 2016 HARBNGER STUDIOS\nYou wake up in a broken-down alabaster\nhouse with no knowledge of who\nyou are or where you came from.\nWhich direction do you want to head? (options: NORTH, SOUTH, EAST, WEST)");
choice = scan.nextLine();
if(choice.equals("NORTH")){System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED NORTH TO A RUN-DOWN VILLAGE. CARCASSES EVERYWHERE.\nNO SURVIVORS. I WONDER WHAT HAPPENED HERE.\nI LOOTED THE BODIES, TALOS BLESS MY SOUL. I FOUND A PISTOL AND SOME GAUZE. I CAN VIEW MY INVENTORY, HIT THE ROAD, OR LINGER AROUND.\n\n(options: INVENTORY,ROAD,LINGER)");}
choice = scan.nextLine();
if(choice.equals("INVENTORY")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();
if(choice.equals("FARTHER")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();
if(choice.equals("EXPLORE")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();
if(choice.equals("SOUTH")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644\n\nI TRAVELED SOUTH AND STOPPED AT AN ABANDONED\nOUTPOST. IT HAS SOME SUPPLIES. I PICKED\nUP A PISTOL AND SOME NANITE SYRINGES. I CAN CHECK\nMY INVENTORY, MOVE FARTHER SOUTH, OR EXPLORE.\n\n(options: INVENTORY,FARTHER,EXPLORE)");}
choice = scan.nextLine();
if(choice.equals("EAST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED EAST AND STOPPED BY A DIRTY STREAM.\nIT'S FILLED WITH GARBAGE, BUT THERE ARE ALSO PLASTIC BOTTLES.\nSHOULD I FILL THEM WITH WATER OR MOVE ON?\n\n(options: FILL,MOVE)");}
choice = scan.nextLine();
if(choice.equals("WEST")){
System.out.println("\n\n\n\n--TERMINAL_LOG--\n\nI FOUND THIS HANDHELD TERMINAL LOG FIGURED I'D\nPUT IT TO SOME USE. TODAY IS, ACCORDING TO THIS, THE 15TH OF JAN, 2644.\n\nI TRAVELED WEST AND FOUND AN ABANDONED SHACK.\nSHOULD I SEARCH IT FOR LOOT OR MOVE ON?\n\n(options: SEARCH,MOVE)");}}
choice = scan.nextLine();
}
顺便说一下,它没有任何类型的循环来一遍又一遍地执行命令。
对于之前的错误回答,我深表歉意。我又看了一眼,我不认为那些 if 语句是嵌套的。 NORTH if 语句在 print 语句之后立即结束。因此,如果您不说 north,它就不会跳过与询问操作相关的 if 语句。
另外,我认为你的问题是当你不说库存时,它不会崩溃。它实际上只是要求另一个输入。但是因为没有提示,所以看起来好像什么都没做
我认为代码应该如下所示:(当然,您应该根据自己的目的对其进行编辑)
public static void main(String[] args){
String choice;
Scanner scan = new Scanner(System.in);
System.out.println("text");
choice = scan.nextLine();
if(choice.equals("NORTH")){
System.out.println("text");
choice = scan.nextLine();
if(choice.equals("INVENTORY")){
System.out.println("text");
}
if(choice.equals("FARTHER")){
System.out.println("text");
}
if(choice.equals("EXPLORE")){
System.out.println("text");
}
}
}