2016-05-13 16 views
0

私は小さな落書きテキストベースのゲームを作成していますが、whileループに問題があります。これが小さいwhileループとメソッドの問題(ループを正しく終了しません)

public static void elseoverseeroffice() 
    {    
     command = in.nextLine(); 

     if (command.equals("look around") || command.equals("l") || command.equals("look")) 
     { 
      overseeroffice(); 
     } 

:下図のように

二度目の入力を取得する主な方法は、メソッドの先頭に戻ってそれらを送信することである(開始ボールト内の各部屋には、方法であり、

プレイヤーが端末を検査すると、端末のループに入るようにしています(whileループが下に、他のテキストがコンテキストのためにあります。 ();クールな効果のために印刷を遅らせるだけ)

public static void overseerterminal() 
    { 
       delay(); 
        System.out.println("================================================"); 
        delay(); 
        System.out.println("=  VAULT 9 OVERSEER TERMINAL    ="); 
        delay(); 
        System.out.println("================================================"); 
        delay(); 
       System.out.println("\n > VAULT 9 OVERSEER INSTRUCTIONS"); 
        delay(); 
        if(elevator_sys==false) 
        {System.out.println(" > ACTIVATE ELEVATOR SYSTEM");} 
        else 
        {System.out.println(" > DEACTIVATE ELEVATOR SYSTEM");} 
        delay(); 
        if(saferevealed==false) 
        {System.out.println(" > REVEAL SAFE");} 
        else 
        {System.out.println(" > HIDE SAFE");} 
        System.out.println(" > EXIT"); 
        delay(); 
        delay(); 
       System.out.println("\n TYPE YOUR SELECTION"); 

       while (!command.equals("vault 9 Overseer Instructions") || !command.equals("VAULT 9 OVERSEER INSTRUCTIONS") || !command.equals("ACTIVATE ELEVATOR SYSTEM") || !command.equals("activate elevator system") || !command.equals("REVEAL SAFE") || !command.equals("reveal safe") || command.equals("exit")) 
       { 
         command = in.nextLine(); 

私は端末で行うべきいくつかのオプションを持っています。これらはすべて端末にループバックします。あなたは、この端子に入力することができ、最後のコマンドが

    else if (command.equals("exit")) 
        { 
         System.out.println("You shut down the terminal."); 
         elseoverseeroffice(); 
         break; 
        } 

である私は、ループを停止するが休憩を持っているが、それは監督の事務所前であれば、それは実行されません、と私は休憩を持っている場合それからelseoverseeroffice(); whileループの外側では、有効なものではない部屋のコマンドを入力すると、プレイヤーを端末ループに戻します。ここで

は、コマンドラインからいくつかのコピーと貼り付けたテキストです:

You press a button on the terminal, and it springs to life, displaying the  need to input a password. 
Type the password. 
excalibur 
================================================ 
=  VAULT 9 OVERSEER TERMINAL    = 
================================================ 

> VAULT 9 OVERSEER INSTRUCTIONS 
> ACTIVATE ELEVATOR SYSTEM 
> REVEAL SAFE 
> EXIT 

TYPE YOUR SELECTION 
exit 
You shut down the terminal. 
look around 

**Overseer's Office** 
This small important looking room is lit by a circular light. 


A central round desk sits in the middle of the room. 

There is an entrance to your east. 
what 
what 
INVALID COMMAND 
I am back in the terminal 
INVALID COMMAND 
exit 
You shut down the terminal. 
see 

私は何が起こっているのか分かりません。私は部屋にいるときだけ、私をターミナルの方法に戻します。私は別の部屋でミスを犯すことができます(それぞれの部屋は個人的なので方法です)、 "それはできません"と言います。

助けが必要ですか?私はこれが長いことを知っていますが、コードが必要な場合は、私に何を伝えてコメントします。私はプログラム全体をアップロードしたくありません。

P.S これは私のプログラムの後半でも起こります。このすべてのことは、プレーヤーの健康状態が0よりも高い場合に実行され、私はプレーヤーのための居場所があります。 プレイヤーが別の部屋でループしている間に入り込んだり、その後、インスタントキルルームに入ると、それらは殺されません。おそらく、私はそれが終わりのゲーム方法につながるはずです、私は確信していません。

ありがとうございました。

+0

最初のものであるべき) – emotionlessbananas

+0

うん、私はちょうど私のコードを見て... ... command.equals( "exit")の代わりにwhile(.... || command.equals( "exit"))しました –

答えて

1

あなたは下の文字でexit文を作成する必要がありますかあなたは(str.equalsIgnoreCase(「マッチする文字列」しながら、変更する必要があるのいずれか、

while ((!command.equalsIgnoreCase("vault 9 Overseer Instructions") && 
    !command.equalsIgnoreCase("activate elevator system") && 
    !command.equalsIgnoreCase("reveal safe")) || command.equalsIgnoreCase("exit")) 
+0

'equalsIgnoreCase()'を使って半分に減らしてみませんか? – Andreas

+0

さらに短く: '!command.matches("(?i)vault 9オーバーサーダー命令|エレベーターシステムを起動する| safeを明らかにする ")' – Andreas

+0

@アンドレアス私は文字列の内容も読んでいませんでした –

関連する問題