@Override
  public void mouseMoved(MouseEvent e) {

    mCurrentMouseLocation = e.getPoint();
    if (GameConfig.isGameStart && !GameConfig.isPutWhiteBall) {
      if (isImpact() || !canPutWhiteBall(SnookerServer.transformBallPoint(e.getPoint()))) {
        if (getCursor().getName() != GameConfig.HANDF_CURSOR_NAME) setCursor(ImageRes.handf_cursor);
        mWhiteBall.setmLocation(SnookerServer.transformBallPoint(e.getPoint()));
      } else {
        if (getCursor().getName() != GameConfig.HAND_CURSOR_NAME) {
          setCursor(ImageRes.hand_cursor);
        }
        mWhiteBall.setmLocation(SnookerServer.transformBallPoint(e.getPoint()));
      }
    }
    if (GameConfig.isGameStart && GameConfig.isPutWhiteBall) {
      if (getCursor().getName() != GameConfig.CROSS_CURSOR_NAME) setCursor(ImageRes.cross_cursor);
    }
  }
  /** 计算小球下一时刻的位置 */
  private void calcBallLocatopn() {

    for (int i = 0; i < mBalls.size(); i++) {
      for (int j = i + 1; j < mBalls.size(); j++) {
        if (mBalls.get(i).ismMove() || mBalls.get(j).ismMove())
          SnookerServer.impact(mBalls.get(i), mBalls.get(j));
      }
    }
    for (Ball ball : mBalls)
      if (ball.ismMove()) {
        ball.move(10);
        if (SnookerServer.isInHole(ball)) {
          ball.setmMove(false);
          ball.setmShow(false);
          ball.setmSpeed(new Speed(0, 0));
          ball.setmLocation(new BallLocation(100000, 1000000));
        }
      }
    if (allStop()) {
      GameConfig.isReady = false;
    }
  }
 @Override
 public void mouseReleased(MouseEvent e) {
   System.out.println(e.getPoint().toString());
   // TODO Auto-generated method stub
   if (GameConfig.isGameStart && !GameConfig.isPutWhiteBall) {
     if (getCursor().getName() == GameConfig.HANDF_CURSOR_NAME) return;
     if (getCursor().getName() == GameConfig.HAND_CURSOR_NAME) GameConfig.isPutWhiteBall = true;
     setCursor(ImageRes.cross_cursor);
     return;
   }
   if (GameConfig.isGameStart && GameConfig.isPutWhiteBall && !GameConfig.isReady) {
     GameConfig.isReady = true;
     mWhiteBall.setmSpeed(
         Speed.getOrigin(
             mWhiteBall.getmLocation(),
             SnookerServer.transformBallPoint(getTrueLocation(e.getPoint())),
             GameConfig.V));
   }
 }
 /**
  * 判断母球是否和其他球有碰撞,在白球是用到
  *
  * @return
  */
 private boolean isImpact() {
   for (int i = 1; i < mBalls.size(); i++) {
     if (SnookerServer.isImpact(mWhiteBall, mBalls.get(i))) return true;
   }
   return false;
 }