Exemplo n.º 1
0
 /**
  * @depends testGetBoard
  */
 public function testGetBasicTargetSquaresEnPassant(Board $board)
 {
     $board->getGame()->setTurns(10);
     $piece = $board->getPieceByKey('f2');
     $piece->setY('5');
     $piece->setFirstMove(1);
     $board->getPieceByKey('g7')->setY(5);
     $board->getPieceByKey('g7')->setFirstMove(9);
     $board->compile();
     $expected = array('f6');
     $this->assertSquareKeys($expected, $piece->getBasicTargetKeys());
 }
Exemplo n.º 2
0
 protected function getKeysByProjection($dx, $dy)
 {
     $keys = array();
     $continue = true;
     $x = $this->x;
     $y = $this->y;
     while ($continue) {
         $x += $dx;
         $y += $dy;
         if ($x > 0 && $x < 9 && $y > 0 && $y < 9) {
             $key = Board::posToKey($x, $y);
             if ($piece = $this->board->getPieceByKey($key)) {
                 if ($piece->getColor() !== $this->color) {
                     $keys[] = $key;
                 }
                 $continue = false;
             } else {
                 $keys[] = $key;
             }
         } else {
             $continue = false;
         }
     }
     return $keys;
 }
Exemplo n.º 3
0
 /**
  * @depends testGetBoard
  */
 public function testGetBasicTargetSquaresSecondMove(Board $board)
 {
     $piece = $board->getPieceByKey('b1');
     $piece->setX(3);
     $piece->setY(4);
     $board->compile();
     $expected = array('a3', 'a5', 'b6', 'd6', 'e5', 'e3');
     $this->assertSquareKeys($expected, $piece->getBasicTargetKeys());
 }
Exemplo n.º 4
0
 /**
  * @depends testGetBoard
  */
 public function testGetBasicTargetSquaresSecondMove(Board $board)
 {
     $piece = $board->getPieceByKey('d1');
     $piece->setX(3);
     $piece->setY(4);
     $board->compile();
     $expected = array('b3', 'b5', 'a6', 'd5', 'e6', 'f7', 'd3', 'a4', 'b4', 'd4', 'e4', 'f4', 'g4', 'h4', 'c3', 'c5', 'c6', 'c7');
     $this->assertSquareKeys($expected, $piece->getBasicTargetKeys());
 }
Exemplo n.º 5
0
 /**
  * Add castling moves if available
  *
  * @return array the squares where the king can go
  **/
 protected function addCastlingSquares(King $king, array $squares)
 {
     $player = $king->getPlayer();
     $rooks = PieceFilter::filterNotMoved(PieceFilter::filterClass(PieceFilter::filterAlive($player->getPieces()), 'Rook'));
     if (empty($rooks)) {
         return $squares;
     }
     $opponentControlledKeys = $this->getPlayerControlledKeys($player->getOpponent(), true);
     foreach ($rooks as $rook) {
         $kingX = $king->getX();
         $kingY = $king->getY();
         $rookX = $rook->getX();
         $dx = $kingX > $rookX ? -1 : 1;
         $newKingX = 1 === $dx ? 7 : 3;
         $newRookX = 1 === $dx ? 6 : 4;
         $possible = true;
         // Unattacked
         $rangeMin = min($kingX, $newKingX);
         $rangeMax = min(8, max($kingX, $newKingX) + 1);
         for ($_x = $rangeMin; $_x !== $rangeMax; $_x++) {
             if (in_array(Board::posToKey($_x, $kingY), $opponentControlledKeys)) {
                 $possible = false;
                 break;
             }
         }
         // Unimpeded
         $rangeMin = min($kingX, $rookX, $newKingX, $newRookX);
         $rangeMax = min(8, max($kingX, $rookX, $newKingX, $newRookX) + 1);
         for ($_x = $rangeMin; $_x !== $rangeMax; $_x++) {
             if ($piece = $this->board->getPieceByKey(Board::posToKey($_x, $kingY))) {
                 if ($piece !== $king && $piece !== $rook) {
                     $possible = false;
                     break;
                 }
             }
         }
         if ($possible) {
             // If King moves one square or less (Chess variant)
             if (1 >= abs($kingX - $newKingX)) {
                 $newKingSquare = $rook->getSquare();
             } else {
                 $newKingSquare = $this->board->getSquareByPos($newKingX, $kingY);
             }
             $squares[] = $newKingSquare;
         }
     }
     return $squares;
 }
Exemplo n.º 6
0
 /**
  * @depends testBoardCreation
  */
 public function testGetPieceByPos(Board $board)
 {
     $this->assertSame($board->getPieceByKey('a1'), $board->getPieceByPos(1, 1));
 }