public static function hasUnfinishedShips(Battlefield $battlefield) : bool
 {
     foreach ($battlefield->getCells() as $cell) {
         if ($cell->hasFlag(CellModel::FLAG_SHIP) && !$cell->hasFlag(CellModel::FLAG_DEAD)) {
             return true;
         }
     }
     return false;
 }
 /**
  * @param Battlefield $battlefield
  *
  * @return Cell[]
  */
 public function chooseCells(Battlefield $battlefield) : array
 {
     foreach ($battlefield->getCells() as $cell) {
         if (!$cell->hasFlag(CellModel::FLAG_DEAD_SHIP) || CellModel::isShipDead($cell)) {
             continue;
         }
         return $this->processor->process($cell, $this->chooseStrategy($cell));
     }
     return [];
 }
 public function addBattlefield(Battlefield $battlefield) : self
 {
     $this->battlefields[] = $battlefield;
     if (PlayerModel::isAIControlled($battlefield->getPlayer())) {
         foreach ($battlefield->getCells() as $cell) {
             $cell->setFlags(CellModel::FLAG_NONE);
         }
     }
     return $this;
 }