0

最初にピースをクリックしてから、正方形をクリックして移動することで、グリッド内のある正方形から別の正方形にピースを移動しようとしています。

最初のアイコンの場所を保存してから、2 番目のアイコンと交換するにはどうすればよいですか?

現時点では、ピースを 1 マス左に移動するだけのこのコードを見ています。

public void actionPerformed(ActionEvent e)  
{
for ( x=0; x<8; x++)
        for( y=0; y<8; y++) {
        if(e.getSource() == board[x][y])
        ((ChessSquare)e.getSource()).swap(board[x][y-1]);
    }
}
4

2 に答える 2

1
  • これが「ドラッグ」か「ドロップ」かを示すフラグを保存します1
  • 「ドラッグ」すると元の座標が保存され、フラグが「ドロップ」に変更されます。
  • 「ドロップ」がソースの座標を読み取った場合は、それらを自由に使用し、フラグを「ドラッグ」に戻します。

  1. つまり、 a を宣言しboolean dragて設定するようなものを意味しますtrue/false必要に応じて。

..座標を保存するのに最適な場所は?

私は 2 つintの属性を使用しますが、オブジェクトを悪用したい場合はDimension、x 座標と y 座標の両方を格納できるのは 1 つだけです。

..いいえ、それをスクラップします。mKorbel で示されているようにクライアント プロパティを使用すると、はるかに「すっきり」しているように見えます。

于 2013-03-18T17:51:08.860 に答える
0
  • 「クリック」を追跡するブールフラグが必要です
  • flag = false の場合は最初のクリック、それ以外の場合は 2 回目のクリックです (ここでスワップを実行します)。

    public void actionPerformed(ActionEvent e)  
    {
        int xPos1,xPos2,yPos1,yPos2;
        if(!flag)
        {
          for ( x=0; x<8; x++)
          {
              for( y=0; y<8; y++) 
              {
                if(e.getSource() == board[x][y])
                {
                  xPos1 = x; // Source icon cordinates.
                  yPos2 = y;
                  break;
                }
              }
          }
          flag = true;
        }
        else
        {
          for ( x=0; x<8; x++)
          {
            for( y=0; y<8; y++) 
            {
              if(e.getSource() == board[x][y])
              {
                xPos2 = x;  // Target icon cordinates.
                yPos2 = y;
                break;
              }
            }
          }
    
          // Swapping code add your version of this swapping code here.
          // Swap source with target.
          Icon temp = board[xPos1][yPos1]
          board[xPos1][yPos1] = board[xPos2][yPos2];
          board[xPos2][yPos2] = temp;          
          // ----------------- End Swap----------------  
    
          flag = false; // ready for next swap operation.
      }   
    

    }

于 2013-03-18T17:52:54.863 に答える