2016-04-14 2 views
0

ここに新しいユーザーがいます。Javaでプライベートクラスを設定する

私は、オブジェクト指向プログラミングクラスのテキストベースのアドベンチャーゲームのための「フレームワーク」または草稿に取り組んできました。私は私のTAにそれを示し、彼はそれが良さそうだと言ったが、私は自分のプライベートクラスに運動を入れてみるべきである。なぜ私はこれを行う必要がありますか?そして私はそれをどのようにすべきか?

ご協力いただきありがとうございます。ここで

は私のメインクラスのための私のコードです:あなたはそれ自身のクラスで動きをつけたいと思う

public class Main { 

public static void main(String args[]) { 

    // This is where we will build rooms 

    // Load inventory 
    ArrayList<String> inventory = new ArrayList<>(); 

    // Start game 
    boolean playing = true; 

    while (playing) { 

     String input = Input.getInput(); 

     // Movement commands 
     if (input.equals("north")) { 
      if (y > 0) { 
       y--; 
       Rooms.print(room, x, y); 
      } else { 
       System.out.println("You can't go that way."); 
      } 
     } else if (input.equals("south")) { 
      if (y < HEIGHT - 1) { 
       y++; 
       Rooms.print(room, x, y); 
      } else { 
       System.out.println("You can't go that way."); 
      } 
     } else if (input.equals("east")) { 
      if (x > 0) { 
       x--; 
       Rooms.print(room, x, y); 
      } else { 
       System.out.println("You can't go that way."); 
      } 
     } else if (input.equals("west")) { 
      if (x < WIDTH - 1) { 
       x++; 
       Rooms.print(room, x, y); 
      } else { 
       System.out.println("You can't go that way."); 
      } 
     } 

     // Look commands 
     else if (input.equals("look")) { 
      Rooms.print(room, x, y); 
     } 

     // Look at item commands 
     else if (input.equals("look thing")) { 
      //print item description 
     } 

     /* Take command 
     else if statement 

     Drop command 
     else if statement 

     */ 

     // Inventory commands 
     else if (input.equals("i") || input.equals("inv") 
       || input.equals("inventory")) { 
      Inventory.print(inventory); 
     } 

     // Quit commands 
     else if (input.equals("quit")) { 
      System.out.println("Goodbye!"); 
      playing = false; 

     // Catch-all for invalid input 
     } else { 
      System.out.println("Invalid input"); 
     } 
    } 
    System.exit(0); 
} 

}

+2

ようこそスタックオーバーフロー!あなたの最初の投稿でうまくいっています。私があなたに与えることができる1つのヒントは、あなたの 'System.out.println("あなたはそのように行くことはできません ");を関数にリファクタリングして呼び出すことです。この1行を数回繰り返すので、その文字列のすべての文字列を見つけるのではなく、1つの関数で簡単に後で変更することができます。 –

+0

すべてのコマンドに対して 'input'で' switch'を使うことができます。それは少し明確です。 – bcsb1001

+0

ロジックをすべてヤンクして別のクラスに入れる必要があります。その後、そのクラスのインスタンスをmainメソッドで作成し、プログラムを実行します。あなたのロジックとメインクラスは別々になります。私はあなたのTAが意味するものだと信じています。しかし、「プライベート」の部分についてはわからない。 – yogidilip

答えて

1

一つの理由は、Separation of Concernsとして知られているもの有効にすることです。この原則に従って、クラスをできるだけ明確かつユニークなものにしたいと考えています。

この方法では、プログラムのサイズや複雑さが増しても、デバッグ/開発がはるかに容易になります。

クラスをプライベートにする限り、私は必ずしもそれに同意するのか分かりません。すべての動きに関連する関数とデータを扱うクラスをmovementにするだけです。これをあなたのメインファイルとは別にあなたのプロジェクト内にある自分のファイルに入れてください。

あなたのゲームのインベントリ、攻撃(存在する場合)、設定などに同じ方法を使用することができます!私のコメントとして

は言及:私はあなたを与えることができ 一つの先端は機能にあなたのSystem.out.println("You can't go that way.");のすべてをリファクタリングし、それを呼び出すことです。この1行を数回繰り返すので、その文字列のすべての文字列を見つけるのではなく、1つの関数で簡単に後で変更することができます。

public static void moveError() { 
    System.out.println("You can't go that way."); 
} 

コメントの数人は、switch文に移行することを推奨しています。私はこのアプローチに同意します。見るだけでは簡単ではありません。しかし、維持し易い。あなたは、あなたのコード内の特定の機能を表す文字列/整数/文字として渡された「コマンド」具体的な使用することができます。

switch (direction) { 
    case "up": 
     // code to move up and error handle 
     break; 
    case "down": 
     // code to move down and error handle 
     break; 
} 

ます。また、アイテムを拾うようなもののために特定のコマンドを実行する設定を調整する、またはあなたが思い描く他にどんなことができます。

0

あなたのTAがプライベートクラス内で囲むように求めているルームムーブメント機能は、あなたのアウタークラスと完全に関連しているため、独立していても意味がありません。

関連する問題