Fixed problem with invalid castle moves
This commit is contained in:
@@ -393,6 +393,9 @@ class FenParser0x88
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($kingSideCastle
|
if ($kingSideCastle
|
||||||
|
&& !($this->cache['board'][$piece['s']+1])
|
||||||
|
&& !($this->cache['board'][$piece['s']+2])
|
||||||
|
&& ($this->cache['board'][$piece['s']+3])
|
||||||
&& !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s']])
|
&& !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s']])
|
||||||
&& ($piece['s'] < 118 && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] + 1]))
|
&& ($piece['s'] < 118 && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] + 1]))
|
||||||
&& ($piece['s'] < 117 && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] + 2]))
|
&& ($piece['s'] < 117 && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] + 2]))
|
||||||
@@ -401,7 +404,12 @@ class FenParser0x88
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($queenSideCastle && $piece['s'] - 2 != -1 && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s']]) && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] - 1]) && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] - 2])) {
|
if ($queenSideCastle && $piece['s'] - 2 != -1
|
||||||
|
&& !($this->cache['board'][$piece['s']-1])
|
||||||
|
&& !($this->cache['board'][$piece['s']-2])
|
||||||
|
&& !($this->cache['board'][$piece['s']-3])
|
||||||
|
&& ($this->cache['board'][$piece['s']-4])
|
||||||
|
&& !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s']]) && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] - 1]) && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] - 2])) {
|
||||||
$paths[] = $piece['s'] - 2;
|
$paths[] = $piece['s'] - 2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@@ -105,6 +105,24 @@ class ParserTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertTrue($parser->isOnSameFile($this->getNumericSquare('a1'), $this->getNumericSquare('a2')));
|
$this->assertTrue($parser->isOnSameFile($this->getNumericSquare('a1'), $this->getNumericSquare('a2')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function shouldNotBeAbleToCastleInInvalidPositions(){
|
||||||
|
// given
|
||||||
|
$fen = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1';
|
||||||
|
|
||||||
|
// when
|
||||||
|
$parser = $this->getParser($fen);
|
||||||
|
$legalMoves = $parser->getValidMovesAndResult("white");
|
||||||
|
$moves = $legalMoves['moves'];
|
||||||
|
|
||||||
|
// then
|
||||||
|
$this->assertEquals(array(), $moves[4]);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user