Generate random chess position: Difference between revisions
Content added Content deleted
Line 704: | Line 704: | ||
replaceSquareByPos ((ChessPiece King Black), p2) b) |
replaceSquareByPos ((ChessPiece King Black), p2) b) |
||
placePawns :: |
placePawns :: ChessBoard -> IO ChessBoard |
||
placePawns |
placePawns b = num >>= go b |
||
where go :: ChessBoard -> Int -> IO ChessBoard |
where go :: ChessBoard -> Int -> IO ChessBoard |
||
go b'' 0 = pure b'' |
go b'' 0 = pure b'' |
||
go b'' n = do |
go b'' n = do |
||
pos <- randomPos b'' |
|||
pawn@(ChessPiece _ color) <- randomPawn |
|||
if promoted c == snd p || isPosOccupied p b'' |
|||
if promoted color == snd pos || isPosOccupied pos b'' |
|||
|| enpassant color == snd pos || firstPos color == snd pos |
|||
then go b'' n |
then go b'' n |
||
else |
else |
||
go (replaceSquareByPos ( |
go (replaceSquareByPos (pawn, pos) b'') (pred n) |
||
promoted White = 8 |
promoted White = 8 |
||
promoted Black = 1 |
promoted Black = 1 |
||
Line 723: | Line 724: | ||
num :: IO Int |
num :: IO Int |
||
num = getStdRandom (randomR (1, |
num = getStdRandom (randomR (1,16)) |
||
randomPawn :: IO Square |
|||
randomPawn = ChessPiece Pawn <$> rColor |
|||
where rColor :: IO PieceColor |
|||
rColor = getStdRandom (random) |
|||
placeRemaining :: ChessBoard -> IO ChessBoard |
placeRemaining :: ChessBoard -> IO ChessBoard |
||
Line 786: | Line 792: | ||
main = |
main = |
||
placeKings emptyBoard >>= |
placeKings emptyBoard >>= |
||
placePawns |
placePawns >>= |
||
placePawns Black >>= |
|||
placeRemaining >>= |
placeRemaining >>= |
||
draw</lang> |
draw</lang> |