예제 #1
0
 /**
  * Inscrit un joueur à la partie
  * @param Joueur $joueur
  * @return bool Succès de l'inscription. false si pas possible
  */
 public function inscrireJoueur(Joueur $joueur)
 {
     $ret = false;
     $caseDepart = null;
     foreach ($this->getHexas()->shuffle() as $hexa) {
         /** @var Hexa $hexa */
         if (Terrains::hexaAutoriseDemarrage($hexa)) {
             foreach ($hexa->voisins() as $voisin) {
                 /** @var Hexa $voisin */
                 if ($voisin->getIdTerritoire() != 0 || $voisin->getIdJoueur() != 0) {
                     continue 2;
                 }
             }
             // Données de la case capitale et de ses voisines
             $hexa->setIdJoueur($joueur->getId());
             $hexa->setIdTerritoire($joueur->getId());
             foreach ($hexa->voisins() as $voisin) {
                 /** @var Hexa $voisin */
                 $voisin->setIdTerritoire($joueur->getId());
                 $voisin->save();
             }
             $hexa->setNom($joueur->getNom() . ' Prime');
             $hexa->setPopulation(1);
             $hexa->save();
             // Données du joueur
             $joueur->setIdPartie($this->getId());
             $joueur->setTresor(1000);
             $joueur->setIdCapitale($hexa->getId());
             $joueur->save();
             $ret = true;
             break;
         }
     }
     return $ret;
 }
예제 #2
0
파일: Jeu.php 프로젝트: eleparquier/nj
 public function transfertUnite()
 {
     $ret = array('error' => 0, 'errorMsg' => '');
     if (!isset($_POST['idUnite']) || !isset($_POST['idQgDest'])) {
         $ret['error'] = 1;
         $ret['errorMsg'] = 'Champs manquants';
         echo json_encode($ret);
         exit;
     }
     if (!$this->checkDroit(Droit::LOGGE_PARTIE)) {
         $ret['error'] = 2;
         $ret['errorMsg'] = 'Pas le droit';
         echo json_encode($ret);
         exit;
     }
     $unite = UniteStore::getById($_POST['idUnite']);
     if (is_null($unite)) {
         $ret['error'] = 3;
         $ret['errorMsg'] = 'Unité inexistante';
         echo json_encode($ret);
         exit;
     }
     $ret['idUnite'] = $unite->getId();
     $qgDest = QgStore::getById($_POST['idQgDest']);
     if (is_null($qgDest)) {
         $ret['error'] = 4;
         $ret['errorMsg'] = 'QG Destination inexistant';
         echo json_encode($ret);
         exit;
     }
     if ($unite->getQg()->getIdJoueur() != SessionBusiness::getCookieSession()->getIdJoueur() || $qgDest->getIdJoueur() != SessionBusiness::getCookieSession()->getIdJoueur()) {
         $ret['error'] = 5;
         $ret['errorMsg'] = 'Transferts autorisés seulement sur les Qgs du joueur';
         echo json_encode($ret);
         exit;
     }
     if (is_null($unite->getQg()->getHexa()->quelVoisin($qgDest->getHexa()))) {
         $ret['error'] = 6;
         $ret['errorMsg'] = 'Transferts autorisés seulement entre des cases voisines';
         echo json_encode($ret);
         exit;
     }
     if (!Terrains::travAutorisee($unite, Terrains::typeTraversee($unite->getQg()->getHexa(), $qgDest->getHexa()))) {
         $ret['error'] = 7;
         $ret['errorMsg'] = 'Traversée non autorisée pour cette unité';
         echo json_encode($ret);
         exit;
     }
     if ($qgDest->getUnites()->count() >= $qgDest->getNbMaxUnites()) {
         $ret['error'] = 8;
         $ret['errorMsg'] = 'Le Qg de destination est déjà à son maximum d\'unités';
         echo json_encode($ret);
         exit;
     }
     if ($qgDest->getIdTypeQg() != $unite->getQg()->getIdTypeQg()) {
         $ret['error'] = 9;
         $ret['errorMsg'] = 'Le Qg de destination doit être du même type que le Qg de l\'unité (terrestre, naval, aérien)';
         echo json_encode($ret);
         exit;
     }
     /*
      * Mise en transfert de l'unité
      */
     $qgSource = $unite->getQg();
     $unite->setIdQgTransfert($qgDest->getId());
     $unite->save();
     /*
      * Annulation des missions des Qgs concernés
      */
     $ret['resetTraj'] = false;
     $ret['idQgDest'] = $qgDest->getId();
     $ret['idQgSource'] = $qgSource->getId();
     foreach (array($qgSource, $qgDest) as $qg) {
         /** @var Qg $qg */
         if ($qg->isMissionMouvement()) {
             $qg->deleteTraj();
             $qg->setIdTypeMission(Missions::REPOS);
             $qg->save();
             $ret['resetTraj'] = true;
         }
     }
     echo json_encode($ret);
 }
예제 #3
0
 /**
  * Dit si le Qg peut passer entre les 2 hexas
  * @param Hexa $hexa1 Hexa de départ
  * @param Hexa $hexa2 Hexa de destination
  * @param bool $zdcBloquante Dit si les ZDC et blocus sont bloquants
  * @return bool
  */
 public function canPass(Hexa $hexa1, Hexa $hexa2, $zdcBloquante = false)
 {
     foreach ($this->getUnites() as $unite) {
         /** @var Unite $unite */
         if ($unite->getIdQgTransfert()) {
             continue;
         }
         if (!Terrains::depAutorise($unite, $hexa2)) {
             return false;
         }
     }
     $traversee = Terrains::typeTraversee($hexa1, $hexa2);
     foreach ($this->getUnites() as $unite) {
         /** @var Unite $unite */
         if ($unite->getIdQgTransfert()) {
             continue;
         }
         if (!Terrains::travAutorisee($unite, $traversee)) {
             return false;
         }
     }
     if ($zdcBloquante && $this->inZdc($hexa2)) {
         return false;
     }
     return true;
 }
예제 #4
0
 /**
  * Renvoie le type de terrain de la case
  * @return int
  */
 public function getTypeTerrain()
 {
     return Terrains::getType($this);
 }