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