public Object[] update(final int i, final int j)
   {
      int gridValue = seaGrid[i + 1][j + 1];

      Logger.debug("gridValue:" + gridValue);

      // You hit that before
      if (gridValue < 0 || gridValue == AbstractFleedModel.MISS) {
         return new Object[]{AGAIN, null};
      }

      if (gridValue > 0 && gridValue < NUMBER_OF_SHIPS + 1) {
         Ship ship = ships[gridValue - 1];

         // No need to wast bombs ;)
         if (ship.isDestroyed()) {
            return new Object[]{AGAIN, null};
         }

         //boom beng:
         ship.hit();

         if (ship.isDestroyed()) {
            shipsDestroyed++;
            for (int m = 0, ix = ship.getStartI(), jy = ship.getStartJ(); m < ship.getSize(); m++) {
               seaGrid[ix][jy] = Math.abs(gridValue);
               ix += (ship.getDir() == 0) ? 1 : 0;
               jy += (ship.getDir() != 0) ? 1 : 0;
            }
            listener.onTotalUpdate(this);
            return new Object[]{DESTROYED, ship};
         } else {
            seaGrid[i + 1][j + 1] = -gridValue;
            listener.onPartialUpdate(this, i, j, AbstractFleedModel.HIT);
            return new Object[]{HIT, null};
         }
      }

      seaGrid[i + 1][j + 1] = AbstractFleedModel.MISS;
      listener.onPartialUpdate(this, i, j, AbstractFleedModel.MISS);
      return new Object[]{MISS, null};
   }