private boolean isAnyWay()
	{
		if (mToPlace.equals(NO_SELECTED) || mFromPlace.equals(NO_SELECTED))
		{
			return false;
		}
		
		mBallList.clear();	// б,Է·
		Dimension mCurPlace = new Dimension(mFromPlace);	// õʼλ
		int whereGo[][] = new int[FaceStyle.BALL_HNUM][FaceStyle.BALL_VNUM]; // ƶ㷨
				
		for (int i=0; i<FaceStyle.BALL_HNUM; i++)
		{
			for (int j=0; j<FaceStyle.BALL_VNUM; j++)
			{
				if (mWhatBall[i][j] == BallColor.EMPTY)
				{
					whereGo[i][j] = 0;	// λ0
				}
				else
				{
					whereGo[i][j] = 1; // ǿλ1
				}
			}
		}
		
		mBallList.addLast(new Dimension(mCurPlace));	// ѵǰ
		whereGo[mCurPlace.width][mCurPlace.height] = -1;	// ʱظ·
		
		int hdis = 0;
		int vdis = 0;
		
		while (true)
		{
			hdis = mToPlace.width - mCurPlace.width;
			vdis = mToPlace.height - mCurPlace.height;
			if ((hdis == 0 && Math.abs(vdis) == 1) || (vdis == 0 && Math.abs(hdis) == 1))
			{
				mBallList.addLast(new Dimension(mToPlace));	// ҵ·
				return true;
			}
			
			if (mCurPlace.width + 1 < FaceStyle.BALL_HNUM &&
				whereGo[mCurPlace.width+1][mCurPlace.height] == 0)	// 
			{
				mBallList.addLast(new Dimension(mCurPlace.width+1, mCurPlace.height));
				mCurPlace.setSize(mCurPlace.width+1, mCurPlace.height);
				whereGo[mCurPlace.width][mCurPlace.height] = -1;
				
			}
			else if (mCurPlace.height + 1 < FaceStyle.BALL_VNUM &&
					whereGo[mCurPlace.width][mCurPlace.height+1] == 0) // 
			{
				mBallList.addLast(new Dimension(mCurPlace.width, mCurPlace.height+1));
				mCurPlace.setSize(mCurPlace.width, mCurPlace.height+1);
				whereGo[mCurPlace.width][mCurPlace.height] = -1;
				
			}
			else if (mCurPlace.height - 1 >= 0 &&
					whereGo[mCurPlace.width][mCurPlace.height-1] == 0) // 
			{
				mBallList.addLast(new Dimension(mCurPlace.width, mCurPlace.height-1));
				mCurPlace.setSize(mCurPlace.width, mCurPlace.height-1);
				whereGo[mCurPlace.width][mCurPlace.height] = -1;
				
			}
			else if (mCurPlace.width - 1 >= 0 &&
				whereGo[mCurPlace.width-1][mCurPlace.height] == 0)	// 
			{
				mBallList.addLast(new Dimension(mCurPlace.width-1, mCurPlace.height));
				mCurPlace.setSize(mCurPlace.width-1, mCurPlace.height);
				whereGo[mCurPlace.width][mCurPlace.height] = -1;
				
			}
			else	// ·,,ȥ
			{
				if (mBallList.size() == 1)
				{
					// died
					return false;
				}
				else
				{
					// 
					mBallList.removeLast();
					mCurPlace.setSize((Dimension) mBallList.getLast());
				}
			}
		}
	}