Пример #1
1
 public function doMoveThis()
 {
     $plateau = $this;
     $from = getValue('case_from', null);
     $to = getValue('case_to', null);
     $tours = Tours::createFrom(partie()->getData()->tours);
     $regles = $this->regles;
     return self::doMove($plateau, $from, $to, $tours, $regles);
 }
Пример #2
1
 public function ajax_move()
 {
     $this->initRegles();
     $this->initPlateau();
     $partie_data = partie()->getData();
     $coup = $this->plateau->doMoveThis();
     if (!is_null($partie_data->prise_multiple) && ($pion = $partie_data->prise_multiple->pion)) {
         if ($pion->id != $coup->pion->id || !$coup->aMange()) {
             return self::refus(array('Vous devez continuer votre prise multiple.'));
         }
     }
     if (is_array($coup)) {
         return self::refus($coup);
     }
     if (!$coup->aMange()) {
         if (Plateau::slotPeutManger($this->plateau, $coup->pion, $this->regles)) {
             return self::refus(array('Vous devez prendre le pion de l\'adversaire.'));
         }
     }
     $coup->execute();
     $tours = Tours::createFrom($partie_data->tours);
     if ($coup->aMange() && !$coup->get_promotion && Plateau::peutManger($this->plateau, $coup->pion, $this->regles)) {
         $partie_data->prise_multiple = array('pion' => $coup->pion);
     } else {
         $tours->next();
         $partie_data->prise_multiple = null;
     }
     switch ($res = $this->plateau->partieFinie()) {
         case 1:
             // slot 1 gagne
         // slot 1 gagne
         case 2:
             // slot 2 gagne
             partie()->getSlotNum($res)->addScore(1, true);
         case -1:
             // partie nulle
             partie()->terminer();
         case 0:
             // partie en cours
             break;
         default:
             throw new Exception('résultat inattendu (' . $res . ')');
     }
     $partie_data->tours = $tours;
     $partie_data->plateau = $this->plateau;
     partie()->setData($partie_data, true);
     $data = $partie_data;
     $data->lastMove = $coup->export();
     return $data;
 }
Пример #3
0
 public function ajax_move()
 {
     //print_r($this->_data());
     $case_from = getValue('case_from', null);
     $case_to = getValue('case_to', null);
     // Si les cases from et to sont bien définie.
     if (is_null($case_from) || is_null($case_to)) {
         throw new Exception('Une coords n\'est pas définie');
     }
     $from_x = $case_from['x'];
     $from_y = $case_from['y'];
     $to_x = $case_to['x'];
     $to_y = $case_to['y'];
     $from = $this->_case($from_x, $from_y);
     $to = $this->_case($to_x, $to_y);
     $tours = Tours::createFrom($this->_data()->tours);
     // Si la case de départ est bien occupée.
     if ($from == 0) {
         throw new Exception('Case de départ vide.');
     }
     // Si c'est bien au slot de jouer.
     if ($tours->pasAMoiDeJouer()) {
         return AJAXResponse::error('Ce n\'est pas à vous de jouer.');
     }
     // Si la case de départ est la même que celle d'arrivée.
     if ($from_x == $to_x && $from_y == $to_y) {
         return $this->ajax_update();
     }
     // Si le slot joue bien ses pions et pas ceux de l'adversaire.
     if (($from - 1) % 2 != intval(slot()->position) - 1) {
         return AJAXResponse::error('On ne joue pas les pions de l\'adversaire namého !');
     }
     // Si il ne déplace pas sur une case déjà occupée.
     if ($to != 0) {
         return AJAXResponse::error('Cette case est déjà occupée.');
     }
     // Si le déplacement est valide, respect des règles des Dammes.
     if (!self::bonneCase($to_x, $to_y)) {
         return AJAXResponse::error('Vous devez vous déplacer en diagonale. n°1');
     }
     $distance = self::distance($from_x, $from_y, $to_x, $to_y);
     if ($distance == 1) {
         if (Coords::direction($from_x, $from_y, $to_x, $to_y) < 0) {
             return AJAXResponse::error('Vous ne pouvez pas reculer.');
         }
     } else {
         if ($distance == 2) {
             if (Coords::memeDiagonale($from_x, $from_y, $to_x, $to_y)) {
                 $milieu = Coords::milieu($from_x, $from_y, $to_x, $to_y);
                 $v = $this->_case($milieu->x, $milieu->y);
                 // TODO Manger en arriere ou pas !!
                 if ($v == 0) {
                     // case sautée vide
                     return AJAXResponse::error('Déplacement non autorisé n°2.');
                 } else {
                     if (($v - 1) % 2 == 2 - slot()->position) {
                         // pièce sautée adverse
                         $this->_case($milieu->x, $milieu->y, 0);
                     } else {
                         if (($v - 1) % 2 == slot()->position - 1) {
                             // pièce sautée alliée
                             return AJAXResponse::error('Vous ne pouvez pas sauter vos pièces.');
                         }
                     }
                 }
             } else {
                 return AJAXResponse::error('Vous devez vous déplacer en diagonale. n°2');
             }
         } else {
             return AJAXResponse::error('Déplacement non autorisé. (' . self::distance($from_x, $from_y, $to_x, $to_y) . ')');
         }
     }
     // Si tout est ok :
     $this->_case($to_x, $to_y, $from);
     $this->_case($from_x, $from_y, 0);
     $tours->next();
     $data = $this->_data();
     $data->tours = $tours;
     $this->_data($data);
     partie()->save();
     return $this->ajax_update();
 }