anchor.diff:  const GRID_COLS = 8;   // grid columns
   const GRID_WIDTH = 60;  // grid cell width
   const GRID_HEIGHT = 60; // grid cell height
  +
  +
   
   // game states
   const WAITING = 0;      // Waiting for player move
  
positive.code:     }
    }
  
    void dropProduct(x1, y1, x2, y2) {
      ++dropping_products;
      Product product = getGrid(x1, y1);
      setGrid(x1, y1, null);
      var tween = new Tween(product, 0.5, TransitionFunction.linear)
        ..animate.y.to(y2*GRID_HEIGHT)
        ..onComplete = () => onDropProductComplete(product);
      _juggler.add(tween);
  
negative.code:           ..x = x*GRID_WIDTH
            ..y = -(i+1)*GRID_HEIGHT;
          this.addChild(product);
          var tween = new Tween(product, DROP_TIME*col_drop_count, TransitionFunction.linear)
            ..animate.y.to((col_drop_count-i-1)*GRID_HEIGHT)
            ..onComplete = () => onDropProductComplete(product);
          _juggler.add(tween);
  