5 # Style 12 was designed by Daniel Sleator
6 # (sleator+@cs.cmu.edu) Darooha@ICC
10 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
11 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
12 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
13 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
14 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
15 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
16 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
17 ([qkbnrpQKBNRP-]{8})\s+ # chessboard
18 ([BW])\s+ # black/white
19 (-1|[0-7])\s+ # passing pawn
20 ([01])\s+ # castle rights
21 ([01])\s+ # castle rights
22 ([01])\s+ # castle rights
23 ([01])\s+ # castle rights
24 (-?\d+)\s+ # 50 moves made
25 (\d+)\s+ # game number
28 (-[1-4]|[0-2])\s+ # status
44 WHITE_KING_CASTLING = 11
45 WHITE_QUEEN_CASTLING = 12
46 BLACK_KING_CASTLING = 13
47 BLACK_QUEEN_CASTLING = 14
54 STARTING_INCREMENT = 21
58 LAST_MOVE_VERBOSE = 27
65 ISOLATED_POSITION = -3
66 OBSERVING_EXAMINED = -2
73 def self.from_match(match, games)
74 game_number = match[GAME_NUMBER].to_i
75 current_game = games[game_number]
76 icsapi = current_game[:icsapi]
78 icsapi.new_state(:turn => match[TURN] == 'W' ? :white : :black,
79 :en_passant => match[EN_PASSANT].to_i,
80 :wk_castling => match[WHITE_KING_CASTLING].to_i == 1,
81 :wq_castling => match[WHITE_QUEEN_CASTLING].to_i == 1,
82 :bk_castling => match[BLACK_KING_CASTLING].to_i == 1,
83 :bq_castling => match[BLACK_QUEEN_CASTLING].to_i == 1)
84 match[CHESSBOARD..CHESSBOARD+8].each_with_index do |row, i|
85 row.split(//).each_with_index do |p, j|
86 piece = icsapi.new_piece(p)
87 state.board[Point.new(j, i)] = piece
91 style12 = new(:state => state,
92 :game_number => match[GAME_NUMBER].to_i,
93 :move_index => match[MOVE_ORDINAL].to_i,
94 :white_player => match[WHITE_PLAYER],
95 :black_player => match[BLACK_PLAYER],
96 :relation => match[RELATION].to_i,
97 :last_move => match[LAST_MOVE_VERBOSE],
98 :last_move_san => match[LAST_MOVE],
100 :white => match[WHITE_TIME].to_i,
101 :black => match[BLACK_TIME].to_i }
109 def method_missing(field)
114 (@opts[:move_index] - 1) * 2 +
115 (state.turn == :white ? 0 : 1)