public static function instance(Player $player, Game $game) { $strategyRepository = new AiStrategyRepository(); $strategy = $strategyRepository->getOneById($player['ai_strategy']); $strategyClassName = $strategy['title']; $role = $player->getRoleObject(); if ($strategyClassName == 'Passive') { if ($role->getIsSheriff()) { // 2 players alive in game // or only bandits against me // or $me->getActualLives() <= $me->getMaxLives() / 2 $strategyClassName = 'Normal'; } elseif ($role->getIsRenegard()) { // 2 players alive in game // $game->getSheriff()->getActualLives() <= $game->getSheriff()->getMaxLives() / 2 // or $me->getActualLives() <= $me->getMaxLives() / 2 $strategyClassName = 'Normal'; } elseif ($role->getIsBandit()) { // $game->getSheriff()->getActualLives() <= $game->getSheriff()->getMaxLives() / 2 // or $me->getActualLives() <= $me->getMaxLives() / 2 $strategyClassName = 'Normal'; } elseif ($role->getIsVice()) { // $game->getSheriff()->getActualLives() <= $game->getSheriff()->getMaxLives() / 2 // or $me->getActualLives() <= $me->getMaxLives() / 2 $strategyClassName = 'Normal'; } } $className = $strategyClassName . $role['title'] . 'Strategy'; return new $className($player, $game); }
protected function run() { if ($this->check == self::OK) { $colorRepository = new ColorRepository(); $count = $colorRepository->getCountAll(); $randomColor = mt_rand(1, $count); $userParams = array('username' => 'AI-' . str_pad(mt_rand(0, 999), 3, 0, STR_PAD_LEFT), 'color' => $randomColor); $userRepository = new UserRepository(); $newUser = $userRepository->getOneByUsername($userParams['username']); if (!$newUser) { $newUser = new User($userParams); $newUser = $newUser->save(TRUE); } $playersCount = GameUtils::getPosition($this->game); $strategyRepository = new AiStrategyRepository(); $strategyRepository->addOrderBy(array('RAND()' => '')); $strategy = $strategyRepository->getOneBy(); $params = array('game' => $this->game['id'], 'user' => $newUser['id'], 'seat' => GameUtils::getSeatOnPosition($playersCount), 'ai_strategy' => $strategy['id']); $player = new Player($params); $player->save(); } }