chessmate 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 332ee0002250b755f4e40ba2555e71b3f1bb1fd878a78ee796272710a52e573e
4
- data.tar.gz: 4704b9a6ae98589f5737ebd1a80f4dd75dcbdc8c90bfef2dd7bac0c4f6b926c7
3
+ metadata.gz: 595baa2afab688559adcd0dd14039cd28bffa2b8568e3e2458a1dcdebee6a51a
4
+ data.tar.gz: 6fd00a068a098dfda0883f351cd57c6d5630ccd6e5023aeeb01db1c54d3aedff
5
5
  SHA512:
6
- metadata.gz: '06902d36017ad152fcf830da34e710f7fcde12ce009a71ce95ea883eee5e07d32ad3b98a7abe907046d39f8f55a1532ea42ed6ea6face6bf778286bfa7ffac36'
7
- data.tar.gz: b2df6ef5de229691765377a3cdef36c8e4c733f6fb4869dd811a0861417fc0a0b68964915d41f0cab52a8e21773006672b703af45566af388f112873d0b3411e
6
+ metadata.gz: 4d8672cceaadf0b52ef6237af0ea5d1f3b101b3dedd7636026a208bf0e8ba2496bb81aa8dc925f2d00339ebe396c32ac18bb7a73be6d7ee6a5b41349b8e4ad98
7
+ data.tar.gz: 9db677c4bb14ea3256948c6a2de4acb8aa2511cc04093ea79f31e47121e5f4c64a38785a49644ff94468f8efc5753e489c4780567ae29248596fc876dc329814
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in chessmate.gemspec
6
+ gemspec
@@ -0,0 +1,56 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ chessmate (0.4.0)
5
+ deep_dup
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ ast (2.4.0)
11
+ coderay (1.1.2)
12
+ deep_dup (0.0.3)
13
+ diff-lcs (1.3)
14
+ jaro_winkler (1.5.3)
15
+ method_source (0.9.2)
16
+ parallel (1.18.0)
17
+ parser (2.6.5.0)
18
+ ast (~> 2.4.0)
19
+ pry (0.12.2)
20
+ coderay (~> 1.1.0)
21
+ method_source (~> 0.9.0)
22
+ rainbow (3.0.0)
23
+ rspec (3.9.0)
24
+ rspec-core (~> 3.9.0)
25
+ rspec-expectations (~> 3.9.0)
26
+ rspec-mocks (~> 3.9.0)
27
+ rspec-core (3.9.0)
28
+ rspec-support (~> 3.9.0)
29
+ rspec-expectations (3.9.0)
30
+ diff-lcs (>= 1.2.0, < 2.0)
31
+ rspec-support (~> 3.9.0)
32
+ rspec-mocks (3.9.0)
33
+ diff-lcs (>= 1.2.0, < 2.0)
34
+ rspec-support (~> 3.9.0)
35
+ rspec-support (3.9.0)
36
+ rubocop (0.75.1)
37
+ jaro_winkler (~> 1.5.1)
38
+ parallel (~> 1.10)
39
+ parser (>= 2.6)
40
+ rainbow (>= 2.2.2, < 4.0)
41
+ ruby-progressbar (~> 1.7)
42
+ unicode-display_width (>= 1.4.0, < 1.7)
43
+ ruby-progressbar (1.10.1)
44
+ unicode-display_width (1.6.0)
45
+
46
+ PLATFORMS
47
+ ruby
48
+
49
+ DEPENDENCIES
50
+ chessmate!
51
+ pry
52
+ rspec
53
+ rubocop
54
+
55
+ BUNDLED WITH
56
+ 2.0.2
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'pry'
4
+
3
5
  class ChessMate
4
6
  require 'helpers/notation_parser'
5
7
  require 'pieces/pawn'
@@ -8,44 +10,23 @@ class ChessMate
8
10
  require 'pieces/knight'
9
11
  require 'pieces/queen'
10
12
  require 'pieces/king'
13
+ require 'helpers/default'
14
+ require 'deep_dup'
11
15
 
12
16
  attr_reader :board, :turn, :in_check, :promotable, :en_passant, :castling
13
17
 
14
- def initialize(board = nil, turn = nil)
15
- @board = if board.nil?
16
- [
17
- %w[BR BN BB BQ BK BB BN BR],
18
- %w[BP BP BP BP BP BP BP BP],
19
- [nil, nil, nil, nil, nil, nil, nil, nil],
20
- [nil, nil, nil, nil, nil, nil, nil, nil],
21
- [nil, nil, nil, nil, nil, nil, nil, nil],
22
- [nil, nil, nil, nil, nil, nil, nil, nil],
23
- %w[WP WP WP WP WP WP WP WP],
24
- %w[WR WN WB WQ WK WB WN WR]
25
- ]
26
- else
27
- board
28
- end
29
-
30
- @turn = if turn.nil?
31
- 1
32
- else
33
- turn
34
- end
35
-
36
- @promotable = nil
37
- @en_passant = { white: nil, black: nil }
38
- @castling = {
39
- white: {
40
- kingside: true,
41
- queenside: true
42
- },
43
- black: {
44
- kingside: true,
45
- queenside: true
46
- }
47
- }
48
- @in_check = { "white": false, "black": false }
18
+ def initialize(board: nil,
19
+ turn: nil,
20
+ promotable: nil,
21
+ en_passant: nil,
22
+ castling: nil,
23
+ in_check: nil)
24
+ @board = board || DEFAULT[:board].map(&:dup)
25
+ @turn = turn || DEFAULT[:turn]
26
+ @promotable = promotable || DeepDup.deep_dup(DEFAULT[:promotable])
27
+ @en_passant = en_passant || DeepDup.deep_dup(DEFAULT[:en_passant])
28
+ @castling = castling || DeepDup.deep_dup(DEFAULT[:castling])
29
+ @in_check = in_check || DeepDup.deep_dup(DEFAULT[:in_check])
49
30
  end
50
31
 
51
32
  def update(orig, dest = nil)
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ DEFAULT = {
4
+ board: [
5
+ %w[BR BN BB BQ BK BB BN BR],
6
+ %w[BP BP BP BP BP BP BP BP],
7
+ [nil, nil, nil, nil, nil, nil, nil, nil],
8
+ [nil, nil, nil, nil, nil, nil, nil, nil],
9
+ [nil, nil, nil, nil, nil, nil, nil, nil],
10
+ [nil, nil, nil, nil, nil, nil, nil, nil],
11
+ %w[WP WP WP WP WP WP WP WP],
12
+ %w[WR WN WB WQ WK WB WN WR]
13
+ ],
14
+ turn: 1,
15
+ promotable: nil,
16
+ en_passant: { white: nil, black: nil },
17
+ in_check: { "white": false, "black": false },
18
+ castling: {
19
+ white: {
20
+ kingside: true,
21
+ queenside: true
22
+ },
23
+ black: {
24
+ kingside: true,
25
+ queenside: true
26
+ }
27
+ }
28
+ }.freeze
@@ -30,7 +30,7 @@ class King < Piece
30
30
  return false if castling[king_color][castle_direction] == false
31
31
 
32
32
  test_board = board.map(&:dup)
33
- return false if ChessMate.new(test_board).in_check?(test_board)[king_color]
33
+ return false if ChessMate.new(board: test_board).in_check?(test_board)[king_color]
34
34
 
35
35
  test_range = castle_direction == :kingside ? [5, 6] : [1, 2, 3]
36
36
  test_range.each do |x|
@@ -39,7 +39,7 @@ class King < Piece
39
39
  test_board = board.map(&:dup)
40
40
  test_board[orig_y][x] = 'WK'
41
41
  test_board[orig_y][orig_x] = nil
42
- test = ChessMate.new(test_board)
42
+ test = ChessMate.new(board: test_board)
43
43
  return false if test.in_check?(test_board)[king_color] && x != 1
44
44
  end
45
45
  true
@@ -3,27 +3,72 @@
3
3
  require 'spec_helper'
4
4
  require_relative '../lib/chessmate'
5
5
  require_relative '../lib/helpers/notation_parser'
6
+ require_relative '../lib/helpers/default'
6
7
  Dir['../lib/pieces/*.rb'].each { |file| require file }
7
8
 
8
9
  describe ChessMate do
10
+ describe 'initialize method' do
11
+ context 'should accept custom parameters' do
12
+ it 'for board' do
13
+ board = Array.new(8) { Array.new(8, nil) }
14
+ chess = ChessMate.new(board: board)
15
+ expect(chess.board).to eql(board)
16
+ end
17
+
18
+ it 'for en_passant' do
19
+ en_passant = { white: true, black: nil }
20
+ chess = ChessMate.new(en_passant: en_passant)
21
+ expect(chess.en_passant).to eql(en_passant)
22
+ end
23
+
24
+ it 'for castling' do
25
+ castling = {
26
+ white: {
27
+ kingside: false,
28
+ queenside: true
29
+ },
30
+ black: {
31
+ kingside: true,
32
+ queenside: true
33
+ }
34
+ }
35
+ chess = ChessMate.new(castling: castling)
36
+ expect(chess.castling).to eql(castling)
37
+ end
38
+
39
+ it 'for turn' do
40
+ turn = rand(10)
41
+ chess = ChessMate.new(turn: turn)
42
+ expect(chess.turn).to eql(turn)
43
+ end
44
+
45
+ it 'for in_check' do
46
+ in_check = { "white": true, "black": false }
47
+ chess = ChessMate.new(in_check: in_check)
48
+ expect(chess.in_check).to eql(in_check)
49
+ end
50
+ end
51
+
52
+ context 'no custom parameters' do
53
+ it 'should generate a default game' do
54
+ chess = ChessMate.new
55
+ expect(chess.board).to eql(DEFAULT[:board])
56
+ expect(chess.turn).to eql(DEFAULT[:turn])
57
+ expect(chess.promotable).to eql(DEFAULT[:promotable])
58
+ expect(chess.en_passant).to eql(DEFAULT[:en_passant])
59
+ expect(chess.castling).to eql(DEFAULT[:castling])
60
+ expect(chess.in_check).to eql(DEFAULT[:in_check])
61
+ end
62
+ end
63
+ end
64
+
9
65
  describe 'board method' do
10
66
  before :each do
11
67
  @chess = ChessMate.new
12
68
  end
13
69
 
14
70
  it 'should return the board state' do
15
- expect(@chess.board).to eql(
16
- [
17
- %w[BR BN BB BQ BK BB BN BR],
18
- %w[BP BP BP BP BP BP BP BP],
19
- [nil, nil, nil, nil, nil, nil, nil, nil],
20
- [nil, nil, nil, nil, nil, nil, nil, nil],
21
- [nil, nil, nil, nil, nil, nil, nil, nil],
22
- [nil, nil, nil, nil, nil, nil, nil, nil],
23
- %w[WP WP WP WP WP WP WP WP],
24
- %w[WR WN WB WQ WK WB WN WR]
25
- ]
26
- )
71
+ expect(@chess.board).to eql(DEFAULT[:board])
27
72
  end
28
73
  end
29
74
 
@@ -81,7 +126,7 @@ describe ChessMate do
81
126
 
82
127
  it 'should handle a malformed board by returning default value' do
83
128
  board = Array.new(8) { Array.new(8, nil) }
84
- chess = ChessMate.new(board)
129
+ chess = ChessMate.new(board: board)
85
130
  expect(chess.in_check?).to eql(
86
131
  "white": false,
87
132
  "black": false
@@ -101,7 +146,7 @@ describe ChessMate do
101
146
  board[7][4] = 'WK'
102
147
  board[0][4] = 'BQ'
103
148
  board[0][5] = 'BK'
104
- chess = ChessMate.new(board)
149
+ chess = ChessMate.new(board: board)
105
150
  expect(chess.in_check?).to eql(
106
151
  "white": true,
107
152
  "black": false
@@ -113,7 +158,7 @@ describe ChessMate do
113
158
  board[7][4] = 'WK'
114
159
  board[7][5] = 'WQ'
115
160
  board[0][5] = 'BK'
116
- chess = ChessMate.new(board)
161
+ chess = ChessMate.new(board: board)
117
162
  expect(chess.in_check?).to eql(
118
163
  "white": false,
119
164
  "black": true
@@ -141,7 +186,7 @@ describe ChessMate do
141
186
  board = Array.new(8) { Array.new(8, nil) }
142
187
  board[0][0] = 'BQ'
143
188
  board[7][0] = 'WK'
144
- chess = ChessMate.new(board)
189
+ chess = ChessMate.new(board: board)
145
190
  expect(chess.in_check?).to eql(
146
191
  "white": true,
147
192
  "black": false
@@ -160,7 +205,7 @@ describe ChessMate do
160
205
  board[6][0] = 'WP'
161
206
  board[0][4] = 'BK'
162
207
  board[1][4] = 'BQ'
163
- chess = ChessMate.new(board)
208
+ chess = ChessMate.new(board: board)
164
209
  chess.move('a2', 'a3')
165
210
  expect(chess.in_check?).to eql(
166
211
  "white": true,
@@ -185,7 +230,7 @@ describe ChessMate do
185
230
  board[7][4] = 'WK'
186
231
  board[0][4] = 'BK'
187
232
  board[0][3] = 'BQ'
188
- chess = ChessMate.new(board)
233
+ chess = ChessMate.new(board: board)
189
234
  chess.move('e1', 'd1')
190
235
  expect(chess.board).to eql(
191
236
  [
@@ -206,7 +251,7 @@ describe ChessMate do
206
251
  board[7][3] = 'WK'
207
252
  board[0][4] = 'BK'
208
253
  board[0][3] = 'BQ'
209
- chess = ChessMate.new(board)
254
+ chess = ChessMate.new(board: board)
210
255
  chess.move('d1', 'e1')
211
256
  expect(chess.board).to eql(
212
257
  [
@@ -317,7 +362,7 @@ describe ChessMate do
317
362
  board = Array.new(8) { Array.new(8, nil) }
318
363
  board[6][0] = 'WP'
319
364
  board[5][0] = 'BP'
320
- chess = ChessMate.new(board)
365
+ chess = ChessMate.new(board: board)
321
366
  chess.move('a2', 'a4')
322
367
  expect(chess.board).to eql(
323
368
  [
@@ -337,7 +382,7 @@ describe ChessMate do
337
382
  board = Array.new(8) { Array.new(8, nil) }
338
383
  board[5][5] = 'WP'
339
384
  board[4][4] = 'BP'
340
- chess = ChessMate.new(board)
385
+ chess = ChessMate.new(board: board)
341
386
  chess.move('f3', 'e4')
342
387
  expect(chess.board).to eql(
343
388
  [
@@ -357,7 +402,7 @@ describe ChessMate do
357
402
  board = Array.new(8) { Array.new(8, nil) }
358
403
  board[4][4] = 'WP'
359
404
  board[5][5] = 'BP'
360
- chess = ChessMate.new(board)
405
+ chess = ChessMate.new(board: board)
361
406
  chess.move('e4', 'f3')
362
407
  expect(chess.board).to eql(
363
408
  [
@@ -377,7 +422,7 @@ describe ChessMate do
377
422
  board = Array.new(8) { Array.new(8, nil) }
378
423
  board[4][4] = 'WP'
379
424
  board[5][5] = 'WP'
380
- chess = ChessMate.new(board)
425
+ chess = ChessMate.new(board: board)
381
426
  chess.move('f3', 'e4')
382
427
  expect(chess.board).to eql(
383
428
  [
@@ -397,7 +442,7 @@ describe ChessMate do
397
442
  board = Array.new(8) { Array.new(8, nil) }
398
443
  board[4][4] = 'WP'
399
444
  board[5][5] = 'BP'
400
- chess = ChessMate.new(board)
445
+ chess = ChessMate.new(board: board)
401
446
  chess.move('e4', 'e3')
402
447
  expect(chess.board).to eql(
403
448
  [
@@ -416,7 +461,7 @@ describe ChessMate do
416
461
  it 'should flag a pawn as promotable if moving to the last rank' do
417
462
  board = Array.new(8) { Array.new(8, nil) }
418
463
  board[1][0] = 'WP'
419
- chess = ChessMate.new(board)
464
+ chess = ChessMate.new(board: board)
420
465
  chess.move('a7', 'a8')
421
466
  expect(chess.board).to eql(
422
467
  [
@@ -437,7 +482,7 @@ describe ChessMate do
437
482
  board = Array.new(8) { Array.new(8, nil) }
438
483
  board[1][0] = 'BP'
439
484
  board[3][1] = 'WP'
440
- chess = ChessMate.new(board)
485
+ chess = ChessMate.new(board: board)
441
486
  chess.move('a7', 'a5')
442
487
  chess.move('b5', 'a6')
443
488
  expect(chess.board).to eql(
@@ -458,7 +503,7 @@ describe ChessMate do
458
503
  board = Array.new(8) { Array.new(8, nil) }
459
504
  board[4][0] = 'BP'
460
505
  board[6][1] = 'WP'
461
- chess = ChessMate.new(board)
506
+ chess = ChessMate.new(board: board)
462
507
  chess.move('b2', 'b4')
463
508
  chess.move('a4', 'b3')
464
509
  expect(chess.board).to eql(
@@ -482,7 +527,7 @@ describe ChessMate do
482
527
  board[3][1] = 'WP'
483
528
  board[6][7] = 'WP'
484
529
  board[1][7] = 'BP'
485
- chess = ChessMate.new(board)
530
+ chess = ChessMate.new(board: board)
486
531
  chess.move('a7', 'a5')
487
532
  chess.move('h2', 'h3')
488
533
  chess.move('h7', 'h6')
@@ -505,7 +550,7 @@ describe ChessMate do
505
550
  it 'should update the board if rook moves vertically' do
506
551
  board = Array.new(8) { Array.new(8, nil) }
507
552
  board[7][0] = 'WR'
508
- chess = ChessMate.new(board)
553
+ chess = ChessMate.new(board: board)
509
554
  chess.move('a1', 'a8')
510
555
  expect(chess.board).to eql(
511
556
  [
@@ -524,7 +569,7 @@ describe ChessMate do
524
569
  it 'should update the board if the rook moves horizontally' do
525
570
  board = Array.new(8) { Array.new(8, nil) }
526
571
  board[7][0] = 'WR'
527
- chess = ChessMate.new(board)
572
+ chess = ChessMate.new(board: board)
528
573
  chess.move('a1', 'h1')
529
574
  expect(chess.board).to eql(
530
575
  [
@@ -543,7 +588,7 @@ describe ChessMate do
543
588
  it 'should return false for a move that is neither horizontal or vertical' do
544
589
  board = Array.new(8) { Array.new(8, nil) }
545
590
  board[7][0] = 'WR'
546
- chess = ChessMate.new(board)
591
+ chess = ChessMate.new(board: board)
547
592
  expect(chess.move('a1', 'g8')).to eql(false)
548
593
  end
549
594
 
@@ -551,7 +596,7 @@ describe ChessMate do
551
596
  board = Array.new(8) { Array.new(8, nil) }
552
597
  board[7][0] = 'WR'
553
598
  board[7][7] = 'BR'
554
- chess = ChessMate.new(board)
599
+ chess = ChessMate.new(board: board)
555
600
  chess.move('a1', 'h1')
556
601
  expect(chess.board).to eql(
557
602
  [
@@ -571,7 +616,7 @@ describe ChessMate do
571
616
  board = Array.new(8) { Array.new(8, nil) }
572
617
  board[7][0] = 'WR'
573
618
  board[7][7] = 'WR'
574
- chess = ChessMate.new(board)
619
+ chess = ChessMate.new(board: board)
575
620
  chess.move('a1', 'h1')
576
621
  expect(chess.board).to eql(
577
622
  [
@@ -592,7 +637,7 @@ describe ChessMate do
592
637
  it 'should update the board if the bishop moves diagonally' do
593
638
  board = Array.new(8) { Array.new(8, nil) }
594
639
  board[7][2] = 'WB'
595
- chess = ChessMate.new(board)
640
+ chess = ChessMate.new(board: board)
596
641
  chess.move('c1', 'h6')
597
642
  expect(chess.board).to eql(
598
643
  [
@@ -611,7 +656,7 @@ describe ChessMate do
611
656
  it 'should return false for a move that is not diagonal' do
612
657
  board = Array.new(8) { Array.new(8, nil) }
613
658
  board[7][2] = 'WB'
614
- chess = ChessMate.new(board)
659
+ chess = ChessMate.new(board: board)
615
660
  expect(chess.move('c1', 'c8')).to eql(false)
616
661
  expect(chess.move('c1', 'h7')).to eql(false)
617
662
  expect(chess.move('c1', 'h8')).to eql(false)
@@ -621,7 +666,7 @@ describe ChessMate do
621
666
  board = Array.new(8) { Array.new(8, nil) }
622
667
  board[7][2] = 'WB'
623
668
  board[2][7] = 'BB'
624
- chess = ChessMate.new(board)
669
+ chess = ChessMate.new(board: board)
625
670
  chess.move('c1', 'h6')
626
671
  expect(chess.board).to eql(
627
672
  [
@@ -641,7 +686,7 @@ describe ChessMate do
641
686
  board = Array.new(8) { Array.new(8, nil) }
642
687
  board[7][2] = 'WB'
643
688
  board[2][7] = 'WB'
644
- chess = ChessMate.new(board)
689
+ chess = ChessMate.new(board: board)
645
690
  chess.move('c1', 'h6')
646
691
  expect(chess.board).to eql(
647
692
  [
@@ -662,7 +707,7 @@ describe ChessMate do
662
707
  it 'should update the board if the knight moves 2 horizontal, 1 vertical' do
663
708
  board = Array.new(8) { Array.new(8, nil) }
664
709
  board[7][2] = 'WN'
665
- chess = ChessMate.new(board)
710
+ chess = ChessMate.new(board: board)
666
711
  chess.move('c1', 'e2')
667
712
  expect(chess.board).to eql(
668
713
  [
@@ -681,7 +726,7 @@ describe ChessMate do
681
726
  it 'should update the board if the knight moves 1 horizontal, 2 vertical' do
682
727
  board = Array.new(8) { Array.new(8, nil) }
683
728
  board[7][2] = 'WN'
684
- chess = ChessMate.new(board)
729
+ chess = ChessMate.new(board: board)
685
730
  chess.move('c1', 'd3')
686
731
  expect(chess.board).to eql(
687
732
  [
@@ -700,7 +745,7 @@ describe ChessMate do
700
745
  it 'should return false if the move is invalid' do
701
746
  board = Array.new(8) { Array.new(8, nil) }
702
747
  board[7][2] = 'WN'
703
- chess = ChessMate.new(board)
748
+ chess = ChessMate.new(board: board)
704
749
  expect(chess.move('c1', 'c8')).to eql(false)
705
750
  end
706
751
 
@@ -708,7 +753,7 @@ describe ChessMate do
708
753
  board = Array.new(8) { Array.new(8, nil) }
709
754
  board[7][2] = 'WN'
710
755
  board[5][3] = 'BN'
711
- chess = ChessMate.new(board)
756
+ chess = ChessMate.new(board: board)
712
757
  chess.move('c1', 'd3')
713
758
  expect(chess.board).to eql(
714
759
  [
@@ -728,7 +773,7 @@ describe ChessMate do
728
773
  board = Array.new(8) { Array.new(8, nil) }
729
774
  board[7][2] = 'WN'
730
775
  board[5][3] = 'WN'
731
- chess = ChessMate.new(board)
776
+ chess = ChessMate.new(board: board)
732
777
  chess.move('c1', 'd3')
733
778
  expect(chess.board).to eql(
734
779
  [
@@ -749,7 +794,7 @@ describe ChessMate do
749
794
  it 'should update the board if the queen moves vertically' do
750
795
  board = Array.new(8) { Array.new(8, nil) }
751
796
  board[7][3] = 'WQ'
752
- chess = ChessMate.new(board)
797
+ chess = ChessMate.new(board: board)
753
798
  chess.move('d1', 'd8')
754
799
  expect(chess.board).to eql(
755
800
  [
@@ -768,7 +813,7 @@ describe ChessMate do
768
813
  it 'should update the board if the queen moves horizontally' do
769
814
  board = Array.new(8) { Array.new(8, nil) }
770
815
  board[7][3] = 'WQ'
771
- chess = ChessMate.new(board)
816
+ chess = ChessMate.new(board: board)
772
817
  chess.move('d1', 'h1')
773
818
  expect(chess.board).to eql(
774
819
  [
@@ -787,7 +832,7 @@ describe ChessMate do
787
832
  it 'should update the board if the queen moves diagonally' do
788
833
  board = Array.new(8) { Array.new(8, nil) }
789
834
  board[7][3] = 'WQ'
790
- chess = ChessMate.new(board)
835
+ chess = ChessMate.new(board: board)
791
836
  chess.move('d1', 'h5')
792
837
  expect(chess.board).to eql(
793
838
  [
@@ -806,7 +851,7 @@ describe ChessMate do
806
851
  it 'should return false if the queen makes an otherwise invalid move' do
807
852
  board = Array.new(8) { Array.new(8, nil) }
808
853
  board[7][3] = 'WQ'
809
- chess = ChessMate.new(board)
854
+ chess = ChessMate.new(board: board)
810
855
  expect(chess.move('d1', 'h8')).to eql(false)
811
856
  end
812
857
 
@@ -814,7 +859,7 @@ describe ChessMate do
814
859
  board = Array.new(8) { Array.new(8, nil) }
815
860
  board[7][3] = 'WQ'
816
861
  board[7][7] = 'BQ'
817
- chess = ChessMate.new(board)
862
+ chess = ChessMate.new(board: board)
818
863
  chess.move('d1', 'h1')
819
864
  expect(chess.board).to eql(
820
865
  [
@@ -834,7 +879,7 @@ describe ChessMate do
834
879
  board = Array.new(8) { Array.new(8, nil) }
835
880
  board[7][3] = 'WQ'
836
881
  board[7][7] = 'WQ'
837
- chess = ChessMate.new(board)
882
+ chess = ChessMate.new(board: board)
838
883
  chess.move('d1', 'h1')
839
884
  expect(chess.board).to eql(
840
885
  [
@@ -855,7 +900,7 @@ describe ChessMate do
855
900
  it 'should update the board if the king moves 1 space vertically' do
856
901
  board = Array.new(8) { Array.new(8, nil) }
857
902
  board[7][4] = 'WK'
858
- chess = ChessMate.new(board)
903
+ chess = ChessMate.new(board: board)
859
904
  chess.move('e1', 'e2')
860
905
  expect(chess.board).to eql(
861
906
  [
@@ -874,7 +919,7 @@ describe ChessMate do
874
919
  it 'should update the board if the king moves 1 space horizontally' do
875
920
  board = Array.new(8) { Array.new(8, nil) }
876
921
  board[7][4] = 'WK'
877
- chess = ChessMate.new(board)
922
+ chess = ChessMate.new(board: board)
878
923
  chess.move('e1', 'f1')
879
924
  expect(chess.board).to eql(
880
925
  [
@@ -893,7 +938,7 @@ describe ChessMate do
893
938
  it 'should update the board if the king moves 1 space diagonally' do
894
939
  board = Array.new(8) { Array.new(8, nil) }
895
940
  board[7][4] = 'WK'
896
- chess = ChessMate.new(board)
941
+ chess = ChessMate.new(board: board)
897
942
  chess.move('e1', 'f2')
898
943
  expect(chess.board).to eql(
899
944
  [
@@ -912,7 +957,7 @@ describe ChessMate do
912
957
  it 'should return false if the king makes an otherwise invalid move' do
913
958
  board = Array.new(8) { Array.new(8, nil) }
914
959
  board[7][4] = 'WK'
915
- chess = ChessMate.new(board)
960
+ chess = ChessMate.new(board: board)
916
961
  expect(chess.move('e1', 'h8')).to eql(false)
917
962
  end
918
963
 
@@ -920,7 +965,7 @@ describe ChessMate do
920
965
  board = Array.new(8) { Array.new(8, nil) }
921
966
  board[7][4] = 'WK'
922
967
  board[6][4] = 'BP'
923
- chess = ChessMate.new(board)
968
+ chess = ChessMate.new(board: board)
924
969
  chess.move('e1', 'e2')
925
970
  expect(chess.board).to eql(
926
971
  [
@@ -940,7 +985,7 @@ describe ChessMate do
940
985
  board = Array.new(8) { Array.new(8, nil) }
941
986
  board[7][4] = 'WK'
942
987
  board[6][4] = 'WP'
943
- chess = ChessMate.new(board)
988
+ chess = ChessMate.new(board: board)
944
989
  chess.move('e1', 'e2')
945
990
  expect(chess.board).to eql(
946
991
  [
@@ -960,7 +1005,7 @@ describe ChessMate do
960
1005
  board = Array.new(8) { Array.new(8, nil) }
961
1006
  board[7][4] = 'WK'
962
1007
  board[7][7] = 'WR'
963
- chess = ChessMate.new(board)
1008
+ chess = ChessMate.new(board: board)
964
1009
  chess.move('e1', 'g1')
965
1010
  expect(chess.board).to eql(
966
1011
  [
@@ -980,7 +1025,7 @@ describe ChessMate do
980
1025
  board = Array.new(8) { Array.new(8, nil) }
981
1026
  board[7][4] = 'WK'
982
1027
  board[7][0] = 'WR'
983
- chess = ChessMate.new(board)
1028
+ chess = ChessMate.new(board: board)
984
1029
  chess.move('e1', 'c1')
985
1030
  expect(chess.board).to eql(
986
1031
  [
@@ -1008,7 +1053,7 @@ describe ChessMate do
1008
1053
  board[7][4] = 'WK'
1009
1054
  board[7][7] = 'WR'
1010
1055
  board[0][6] = 'BQ'
1011
- chess = ChessMate.new(board)
1056
+ chess = ChessMate.new(board: board)
1012
1057
  chess.move('e1', 'g1')
1013
1058
  expect(chess.board).to eql(
1014
1059
  [
@@ -1029,7 +1074,7 @@ describe ChessMate do
1029
1074
  board[7][4] = 'WK'
1030
1075
  board[7][7] = 'WR'
1031
1076
  board[0][5] = 'BQ'
1032
- chess = ChessMate.new(board)
1077
+ chess = ChessMate.new(board: board)
1033
1078
  chess.move('e1', 'g1')
1034
1079
  expect(chess.board).to eql(
1035
1080
  [
@@ -1050,7 +1095,7 @@ describe ChessMate do
1050
1095
  board[7][4] = 'WK'
1051
1096
  board[7][7] = 'WR'
1052
1097
  board[0][4] = 'BQ'
1053
- chess = ChessMate.new(board)
1098
+ chess = ChessMate.new(board: board)
1054
1099
  chess.move('e1', 'g1')
1055
1100
  expect(chess.board).to eql(
1056
1101
  [
@@ -1070,7 +1115,7 @@ describe ChessMate do
1070
1115
  board = Array.new(8) { Array.new(8, nil) }
1071
1116
  board[7][3] = 'WK'
1072
1117
  board[7][7] = 'WR'
1073
- chess = ChessMate.new(board)
1118
+ chess = ChessMate.new(board: board)
1074
1119
  chess.move('d1', 'e1')
1075
1120
  chess.move('e1', 'g1')
1076
1121
  expect(chess.board).to eql(
@@ -1091,7 +1136,7 @@ describe ChessMate do
1091
1136
  board = Array.new(8) { Array.new(8, nil) }
1092
1137
  board[7][4] = 'WK'
1093
1138
  board[7][7] = 'WR'
1094
- chess = ChessMate.new(board)
1139
+ chess = ChessMate.new(board: board)
1095
1140
  chess.move('h1', 'g1')
1096
1141
  chess.move('g1', 'h1')
1097
1142
  chess.move('e1', 'g1')
@@ -1117,7 +1162,7 @@ describe ChessMate do
1117
1162
  @board[7][4] = 'WK'
1118
1163
  @board[0][4] = 'BK'
1119
1164
  @board[0][3] = 'BQ'
1120
- @chess = ChessMate.new(@board)
1165
+ @chess = ChessMate.new(board: @board)
1121
1166
  end
1122
1167
  it 'should return true if the moving color is in check after the move' do
1123
1168
  expect(@chess.in_check_after_move?([7, 4], [7, 3])).to eql(true)
@@ -1143,7 +1188,7 @@ describe ChessMate do
1143
1188
  board[6][4] = 'BQ'
1144
1189
  board[3][4] = 'BK'
1145
1190
  board[4][4] = 'BR'
1146
- chess = ChessMate.new(board)
1191
+ chess = ChessMate.new(board: board)
1147
1192
  expect(chess.in_check_after_move?([7, 4], [6, 4])).to eql(true)
1148
1193
  end
1149
1194
  end
@@ -1153,7 +1198,7 @@ describe ChessMate do
1153
1198
  board = Array.new(8) { Array.new(8, nil) }
1154
1199
  board[7][4] = 'WK'
1155
1200
  board[0][4] = 'BK'
1156
- chess = ChessMate.new(board)
1201
+ chess = ChessMate.new(board: board)
1157
1202
  expect(chess.any_valid_moves?('W')).to eql(true)
1158
1203
  end
1159
1204
 
@@ -1163,7 +1208,7 @@ describe ChessMate do
1163
1208
  board[6][4] = 'BQ'
1164
1209
  board[3][4] = 'BK'
1165
1210
  board[4][4] = 'BR'
1166
- chess = ChessMate.new(board)
1211
+ chess = ChessMate.new(board: board)
1167
1212
  expect(chess.any_valid_moves?('W')).to eql(false)
1168
1213
  end
1169
1214
  end
@@ -1175,7 +1220,7 @@ describe ChessMate do
1175
1220
  board[6][4] = 'BQ'
1176
1221
  board[3][4] = 'BK'
1177
1222
  board[4][4] = 'BR'
1178
- chess = ChessMate.new(board)
1223
+ chess = ChessMate.new(board: board)
1179
1224
  expect(chess.checkmate?('W')).to eql(true)
1180
1225
  end
1181
1226
 
@@ -1192,7 +1237,7 @@ describe ChessMate do
1192
1237
  board[5][3] = 'BQ'
1193
1238
  board[5][4] = 'BK'
1194
1239
  board[4][5] = 'BR'
1195
- chess = ChessMate.new(board)
1240
+ chess = ChessMate.new(board: board)
1196
1241
  expect(chess.draw?('W')).to eql(true)
1197
1242
  end
1198
1243
 
@@ -1207,7 +1252,7 @@ describe ChessMate do
1207
1252
  board[6][3] = 'BQ'
1208
1253
  board[5][4] = 'BK'
1209
1254
  board[4][5] = 'BR'
1210
- chess = ChessMate.new(board)
1255
+ chess = ChessMate.new(board: board)
1211
1256
  expect(chess.draw?('W')).to eql(false)
1212
1257
  end
1213
1258
  end
@@ -1216,14 +1261,14 @@ describe ChessMate do
1216
1261
  it 'should return true if white piece is on last rank' do
1217
1262
  board = Array.new(8) { Array.new(8, nil) }
1218
1263
  board[0][0] = 'WP'
1219
- chess = ChessMate.new(board)
1264
+ chess = ChessMate.new(board: board)
1220
1265
  expect(chess.promote?([0, 0])).to eql(true)
1221
1266
  end
1222
1267
 
1223
1268
  it 'should return true if black piece is on last rank' do
1224
1269
  board = Array.new(8) { Array.new(8, nil) }
1225
1270
  board[7][0] = 'BP'
1226
- chess = ChessMate.new(board)
1271
+ chess = ChessMate.new(board: board)
1227
1272
  expect(chess.promote?([7, 0])).to eql(true)
1228
1273
  end
1229
1274
 
@@ -1231,7 +1276,7 @@ describe ChessMate do
1231
1276
  board = Array.new(8) { Array.new(8, nil) }
1232
1277
  board[1][0] = 'WP'
1233
1278
  board[6][0] = 'BP'
1234
- chess = ChessMate.new(board)
1279
+ chess = ChessMate.new(board: board)
1235
1280
  expect(chess.promote?([1, 0])).to eql(false)
1236
1281
  expect(chess.promote?([6, 0])).to eql(false)
1237
1282
  end
@@ -1241,14 +1286,14 @@ describe ChessMate do
1241
1286
  it 'should return nil if piece cannot promote' do
1242
1287
  board = Array.new(8) { Array.new(8, nil) }
1243
1288
  board[1][0] = 'WP'
1244
- chess = ChessMate.new(board)
1289
+ chess = ChessMate.new(board: board)
1245
1290
  expect(chess.promote!([1, 0], 'queen')).to eql(nil)
1246
1291
  end
1247
1292
 
1248
1293
  it 'should return nil for invalid/junk promotion data' do
1249
1294
  board = Array.new(8) { Array.new(8, nil) }
1250
1295
  board[0][0] = 'WP'
1251
- chess = ChessMate.new(board)
1296
+ chess = ChessMate.new(board: board)
1252
1297
  expect(chess.promote!([0, 0], 'king')).to eql(nil)
1253
1298
  end
1254
1299
 
@@ -1256,7 +1301,7 @@ describe ChessMate do
1256
1301
  before :each do
1257
1302
  board = Array.new(8) { Array.new(8, nil) }
1258
1303
  board[0][0] = 'WP'
1259
- @chess = ChessMate.new(board)
1304
+ @chess = ChessMate.new(board: board)
1260
1305
  end
1261
1306
 
1262
1307
  it 'queen' do
@@ -1320,7 +1365,7 @@ describe ChessMate do
1320
1365
  board[0][4] = 'BK'
1321
1366
  board[0][0] = 'BR'
1322
1367
  board[0][7] = 'BR'
1323
- @chess = ChessMate.new(board)
1368
+ @chess = ChessMate.new(board: board)
1324
1369
  end
1325
1370
  context 'new game' do
1326
1371
  it 'should return true for both king/queenside for both colors' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chessmate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Porter
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,13 +52,30 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: deep_dup
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description: A simple chess move validator
42
70
  email: tyler.b.porter@gmail.com
43
71
  executables: []
44
72
  extensions: []
45
73
  extra_rdoc_files: []
46
74
  files:
75
+ - Gemfile
76
+ - Gemfile.lock
47
77
  - lib/chessmate.rb
78
+ - lib/helpers/default.rb
48
79
  - lib/helpers/notation_parser.rb
49
80
  - lib/pieces/bishop.rb
50
81
  - lib/pieces/king.rb