예제 #1
0
 /**
  * Distributes the beans among the players.
  *
  * @param Partida $partida
  * @param array $jugadores
  * @param ObjectManager $em
  */
 public function distributeBeans($partida, $jugadores, $em)
 {
     $partidaLogic = new PartidaLogic();
     $data = $partidaLogic->calculateBeans($partida, count($jugadores));
     //array con alubias rojas y blancas
     $alubiasArray = array();
     for ($i = 1; $i <= $data['total']; $i++) {
         $letra = null;
         if ($i <= $data['aluBlanca']) {
             $letra = 'B';
         } else {
             $letra = 'R';
         }
         array_push($alubiasArray, $letra);
     }
     shuffle($alubiasArray);
     //dividimos el array en montones de "alubias por usuario" alubias
     $alubiasArray = array_chunk($alubiasArray, $partida->getAluPorUsuario());
     for ($i = 0; $i < count($jugadores); $i++) {
         $rojas = count(array_keys($alubiasArray[$i], 'R'));
         $blancas = count(array_keys($alubiasArray[$i], 'B'));
         $fUtilidad = $partidaLogic->calculateFUtilidad($rojas, $blancas, $partida);
         // Asignar a cada jugador sus alubias y función de utilidad
         $em->getRepository('BaseBundle:UserPartida')->distributeBeans($jugadores[$i]->getIdUser(), $partida->getId(), $rojas, $blancas, $fUtilidad);
     }
 }
예제 #2
0
 /**
  * Controller of games main page
  *
  * @param Request $request
  * @param int $id_partida
  * @return RedirectResponse|\Symfony\Component\HttpFoundation\Response
  */
 public function partidaAction(Request $request, $id_partida)
 {
     //$this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!');
     //Security control. Check user roles.
     $securityContext = $this->get('security.authorization_checker');
     if (false === $securityContext->isGranted('ROLE_USER')) {
         return new RedirectResponse($this->container->get('router')->generate('base_homepage'));
     }
     //set language
     $locale = $request->get('_locale');
     $request->setLocale($locale);
     $request->getSession()->set('_locale', $locale);
     $router = $this->container->get('router');
     /** @var User $user */
     $user = $this->getUser();
     $user_id = $user->getId();
     $gravatar = $this->getGravatar($user->getEmail());
     /** @var ObjectManager $em */
     $em = $this->getDoctrine()->getManager();
     try {
         /** @var Partida $partida */
         $partida = $em->getRepository('BaseBundle:Partida')->findOneById($id_partida);
         /** @var UserPartida $userPartida */
         $userPartida = $em->getRepository('BaseBundle:UserPartida')->findByIDS($user_id, $id_partida);
         if (new \DateTime('NOW') < $partida->getFin()) {
             $partidaLogic = new PartidaLogic();
             //consultar el resto de jugadores
             $jugadores = $em->getRepository('BaseBundle:UserPartida')->findAllFriends($id_partida);
             //consultar ofertas pendientes
             $oferta_recibida = $em->getRepository('BaseBundle:Ofertas')->findRecievedOffers($user_id, $id_partida, OfertaLogic::NOTRATADA);
             $oferta_recibida_enCurso = $partidaLogic->checkInProgress($oferta_recibida, $em);
             //consultar ofertas enviadas en curso.
             $oferta_enviada = $em->getRepository('BaseBundle:Ofertas')->findSentOffers($user_id, $id_partida, OfertaLogic::NOTRATADA);
             $oferta_enviada_enCurso = $partidaLogic->checkInProgress($oferta_enviada, $em);
             $acceptReject = $this->createForm(new AcceptRejectDealType());
             $delForm = $this->createForm(new DeleteDealType());
             //guardar en sesion el valor de partida
             $session = $this->container->get('session');
             $session->set('id_partida', $id_partida);
             /* Grafica de linea para usuario */
             $graphics = new GraphicsLogic();
             $evolucion = $partidaLogic->partidaEvolution($em, $user_id, $partida);
             $lineChart = $graphics->linesUserJsArray($evolucion);
             return $this->render('BaseBundle:Partida:partida.html.twig', array('partida' => $partida, 'userPartida' => $userPartida, 'jugadores' => $jugadores, 'oferta_recibida' => $oferta_recibida_enCurso, 'oferta_enviada' => $oferta_enviada_enCurso, 'acceptReject' => $acceptReject->createView(), 'delForm' => $delForm->createView(), 'lineChart' => $lineChart, 'gravatar' => $gravatar));
         }
     } catch (\Exception $e) {
         return new RedirectResponse($router->generate('base_homepage'));
     }
 }