chess_vwong 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/README.md +27 -14
- data/Rakefile +3 -3
- data/bin/chess_vwong +10 -10
- data/chess_vwong-0.0.1.gem +0 -0
- data/chess_vwong.gemspec +12 -12
- data/example/example_game.rb +17 -17
- data/lib/chess_vwong.rb +13 -17
- data/lib/chess_vwong/bishop.rb +6 -9
- data/lib/chess_vwong/board.rb +151 -89
- data/lib/chess_vwong/game.rb +21 -16
- data/lib/chess_vwong/king.rb +4 -6
- data/lib/chess_vwong/knight.rb +4 -6
- data/lib/chess_vwong/node.rb +1 -1
- data/lib/chess_vwong/pawn.rb +23 -22
- data/lib/chess_vwong/piece.rb +13 -15
- data/lib/chess_vwong/player.rb +2 -2
- data/lib/chess_vwong/preload.rb +49 -48
- data/lib/chess_vwong/queen.rb +10 -13
- data/lib/chess_vwong/rook.rb +6 -9
- data/lib/chess_vwong/version.rb +1 -1
- data/spec/bishop_spec.rb +24 -27
- data/spec/board_spec.rb +227 -147
- data/spec/game_spec.rb +13 -15
- data/spec/king_spec.rb +24 -28
- data/spec/knight_spec.rb +31 -33
- data/spec/node_spec.rb +10 -11
- data/spec/pawn_spec.rb +54 -56
- data/spec/piece_spec.rb +23 -23
- data/spec/player_spec.rb +11 -13
- data/spec/queen_spec.rb +24 -27
- data/spec/rook_spec.rb +24 -27
- data/spec/spec_helper.rb +1 -1
- metadata +5 -3
data/spec/game_spec.rb
CHANGED
@@ -1,21 +1,20 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
module ChessVwong
|
3
3
|
describe Game do
|
4
|
-
|
5
|
-
let (:
|
6
|
-
let (:
|
7
|
-
let (:king) { King.new([0,0], "b") }
|
4
|
+
let (:bob) { Player.new('Bob', 'w') }
|
5
|
+
let (:peter) { Player.new('Peter', 'b') }
|
6
|
+
let (:king) { King.new([0, 0], 'b') }
|
8
7
|
let (:game) { Game.new([bob, peter]) }
|
9
8
|
|
10
|
-
context
|
11
|
-
it
|
9
|
+
context '#switch_players' do
|
10
|
+
it 'will set @current_player to @other_player' do
|
12
11
|
current_player = bob
|
13
12
|
other_player = peter
|
14
13
|
game.switch_players
|
15
14
|
expect(game.current_player).to eq peter
|
16
15
|
end
|
17
|
-
|
18
|
-
it
|
16
|
+
|
17
|
+
it 'will set @other_player to @current_player' do
|
19
18
|
current_player = bob
|
20
19
|
other_player = peter
|
21
20
|
game.switch_players
|
@@ -23,16 +22,15 @@ module ChessVwong
|
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
26
|
-
context
|
27
|
-
it
|
25
|
+
context '#game_over' do
|
26
|
+
it 'should return winner if king has just been killed' do
|
28
27
|
game.current_player.kill_list << king
|
29
28
|
expect(game.game_over).to eq game.current_player
|
30
29
|
end
|
31
30
|
|
32
|
-
it
|
31
|
+
it 'should return false if no King' do
|
33
32
|
expect(game.game_over).to eq false
|
34
|
-
end
|
33
|
+
end
|
35
34
|
end
|
36
|
-
|
37
35
|
end
|
38
|
-
end
|
36
|
+
end
|
data/spec/king_spec.rb
CHANGED
@@ -1,51 +1,47 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module ChessVwong
|
4
|
-
describe King do
|
5
|
-
let (:current_space) { [1,1]}
|
6
|
-
let (:king) { King.new(current_space,
|
7
|
-
context
|
8
|
-
it
|
9
|
-
expect(king.color).to eq
|
4
|
+
describe King do
|
5
|
+
let (:current_space) { [1, 1] }
|
6
|
+
let (:king) { King.new(current_space, 'w') }
|
7
|
+
context '#initialize' do
|
8
|
+
it 'should return Piece attributes: color' do
|
9
|
+
expect(king.color).to eq 'w'
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'should return Piece attributes: current_space' do
|
13
13
|
expect(king.current_space).to eq current_space
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context
|
18
|
-
it
|
19
|
-
expect(king.character).to eq "\u{
|
17
|
+
context '#character' do
|
18
|
+
it 'should return a white king character' do
|
19
|
+
expect(king.character).to eq "\u{2654}"
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
king_2 = King.new(current_space,
|
24
|
-
expect(king_2.character).to eq "\u{
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context "#generate_neighbours" do
|
22
|
+
it 'should return a black king character' do
|
23
|
+
king_2 = King.new(current_space, 'b')
|
24
|
+
expect(king_2.character).to eq "\u{265A}"
|
25
|
+
end
|
26
|
+
end
|
29
27
|
|
30
|
-
|
28
|
+
context '#generate_neighbours' do
|
29
|
+
it 'should return only 16 neighbour when [1,1]' do
|
31
30
|
king.generate_neighbours(current_space)
|
32
31
|
expect(king.neighbours.count).to eq 3
|
33
32
|
end
|
34
33
|
|
35
|
-
it
|
36
|
-
current_space = [8,8]
|
34
|
+
it 'should return only 14 neighbour when [8,8]' do
|
35
|
+
current_space = [8, 8]
|
37
36
|
king.generate_neighbours(current_space)
|
38
37
|
expect(king.neighbours.count).to eq 3
|
39
38
|
end
|
40
39
|
|
41
|
-
it
|
42
|
-
current_space = [3,3]
|
40
|
+
it 'should return only 14 neighbour when in the middle' do
|
41
|
+
current_space = [3, 3]
|
43
42
|
king.generate_neighbours(current_space)
|
44
43
|
expect(king.neighbours.count).to eq 8
|
45
|
-
end
|
46
|
-
|
44
|
+
end
|
47
45
|
end
|
48
|
-
|
49
|
-
|
50
46
|
end
|
51
|
-
end
|
47
|
+
end
|
data/spec/knight_spec.rb
CHANGED
@@ -1,73 +1,71 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module ChessVwong
|
4
|
-
describe Knight do
|
5
|
-
let (:current_space) {[1,1]}
|
6
|
-
let (:knight) { Knight.new(current_space,
|
7
|
-
context
|
8
|
-
it
|
9
|
-
expect(knight.color).to eq
|
4
|
+
describe Knight do
|
5
|
+
let (:current_space) { [1, 1] }
|
6
|
+
let (:knight) { Knight.new(current_space, 'w') }
|
7
|
+
context '#initialize' do
|
8
|
+
it 'should return Piece attributes: color' do
|
9
|
+
expect(knight.color).to eq 'w'
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
12
|
+
it 'should return Piece attributes: current_space' do
|
13
13
|
expect(knight.current_space).to eq current_space
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
context
|
18
|
-
it
|
19
|
-
expect(knight.character).to eq "\u{
|
17
|
+
context '#character' do
|
18
|
+
it 'should return a white knight character' do
|
19
|
+
expect(knight.character).to eq "\u{2658}"
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
knight_2 = Knight.new(current_space,
|
24
|
-
expect(knight_2.character).to eq "\u{
|
25
|
-
end
|
26
|
-
end
|
22
|
+
it 'should return a black knight character' do
|
23
|
+
knight_2 = Knight.new(current_space, 'b')
|
24
|
+
expect(knight_2.character).to eq "\u{265E}"
|
25
|
+
end
|
26
|
+
end
|
27
27
|
|
28
|
-
context
|
29
|
-
it
|
28
|
+
context '#generate_neighbours' do
|
29
|
+
it 'should return only 2 neighbour when [1,1]' do
|
30
30
|
knight.generate_neighbours(current_space)
|
31
31
|
expect(knight.neighbours.count).to eq 2
|
32
32
|
end
|
33
33
|
|
34
|
-
it
|
35
|
-
current_space = [8,8]
|
34
|
+
it 'should return only 2 neighbour when [7,7]' do
|
35
|
+
current_space = [8, 8]
|
36
36
|
knight.generate_neighbours(current_space)
|
37
37
|
expect(knight.neighbours.count).to eq 2
|
38
38
|
end
|
39
39
|
|
40
|
-
it
|
41
|
-
current_space = [1,4]
|
40
|
+
it 'should return only 4 neighbour when on left edge' do
|
41
|
+
current_space = [1, 4]
|
42
42
|
knight.generate_neighbours(current_space)
|
43
43
|
expect(knight.neighbours.count).to eq 4
|
44
44
|
end
|
45
45
|
|
46
|
-
it
|
47
|
-
current_space = [8,4]
|
46
|
+
it 'should return only 4 neighbour when on right edge' do
|
47
|
+
current_space = [8, 4]
|
48
48
|
knight.generate_neighbours(current_space)
|
49
49
|
expect(knight.neighbours.count).to eq 4
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
53
|
-
current_space = [4,1]
|
52
|
+
it 'should return only 4 neighbour when on top edge' do
|
53
|
+
current_space = [4, 1]
|
54
54
|
knight.generate_neighbours(current_space)
|
55
55
|
expect(knight.neighbours.count).to eq 4
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
59
|
-
current_space = [4,8]
|
58
|
+
it 'should return only 4 neighbour when on right edge' do
|
59
|
+
current_space = [4, 8]
|
60
60
|
knight.generate_neighbours(current_space)
|
61
61
|
expect(knight.neighbours.count).to eq 4
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
65
|
-
current_space = [4,4]
|
64
|
+
it 'should return 8 neighbour when in middle' do
|
65
|
+
current_space = [4, 4]
|
66
66
|
knight.generate_neighbours(current_space)
|
67
67
|
expect(knight.neighbours.count).to eq 8
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
71
|
-
|
72
70
|
end
|
73
|
-
end
|
71
|
+
end
|
data/spec/node_spec.rb
CHANGED
@@ -1,24 +1,23 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module ChessVwong
|
4
|
-
describe Node do
|
5
|
-
let (:node) { Node.new}
|
6
|
-
let (:knight) { Knight.new(node,
|
4
|
+
describe Node do
|
5
|
+
let (:node) { Node.new }
|
6
|
+
let (:knight) { Knight.new(node, 'w') }
|
7
7
|
|
8
|
-
context
|
8
|
+
context '#intialize' do
|
9
9
|
# it "is initialized with x,y coordinates for its value" do
|
10
10
|
# expect(node.value).to eq [0,0]
|
11
11
|
# end
|
12
12
|
|
13
|
-
it
|
13
|
+
it 'defaults to unoccupied' do
|
14
14
|
expect(node.occupied).to eq []
|
15
|
-
end
|
15
|
+
end
|
16
16
|
|
17
|
-
it
|
17
|
+
it 'can accept pieces as occupants' do
|
18
18
|
node.occupied << knight
|
19
19
|
expect(node.occupied).to eq [knight]
|
20
|
-
end
|
20
|
+
end
|
21
21
|
end
|
22
|
-
|
23
22
|
end
|
24
|
-
end
|
23
|
+
end
|
data/spec/pawn_spec.rb
CHANGED
@@ -1,112 +1,110 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module ChessVwong
|
4
|
-
describe Pawn do
|
5
|
-
let (:current_space) { [1,1]}
|
6
|
-
let (:board) { Board.new}
|
7
|
-
let (:node) { Node.new}
|
8
|
-
let (:pawn) { Pawn.new(current_space,
|
9
|
-
let (:pawn_2) { Pawn.new(current_space,
|
10
|
-
context
|
11
|
-
it
|
12
|
-
expect(pawn.color).to eq
|
4
|
+
describe Pawn do
|
5
|
+
let (:current_space) { [1, 1] }
|
6
|
+
let (:board) { Board.new }
|
7
|
+
let (:node) { Node.new }
|
8
|
+
let (:pawn) { Pawn.new(current_space, 'w') }
|
9
|
+
let (:pawn_2) { Pawn.new(current_space, 'b') }
|
10
|
+
context '#initialize' do
|
11
|
+
it 'should return Piece attributes: color' do
|
12
|
+
expect(pawn.color).to eq 'w'
|
13
13
|
end
|
14
14
|
|
15
|
-
it
|
15
|
+
it 'should return Piece attributes: current_space' do
|
16
16
|
expect(pawn.current_space).to eq current_space
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
context
|
21
|
-
it
|
22
|
-
expect(pawn.character).to eq "\u{
|
20
|
+
context '#character' do
|
21
|
+
it 'should return a white pawn character' do
|
22
|
+
expect(pawn.character).to eq "\u{2659}"
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
26
|
-
expect(pawn_2.character).to eq "\u{
|
27
|
-
end
|
28
|
-
end
|
25
|
+
it 'should return a black pawn character' do
|
26
|
+
expect(pawn_2.character).to eq "\u{265F}"
|
27
|
+
end
|
28
|
+
end
|
29
29
|
|
30
|
-
context
|
31
|
-
it
|
30
|
+
context '#generate_neighbours' do
|
31
|
+
it 'should return only 0 neighbour when [1,1] and White' do
|
32
32
|
pawn.generate_neighbours(current_space, node, node)
|
33
33
|
expect(pawn.neighbours.count).to eq 0
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
37
|
-
current_space = [7,7]
|
36
|
+
it 'should return only 4 neighbours if First move and white' do
|
37
|
+
current_space = [7, 7]
|
38
38
|
pawn.generate_neighbours(current_space, node, node)
|
39
39
|
expect(pawn.neighbours.count).to eq 2
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
43
|
-
current_space = [2,2]
|
42
|
+
it 'should return 4 moves if First move and Black' do
|
43
|
+
current_space = [2, 2]
|
44
44
|
pawn.generate_neighbours(current_space, node, node)
|
45
45
|
pawn_2.generate_neighbours(current_space, node, node)
|
46
46
|
expect(pawn_2.neighbours.count).to eq 2
|
47
47
|
end
|
48
48
|
|
49
|
-
it
|
50
|
-
current_space = [8,8]
|
49
|
+
it 'should return only 2 neighbour when [8,8] and Black' do
|
50
|
+
current_space = [8, 8]
|
51
51
|
pawn_2.generate_neighbours(current_space, node, node)
|
52
52
|
expect(pawn_2.neighbours.count).to eq 0
|
53
53
|
end
|
54
54
|
|
55
|
-
it
|
56
|
-
current_space = [3,3]
|
55
|
+
it 'should return only 3 neighbour when in the middle' do
|
56
|
+
current_space = [3, 3]
|
57
57
|
pawn.generate_neighbours(current_space, node, node)
|
58
58
|
expect(pawn.neighbours.count).to eq 1
|
59
|
-
end
|
59
|
+
end
|
60
60
|
end
|
61
61
|
|
62
|
-
context
|
63
|
-
it
|
64
|
-
current_space = [2,2]
|
62
|
+
context 'kill_move' do
|
63
|
+
it 'should return Kill Moves for Black Pawn' do
|
64
|
+
current_space = [2, 2]
|
65
65
|
enemy_node1 = board.grid[3][3]
|
66
66
|
enemy_node1.occupied << pawn
|
67
67
|
enemy_node2 = board.grid[3][1]
|
68
68
|
enemy_node2.occupied << pawn
|
69
|
-
expect(pawn_2.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 4
|
69
|
+
expect(pawn_2.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 4
|
70
70
|
end
|
71
71
|
|
72
|
-
it
|
73
|
-
current_space = [2,2]
|
74
|
-
expect(pawn_2.generate_neighbours(current_space, node, node).count).to eq 2
|
75
|
-
end
|
72
|
+
it 'should not return Kill Moves for Black Pawn if empty' do
|
73
|
+
current_space = [2, 2]
|
74
|
+
expect(pawn_2.generate_neighbours(current_space, node, node).count).to eq 2
|
75
|
+
end
|
76
76
|
|
77
|
-
it
|
78
|
-
current_space = [2,2]
|
77
|
+
it 'should not return Kill Moves for Black Pawn if blocked by same color' do
|
78
|
+
current_space = [2, 2]
|
79
79
|
enemy_node1 = board.grid[3][3]
|
80
80
|
enemy_node1.occupied << pawn_2
|
81
81
|
enemy_node2 = board.grid[3][1]
|
82
82
|
enemy_node2.occupied << pawn_2
|
83
|
-
expect(pawn_2.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 2
|
84
|
-
end
|
83
|
+
expect(pawn_2.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 2
|
84
|
+
end
|
85
85
|
|
86
|
-
it
|
87
|
-
current_space = [7,7]
|
86
|
+
it 'should return Kill Moves for White Pawn' do
|
87
|
+
current_space = [7, 7]
|
88
88
|
enemy_node1 = board.grid[6][6]
|
89
89
|
enemy_node1.occupied << pawn_2
|
90
90
|
enemy_node2 = board.grid[6][8]
|
91
91
|
enemy_node2.occupied << pawn_2
|
92
|
-
expect(pawn.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 4
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should not return Kill Moves for White Pawn if empty" do
|
96
|
-
current_space = [7,7]
|
97
|
-
expect(pawn.generate_neighbours(current_space, node, node).count).to eq 2
|
92
|
+
expect(pawn.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 4
|
93
|
+
end
|
98
94
|
|
99
|
-
|
95
|
+
it 'should not return Kill Moves for White Pawn if empty' do
|
96
|
+
current_space = [7, 7]
|
97
|
+
expect(pawn.generate_neighbours(current_space, node, node).count).to eq 2
|
98
|
+
end
|
100
99
|
|
101
|
-
it
|
102
|
-
current_space = [7,7]
|
100
|
+
it 'should not return Kill Moves for White Pawn if blocked by same color' do
|
101
|
+
current_space = [7, 7]
|
103
102
|
enemy_node1 = board.grid[6][6]
|
104
103
|
enemy_node1.occupied << pawn
|
105
104
|
enemy_node2 = board.grid[6][8]
|
106
105
|
enemy_node2.occupied << pawn
|
107
|
-
expect(pawn.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 2
|
108
|
-
end
|
106
|
+
expect(pawn.generate_neighbours(current_space, enemy_node1, enemy_node2).count).to eq 2
|
107
|
+
end
|
109
108
|
end
|
110
|
-
|
111
109
|
end
|
112
|
-
end
|
110
|
+
end
|
data/spec/piece_spec.rb
CHANGED
@@ -1,53 +1,53 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module ChessVwong
|
4
|
-
describe Piece do
|
5
|
-
let (:current_space) {[1,1]}
|
6
|
-
let (:piece) { Piece.new(current_space,
|
4
|
+
describe Piece do
|
5
|
+
let (:current_space) { [1, 1] }
|
6
|
+
let (:piece) { Piece.new(current_space, 'w') }
|
7
7
|
|
8
|
-
context
|
9
|
-
it
|
8
|
+
context '#initialize' do
|
9
|
+
it 'should initialize with current_space' do
|
10
10
|
expect(piece.current_space).to eq current_space
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
14
|
-
expect(piece.color).to eq
|
13
|
+
it 'should initialize with current_space' do
|
14
|
+
expect(piece.color).to eq 'w'
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
context
|
19
|
-
it
|
20
|
-
neighouring_space = [4,4]
|
18
|
+
context '#neighbours' do
|
19
|
+
it 'should contain neighouring spaces' do
|
20
|
+
neighouring_space = [4, 4]
|
21
21
|
piece.neighbours << neighouring_space
|
22
|
-
expect(piece.neighbours).to eq [[4,4]]
|
22
|
+
expect(piece.neighbours).to eq [[4, 4]]
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
context
|
27
|
-
it
|
28
|
-
valid_space = [5,5]
|
26
|
+
context '#valid_space?' do
|
27
|
+
it 'should return true if valid' do
|
28
|
+
valid_space = [5, 5]
|
29
29
|
expect(piece.valid_space?(valid_space)).to eq true
|
30
30
|
end
|
31
31
|
|
32
|
-
it
|
32
|
+
it 'should return nil if x < 0' do
|
33
33
|
invalid_space = [-1, 5]
|
34
34
|
expect(piece.valid_space?(invalid_space)).to eq nil
|
35
35
|
end
|
36
36
|
|
37
|
-
it
|
38
|
-
invalid_space = [9,5]
|
37
|
+
it 'should return nil if x > 9' do
|
38
|
+
invalid_space = [9, 5]
|
39
39
|
expect(piece.valid_space?(invalid_space)).to eq nil
|
40
40
|
end
|
41
41
|
|
42
|
-
it
|
43
|
-
invalid_space = [5
|
42
|
+
it 'should return nil if y < 0' do
|
43
|
+
invalid_space = [5, -1]
|
44
44
|
expect(piece.valid_space?(invalid_space)).to eq nil
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
48
|
-
invalid_space = [5,9]
|
47
|
+
it 'should return nil if y > 9' do
|
48
|
+
invalid_space = [5, 9]
|
49
49
|
expect(piece.valid_space?(invalid_space)).to eq nil
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|