/** * Handle castling **/ protected function castle(King $king, Square $to) { $isKingSide = $this->isCastleKingSide($king, $to); $y = $king->getY(); if ($isKingSide) { $rook = $this->analyser->getCastleRookKingSide($king->getPlayer()); $newRookSquare = $this->board->getSquareByPos(6, $y); $newKingSquare = $this->board->getSquareByPos(7, $y); } else { $rook = $this->analyser->getCastleRookQueenSide($king->getPlayer()); $newRookSquare = $this->board->getSquareByPos(4, $y); $newKingSquare = $this->board->getSquareByPos(3, $y); } if (!$rook) { throw new \LogicException(sprintf('No rook for castle on %s side, king %s to %s', $isKingSide ? 'King' : 'Queen', $king->getSquareKey(), $to->getKey())); } $kingSquare = $king->getSquare(); $rookSquare = $rook->getSquare(); $this->board->castle($king, $rook, $newKingSquare->getX(), $newRookSquare->getX()); $king->setFirstMove($this->game->getTurns()); $rook->setFirstMove($this->game->getTurns()); $this->stack->addEvent(array('type' => 'castling', 'king' => array($kingSquare->getKey(), $newKingSquare->getKey()), 'rook' => array($rookSquare->getKey(), $newRookSquare->getKey()), 'color' => $king->getColor())); }
public function testCheck() { $data = <<<EOF Q k K EOF; $game = $this->createGame($data); $this->game->getBoard()->getPieceByKey('b7')->setFirstMove(1); $stack = new Stack(); $manipulator = new TestManipulator($this->game, $stack); $manipulator->play('b7 b6', array('promotion' => 'Knight')); $this->assertEquals(array(array('type' => 'move', 'from' => 'b7', 'to' => 'b6', 'color' => 'white'), array('type' => 'check', 'key' => 'd6')), $stack->getEvents()); }