Fixed problem with invalid castle moves

This commit is contained in:
DHTMLGoodies
2013-02-20 18:01:34 +01:00
parent 4908d2f94b
commit 8f4fa18895
2 changed files with 27 additions and 1 deletions

View File

@@ -393,6 +393,9 @@ class FenParser0x88
}
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']])
&& ($piece['s'] < 118 && !strstr($protectiveMoves, Board0x88Config::$keySquares[$piece['s'] + 1]))
&& ($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;
}
break;

View File

@@ -105,6 +105,24 @@ class ParserTest extends PHPUnit_Framework_TestCase
$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
*/