/** * Creates and wages an epic battle * * @param Programmer $programmer * @param Project $project * @return Battle */ public function battle(Programmer $programmer, Project $project) { $battle = new Battle($programmer, $project); if ($programmer->getPowerLevel() < $project->getDifficultyLevel()) { // not enough energy $battle->setBattleLostByProgrammer('You don\'t have the skills to even start this project. Read the documentation (i.e. power up) and try again!'); } else { if (rand(0, 2) != 2) { $battle->setBattleWonByProgrammer('You battled heroically, asked great questions, worked pragmatically and finished on time. You\'re a hero!'); } else { $battle->setBattleLostByProgrammer('Requirements kept changing, too many meetings, project failed :('); } $programmer->setPowerLevel($programmer->getPowerLevel() - $project->getDifficultyLevel()); } $this->em->persist($battle); $this->em->persist($programmer); $this->em->flush(); return $battle; }