1

さて、私が作成しているこの2DタイルRPGがあります。これがライブアプレットです:http: //mystikrpg.com/so/

コードはhttp://mystikrpg.com/so/にもあります

とにかく、コードを調べると、タイル24(壁)しかブロックできないようです...

素晴らしい賢明なJavaの専門家の中に、ブロックされた複数のタイルを作成する方法を知っている人はいますか?

必要なファイルを圧縮して、必要に応じて再生できるようにしました:http: //mystikrpg.com/so/2drpg.zip

複数のタイルをブロックできるといいのですが...:)

ありがとう

4

2 に答える 2

2

問題のコードの概要は次のとおりです。

int[][] board; // row tiles for ultimate mapping experience!

private static int BLOCKED = 24;

public boolean blocked(int tx, int ty) {
  return board[ty][tx] == BLOCKED;
}

「24」のみをブロックしていることを明確に示しています。これを行うことができるいくつかのアプローチがあります。あなたのコードを見ると、私はJon Skeetに同意します。それはあまりオブジェクト指向ではなく、コードとデザインを支援するためにカプセル化とオブジェクトを使用する方が良いということです。しかし、あなたの質問に答えるには、ブロックされたタイルをHashSetに入れて、それらにタイルが含まれているかどうかを確認し、それを「ブロック可能」として返すだけです。例えば

private static final HashSet<Integer> BLOCKED_TILES = new HashSet<Integer>();
static {
  BLOCKED_TILES.add(24);
  BLOCKED_TILES.add(1);
  //add more tiles here
}

public boolean blocked(int tx, int ty) {
  return BLOCKED_TILES.contains(board[ty][tx]);
}
于 2010-07-09T06:17:18.203 に答える
1

ええと、ブロックされているタイルのコレクションまたは配列がありblocked()、指定されたタイルがそのコレクションにあるかどうかを確認するためにメソッドを変更しますか?

より良い方法は、ボードを整数にするだけでなく、Tileそのタイプのタイルに関するすべてを知っているクラスのインスタンスへの参照(そのイメージ、ブロックされているかどうか、その他の関連するもの)です。そうすれば、タイルに関する情報を1つの場所にカプセル化できます。次に、特定のタイルに関する情報を簡単な方法で要求できます。

于 2010-07-09T06:02:52.760 に答える