예제 #1
0
파일: awale.php 프로젝트: laiello/ascn
 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();
 }
예제 #2
0
파일: userview.php 프로젝트: laiello/ascn
 public function ajax_signin_submit()
 {
     $r = new AJAXResponse();
     $pseudo = getValue('pseudo');
     $password = getValue('password');
     $password_repeat = getValue('password_repeat');
     $r->pseudo = $pseudo;
     $r->success = false;
     $ok = true;
     if (empty($pseudo) || empty($password) || empty($password_repeat)) {
         $r->addError('Un champ n\'a pas été rempli.') . ($ok = false);
     }
     if (preg_match('/^[a-zA-Z0-9]*$/', $pseudo)) {
         if (strlen($pseudo) < 4 || strlen($pseudo) > 32) {
             $r->addError('Le pseudo doit avoir entre 4 et 32 caractères.');
             $ok = false;
         }
     } else {
         $r->addError('Le pseudo doit avoir entre 4 et 32 caractères.');
         $r->addError('Le pseudo doit contenir seulement des lettres et des chiffres.');
         $ok = false;
     }
     if (!preg_match('/^[a-zA-Z0-9]{4,32}$/', $pseudo)) {
         $r->addError('Le pseudo doit contenir seulement des lettres et des chiffres, et doit avoir entre 4 et 32 caractères.') . ($ok = false);
     }
     if (!streq($password, $password_repeat)) {
         $r->addError('Le mot de passe répété ne correspond pas au premier mot de passe.') . ($ok = false);
     }
     if ($ok) {
         if (Joueur::createUser($pseudo, $password)) {
             $r->success = true;
         } else {
             $r->addError('Ce pseudo est déjà utilisé.');
         }
     }
     return $r;
 }
예제 #3
0
파일: Jeu.php 프로젝트: laiello/ascn
 public final function ajax_lancer_partie()
 {
     // Formulaire de lancement de partie recu
     $r = new AJAXResponse();
     try {
         partie()->lancer();
         $r->partie = partie();
         $r->slot = partie()->getSlot(joueur());
         $r->jeu = jeu();
     } catch (Exception $e) {
         $r->addError($e->getMessage());
     }
     return $r;
 }
예제 #4
0
파일: dammes.php 프로젝트: laiello/ascn
 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();
 }
예제 #5
0
 public static function error($s)
 {
     $r = new AJAXResponse();
     $r->addError($s);
     return $r;
 }