哈哈从未听说过“魔法位板”。谷歌它,这正是我所期望的。虽然我看不到它有什么神奇之处。无论如何要回答您的问题,您需要生成当前所选棋子的可用移动位位置。不知道还需要什么。
至于伪代码,我猜是这样的:
Positions KingChessPiece::getMovablePositions(){
(x,y) = current bit position in the bitboard
availablePosition = [ (x+1,y),(x-1,y),(x,y+1),(x,y-1) ]
for each position in availablePosition
if p_i is occupied then remove it from list
return availablePosition
}
我的意思是这没有什么难的,您只需要确保以与您使用的内部结构兼容的方式获取和设置位置。
编辑:
女王的例子:
Position QueenChessPiece::getMovablePosition(){
(x,y) = queens current position
availablePosition = []; //empty list
//check diagonal positions
//move top left diagonal
availablePosition.concat( this.generateAvailablePosition(x,y,-1,1);
//move top right diagonal
availablePosition.concat( this.generateAvailablePosition(x,y,1,1);
//move bottom right diagonal
availablePosition.concat( this.generateAvailablePosition(x,y,1,-1);
//move bottom left diagonal
availablePosition.concat( this.generateAvailablePosition(x,y,-1,-1);
//move straight up
availablePosition.concat( this.generateAvailablePosition(x,y,0,1) )
//move straight down
availablePosition.concat( this.generateAvailablePosition(x,y,0,-1) )
//move left
availablePosition.concat( this.generateAvailablePosition(x,y,-1,0) )
//move right
availablePosition.concat( this.generateAvailablePosition(x,y,1,0) )
return availablePosition;
}
Position QueenChess::generateAvailablePosition(x,y,dx,dy){
availPosition = [];
while( !isSpaceOccupied(x + dx , y + dy))
availPosition.add( position(x + dx ,y + dy) );
x += dx;
y += dy;
endWhile
return availPosition;
}