chess_rb 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1584e23695704e645f8088827c43f71e60c9ce07
4
- data.tar.gz: 9ebf999832dee1ff44b892126e558bb1675369d6
3
+ metadata.gz: 8387c3c7b4b44a16284cf21d3598c9e6f1377fc9
4
+ data.tar.gz: 9e9d8036aeb5e539135a2ea3f2fa7f6781dd5734
5
5
  SHA512:
6
- metadata.gz: cd5db4e7c13262c0076171467f2de6b16862fe844e1ab5f69b76a0776bc7b5562b71a8f2d059c2780f06f35aa7e0487f10962aa5400ae3201eeaff1937d7e49c
7
- data.tar.gz: 9366f64fe308afc5e1d655cbf24a580b9702c8ff34e63cc2e19239486912f0916a42714079ef83b48ff6ad191ae52672c389993b834771573f93d967f23ed610
6
+ metadata.gz: 8e22e5ccee3e43694dcaafe311c3c76a84389b4235af5c5ea76857829cc1fad4d47c536abdcde4b0ebf112db7a7a6f5b0d426334b0a1deab9ac581443377a6e7
7
+ data.tar.gz: b55e649dcf6243982b3493ce22ae99950b0770fe91fa628b98572c2d2d0c94866e13f7505beb491819730c450167b96c4f8393b2604a77ff68cde4bfe5022e25
@@ -19,6 +19,10 @@ class ChessRB::Piece
19
19
  self.desc[0]
20
20
  end
21
21
 
22
+ def empty?
23
+ return @code == 0
24
+ end
25
+
22
26
  def to_s(d)
23
27
  case @code
24
28
  when WP
@@ -153,14 +153,14 @@ class ChessRB::Position
153
153
  move([8 - move.from_rank, move.from_file - 1],
154
154
  [8 - move.to_rank, move.to_file - 1])
155
155
 
156
- @fen_components[1] = @fen_components[1] == 'w' ? 'b' : 'w'
156
+ update_fen(move, true)
157
157
  end
158
158
 
159
159
  def undo_move(move, piece)
160
160
  undo([8 - move.from_rank, move.from_file - 1],
161
161
  [8 - move.to_rank, move.to_file - 1], piece.code)
162
162
 
163
- @fen_components[1] = @fen_components[1] == 'w' ? 'b' : 'w'
163
+ update_fen(move, false)
164
164
  end
165
165
 
166
166
  def to_s(dark_background = true)
@@ -204,6 +204,33 @@ class ChessRB::Position
204
204
  return board
205
205
  end
206
206
 
207
+ def board_to_fen
208
+ fen = ""
209
+
210
+ @board.each_with_index do |r, i|
211
+ fen += '/' if i != 0
212
+ count = 0
213
+ r.each_with_index do |c|
214
+ p = ChessRB::Piece.new(c)
215
+ if p.empty?
216
+ count += 1
217
+ else
218
+ fen += count.to_s if count != 0
219
+ count = 0
220
+ if p.color == 'W'
221
+ fen += p.type.upcase
222
+ else
223
+ fen += p.type.downcase
224
+ end
225
+ end
226
+ end
227
+ fen += count.to_s if count != 0
228
+ end
229
+
230
+ puts fen.to_s
231
+ return fen
232
+ end
233
+
207
234
  def move(from, to)
208
235
  @board[to[0]][to[1]] = @board[from[0]][from[1]]
209
236
  @board[from[0]][from[1]] = 0
@@ -213,4 +240,49 @@ class ChessRB::Position
213
240
  @board[from[0]][from[1]] = @board[to[0]][to[1]]
214
241
  @board[to[0]][to[1]] = code
215
242
  end
243
+
244
+ def update_fen(move, forward)
245
+ if forward
246
+ sym = nil
247
+ t = @fen_components[1]
248
+ if move.king_castle?
249
+ sym = t == 'w' ? 'K' : 'k'
250
+ if @fen_components[2].include? sym
251
+ @fen_components[2].sub(sym, '')
252
+ end
253
+ elsif move.queen_castle?
254
+ sym = t == 'w' ? 'Q' : 'q'
255
+ @fen_components[2]
256
+ end
257
+ if sym && @fen_components[2].include?(sym)
258
+ @fen_components[2].sub(sym, '')
259
+ @fen_components[2] = '-' if @fen_components[2].empty?
260
+ end
261
+
262
+ if (pawn_move = piece_on(move.to).type == 'P') &&
263
+ (move.from_rank - move.to_rank).abs == 2
264
+
265
+ @fen_components[3] = move.san[0]
266
+ @fen_components[3] += (t == 'w') ? '3' : '6'
267
+ else
268
+ @fen_components[3] = '-'
269
+ end
270
+
271
+ if pawn_move || move.capture?
272
+ @fen_components[4] = 0
273
+ else
274
+ @fen_components[4] = (@fen_components[4].to_i + 1).to_s
275
+ end
276
+
277
+ if t == 'b'
278
+ @fen_components[5] = (@fen_components[5].to_i + 1).to_s
279
+ end
280
+ else
281
+ # do things for undo_move
282
+ end
283
+ @fen_components[0] = board_to_fen()
284
+ @fen_components[1] = @fen_components[1] == 'w' ? 'b' : 'w'
285
+
286
+ @fen = @fen_components.join(' ')
287
+ end
216
288
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chess_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sabar Dasgupta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-20 00:00:00.000000000 Z
11
+ date: 2014-06-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Chess functions written in Ruby
14
14
  email: sabar.dasgupta@gmail.com