2011-10-23 6 views
0

私はイメージグリッドにアルファナンバーイメージを設定しましたが、問題は50pixel(単一のセルグリッドの次元)の「モジュール」を使ってナンバーイメージを移動する方法ですフリーセルがありますか? 私はAndengineを使用しており、各番号の画像はスプライトで、グリッド画像も1つです。Andengine:ゲーム15とナンバーイメージの移動

編集:私はこのように働いている

私はこの二つの機能を持つタイルの位置を設定します。

private void getGrid() 
{ 
    boolean end  = false; 
    Random random = new Random(); 

    int x = 0; 
    while(ALDef.size() < 15 && x < 100) 
    { 
     // Genera un numero a caso, da 1 a 15 
     int numRandom  = random.nextInt(15); 

     System.out.println(x++ + ") Scelgo un numero RANDOM:" + numRandom); 

     // il numero e' gia' presente in array? 
     if (!memory.contains(numRandom)) 
     { 
      System.out.println("ADD " + numRandom); 
      // Non e' presente... 
      ALDef.add(numRandom); 
      memory.add(numRandom); 
     } 
     else 
     { 
      System.out.println("ESISTE " + numRandom); 
      memory.add(numRandom); 
     } 
    } 

    System.out.println("------------------------------"); 
} 

// =========================================================== 
// Restituisce le coordinate 
// =========================================================== 
public HashMap getCoordinates(int numInArray) 
{ 
    // Ottiene l'integer corrispondente a numInArray, ovvero il tasto 
    Integer value  = ALDef.get(numInArray); 

    int row   = 0; // riga della tabella 
    int position = 0; // posizione 
    // Definisce la riga 
    if (numInArray <= 3) 
    { 
     row   = 0; 
     position = 3 - (3 - numInArray); 
    } 
    else if (numInArray >= 4 && numInArray <= 7) 
    { 
     row  = 1; 
     position = numInArray - 4; 
    } 
    else if (numInArray >= 8 && numInArray <= 11) 
    { 
     row  = 2; 
     position = numInArray - 8; 
    } 
    else if (numInArray >= 12 && numInArray <= 15) 
    { 
     row  = 3; 
     position = numInArray - 12; 
    } 

    HashMap HM  = new HashMap(); 
    HM.put("btn" , value); 
    HM.put("x" , width * position); 
    HM.put("y" , height * row); 

    System.out.println("Colloco il numero " + (value) + " nella casella " + numInArray + "(ROW=" + row + ",POS=" + position + ")"); 

    return HM; 
} 

この2つの関数の論理はgetGridは、ArrayListの中に入れたということですタイル番号画像に対応する乱数(0〜15) getCoordinatesを使用すると、この関数はスプライトを定めるためにタイルの座標(行0,1,2,3および位置0,1,2,3)を返します。

+0

あなたは[this](http://en.wikipedia.org/wiki/Fifteen_puzzle)について話していますか? – skyuzo

+0

はい、それです! – Soul

答えて

0

セルを2D配列Cell[4][4] cellsで追跡していると仮定すると、セルを初期化してemptyCellLocation = (emptyCell.row, emptyCell.col)にすることができます。次に、ドラッグするセルを決定し、それをemptyCellLocationに移動することのみを許可することができます。 emptyCellLocationを必ず更新してください。

+0

最初の投稿で書いたスクリプトを通してタイルの位置を設定してください。 – Soul

+0

申し訳ありませんが、あなたのコードに従うことはできません。 'Tile'や' Grid'のようなオブジェクトを導入することを検討します。 – skyuzo

関連する問題