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(); }
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(); }