Module: Chess::Save::FenCodeFromBoard
- Included in:
- Pieces::King, Chess::Save
- Defined in:
- lib/chess/save/fen_from_board.rb
Overview
Fen code from Board
Instance Method Summary collapse
-
#fen_piece_placement(board_data) ⇒ String
create fen piece placement for given board_data.
-
#fen_piece_placement_by_rank(board_data, rank) ⇒ String
helper method for #fen_piece_placement.
-
#generate_fen_code(board) ⇒ Object
generate FEN code from given board.
-
#letter_of(piece) ⇒ String
return letter of piece.
Instance Method Details
#fen_piece_placement(board_data) ⇒ String
create fen piece placement for given board_data
25 26 27 28 29 30 31 32 |
# File 'lib/chess/save/fen_from_board.rb', line 25 def fen_piece_placement(board_data) string = '' (0..7).reverse_each do |rank| string += fen_piece_placement_by_rank(board_data, rank) string += '/' unless rank.zero? end string end |
#fen_piece_placement_by_rank(board_data, rank) ⇒ String
helper method for #fen_piece_placement
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/chess/save/fen_from_board.rb', line 38 def fen_piece_placement_by_rank(board_data, rank) # rubocop:disable Metrics/MethodLength string = '' empty_space = 0 ('a'..'h').each do |file| piece = board_data[file][rank] if piece == '' empty_space += 1 string += empty_space.to_s if file == 'h' else string += empty_space.to_s unless empty_space.zero? string += letter_of(piece) empty_space = 0 end end string end |
#generate_fen_code(board) ⇒ Object
generate FEN code from given board
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/chess/save/fen_from_board.rb', line 11 def generate_fen_code(board) piece_placement = fen_piece_placement(board.data) current_player = board.current_player castling_rights = board.castling_rights en_passant = board.possible_en_passant_target half_move = board.half_move full_move = board.full_move "#{piece_placement} #{current_player} #{castling_rights} #{en_passant} #{half_move} #{full_move}" end |
#letter_of(piece) ⇒ String
return letter of piece
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/chess/save/fen_from_board.rb', line 59 def letter_of(piece) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength letter = case piece when Pieces::King 'k' when Pieces::Bishop 'b' when Pieces::Rook 'r' when Pieces::Pawn 'p' when Pieces::Queen 'q' when Pieces::Knight 'n' end if piece.white? letter.upcase else letter end end |