Beispiel #1
0
 public function ajax_kik()
 {
     $line = intval(getValue('line'));
     $num = intval(getValue('num'));
     if ($line < 0 || $line > 2) {
         throw new Exception('Erreur, ligne line=' . $line . ' n\'existe pas');
     }
     if ($num < 0 || $num > 6) {
         throw new Exception('Erreur, colonne num=' . $num . ' n\'existe pas');
     }
     $this->loadData();
     if (slot()->position != $this->data->tour) {
         return AJAXResponse::error('Ce n\'est pas à vous de jouer');
     }
     if (intval(slot()->position) == $line + 1) {
         if ($this->data->compartiments[$line][$num] > 0) {
             $this->redistribuer($line, $num);
             $this->data->tour = 3 - $this->data->tour;
             $this->saveData();
         } else {
             return AJAXResponse::error('Il n\'y a pas de haricot sur ce compartiment');
         }
     } else {
         return AJAXResponse::error('Vous ne pouvez pas jouer les compartiments adverses.');
     }
     $tour = $this->data->tour - 1;
     $vide = true;
     for ($i = 0; $i < 6; $i++) {
         if ($this->data->compartiments[$tour][$i] > 0) {
             $vide = false;
             break;
         }
     }
     if ($vide) {
         $ramasse = 0;
         for ($i = 0; $i < 6; $i++) {
             $ramasse += $this->data->compartiments[1 - $tour][$i];
             $this->data->compartiments[1 - $tour][$i] = 0;
         }
         partie()->getSlotNum(3 - intval(slot()->position))->addScore($ramasse, true);
         $r = $this->terminer();
         $r->lastdata = $this->ajax_update();
         return $r;
     }
     $slots = partie()->getSlots();
     $moyenne = intval(partie()->option('nb_haricot_initial')) * 4;
     if (intval($slots[0]->score) > $moyenne || intval($slots[1]->score) > $moyenne) {
         $r = $this->terminer();
         $r->lastdata = $this->ajax_update();
         return $r;
     }
     return $this->ajax_update();
 }
Beispiel #2
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();
 }