Корабль тоже вода. Как раз вопросы про корабль решаются функцией canLoad(). canLoad() - вообще функция класса юнита. А isWater(), естественно, реагирует только на собственно тип данной клетки.