2016-04-14 12 views
-2

Sooooo ...我正在用JAVA建立一個基於文本的RPG遊戲,並且有些東西是錯誤的...... 它會編譯,它會運行,但是......好吧,這很難解釋。我會先把代碼放好。製作一個簡單的基於文本的RPG比預期的更難

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 equal 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(); 
    } 
} 

經過測試。完美的工作。

+4

不要灑'{}'隨機在你的代碼。學會正確地格式化/縮進,並在發佈前完成。 – Mat

+0

這可以編譯? – bmarkham

+0

是的,但不是我想要的。這就是爲什麼我把它發佈在這裏。 –

回答

1

它看起來像來自像Basic/Pascal這樣的程序語言。

要允許擴展和更多的房間,你應該把功能分解成類。

地點 - 詳細資料的位置的球員是

退出 - 從房間的有效退出(添加到退出列表中的位置)

項目 - 在房間或空間內所有項目

命令 - 可能是Exit的超類,詳細說明可以用什麼做什麼。

這只是一個開始的想法。然後,您可以創建一個包含開始時加載的房間等的文件,這樣您就可以使用一個引擎來製作多個RPG級別/冒險。 (你甚至可以鏈接到圖形和聲音)

如果你想看看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(); 
    } 

的清理版本其中的方式可是沒有任何形式的循環來輪一遍又一遍地做的命令。

+0

我明白了......因此,爲房間,出口等分別開班......你會怎麼做?你怎麼定義房間?抱歉給您帶來不便......只是在學習算術的同時嘗試進入微積分。 –

+0

我認爲一個更好的方法是讓你看看這個項目是如何實現的https://github.com/ProjectMoon/ringmud它們將房間和描述等存儲在數據庫/配置文件中。例如ROOM,1,這是一個荒蕪的沙漠,你可以看到{items}並且有{exits}退出\ nROOM,2,無限的入口,你已經死了\ nEXIT,1,一個閃爍的門戶,你可以看到裏面有奇怪圖像的閃光門戶,1,2 \ n退出定義是退出ID,短desc,看看desc,房間出口在,房間出口去 –

+0

還有其他參數可以添加,但我會讓你解決它 –

0

對不起之前我的不正確答案。我再看一眼,我不認爲這些if語句是嵌套的。 NORTH if語句在打印語句後立即結束。所以如果你不向北方說,它不會跳過關於詢問行爲的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"); 
    } 
    } 
} 
+0

謝謝。這工作。我仍然必須把「選擇=」每個「如果」的陳述,對嗎? –

+0

@Similar Paradox nope。在用戶選擇北方後,您只需要一個輸入。然後程序檢查輸入是否存在多種可能性。否則它會多次要求用戶輸入。另外,我建議在最後添加一個else語句來處理如果用戶輸錯命令會發生什麼情況。 – coolioasjulio