2016-12-14 13 views
0

スイングオブジェクトからスイングオブジェクトへの使用可能なパスがあるかどうかを教えてくれる、マップ構築アプリケーション用の論理関数を作成しようとしています。スイングでオブジェクト間の可能なパスを計算するための戦略(無限大の可能性あり)?

具体的には、あるJabelから別のJlabelへのすべての可能なパスを特定したいと思います。

空のスペースは白いイメージ、壁は青のイメージ、プレーヤーのスタートはオレンジ、プレーヤーの終了は緑色で表されます。

私がしたいと思うことは、出発点から利用可能な各パスを確認することです。ゴールでパスが終了したらtrueを返し、壁で終わったら新しいスタートパスにします。私の現在のアイデアは、int型の0を入力する2次元配列を作成することです。ユーザがタイルを白以外のものに変更すると、配置されたタイルに応じて、配列の対応する点が1,2または3に変わります。次に、マップを保存しようとすると、アルゴリズムはその2次元配列を使用してマップを表し、隣接する線形パスをチェックします。

これで正しい軌道にいるのですか、それとももっと複雑ですか?

パスが分岐する可能性があるため、複雑なマップの場合、これは非常に遅くなることがあります(n^2など)。私はこれを解決するために一種のDijkestrasメソッドを使用することを考えていますが、スイングでどのように正確に行うのかもわかりません。

ゲームにはいくつかの動き制限があります。

  • 停止していない限り、方向を変更することはできません。
  • 壁やマップの端に当たっていなければ止めることはできません。

これにより、パスの数がより制限されるようになるため、いくつかのオプションが除外されます。

Make sure there is at least one way for orange to get to green.

+2

私はアルゴリズムに何の専門家だとそうあなたの質問に直接コメントすることはできませんが、私はそれはだから問題は、主に、アルゴリズムである、とSwingとは何の関係もないことを疑いもせずに述べることができます実際にはJavaとはほとんど関係がありません。ここでもアルゴリズムは全面的な問題です。 –

+0

ええ、私はそれを考えていましたが、私も気付いていない特別なツールがある場合に、スイングを使って人々が私のことを知っていることを確認したかったのです。 – Remixt

答えて

1

はい、私はあなたが正しい道の上にいると思う..あなたは衝突のために、このようなものを使用することができます:あなたは、オブジェクトを作っ

これで、クラス

constructor(){ 
 
    block = new Coordinate[length]; 
 
    path = new Coordinate[length]; 
 

 
for (int i=0;i<number_of_blocks;i++){ 
 
    if (block[i].x==path[length_of_path].x && block[i].y==path[length_of_path].y){ 
 
    //now you have a collision so go back 
 
    } 
 
    
 
    or 
 
    
 
for (int i=0;i<number_of_blocks;i++){ 
 
    if (block[i].x==path[length_of_path].x+1 && block[i].y==path[length_of_path].y){ 
 
    //now you know you have a block on the right side 
 
    }
座標

たとえば、クラス座標のオブジェクトをhに設定する必要があるelp座標を格納します。

class Coordinate { 
 
\t \t 
 
\t int x,y; 
 
\t \t 
 
\t Coordinate() { 
 
\t \t x=0; 
 
\t \t y=0; 
 
\t } 
 
\t 
 
\t Coordinate(int x, int y) { 
 
\t \t this.x = x; 
 
\t \t this.y = y; 
 
\t } 
 
}

が衝突であるかないとならば、あなたが簡単に確認することができますこの方法で、あなたが範囲外なら。次に、方向を変更して、新しい座標を新しい座標に追加します。私はこれが2次元配列を使うのが簡単だと思います。

アレイがオプションである場合は、別の方向が可能になるまで戻ります。 (前回の座標とは別に保存して、戻ってくる間に上書きする必要があります)。

GL

関連する問題