chess_vwong 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0fef94857588ea8e0075792e5d00e17bdcb59027
4
+ data.tar.gz: 0ce26be57dff21eac0ccdcd316f7e1b57ca6d807
5
+ SHA512:
6
+ metadata.gz: 2d7d20933510dbe53257fc26c64d49a6b7027a1464762b1d3d151914f952f2a45e83d4c41f9c53030b7861ccd277c26480f68401aaa12b299932475e2b98d45b
7
+ data.tar.gz: 3e8d19fac4928cad5b852093e61b8efdb8d6c7264f390c77659faf28eb2b51cbecebfce185cf89a31dd37143698cbe0d830c8001b35c072b871d313085a8e887
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in chess_vwong.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Vincent Wong
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # Chess
2
+
3
+ A barebones version of command-line Chess for 2 players.
4
+
5
+ TODO:
6
+ 1. Alert Check/Mate
7
+ 2. Castling & En-Passant Moves
8
+
9
+ ##Gameplay
10
+ The game is played on a standard 8 by 8 board as show below.
11
+
12
+ A B C D E F G H
13
+ 8 ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
14
+ 7 ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
15
+ 6 _ _ _ _ _ _ _ _
16
+ 5 _ _ _ _ _ _ _ _
17
+ 4 _ _ _ _ _ _ _ _
18
+ 3 _ _ _ _ _ _ _ _
19
+ 2 ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
20
+ 1 ♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
21
+
22
+ A user will first be prompted to select a chess piece belonging to his/her color. Once a the chess piece has been chosen, he/she will then be prompted to select a space to move that chess piece.
23
+
24
+ To enter a command, simply type in the X and Y coordinate without any spaces or commas seperating the two, for example:
25
+ * A2
26
+ * H7
27
+
28
+ (Lowercases are also accepted)
29
+
30
+ If a command is invalid, the use will be alerted and prompted again until a valid command is entered.
31
+
32
+
33
+
34
+ ## Installation
35
+
36
+ To install:
37
+
38
+ $ gem install chess_vwong
39
+
40
+ ## Usage
41
+
42
+ TODO: Write usage instructions here
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it ( https://github.com/[my-github-username]/chess_vwong/fork )
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create a new Pull Request
51
+
52
+
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ desc "Play Chess"
2
+ task :play do
3
+ ruby "-w bin/chess_vwong.rb"
4
+ end
data/bin/chess_vwong ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ require 'chess_vwong'
3
+
4
+ puts "Welcome to Chess"
5
+ puts "Player 1, please Enter your name:"
6
+ name_1 = gets.chomp
7
+ puts "Player 2, please Enter your name:"
8
+ name_2 = gets.chomp
9
+ puts ""
10
+
11
+ puts "---------------------------"
12
+ puts "#{name_1} will be White"
13
+ puts "#{name_2} will be Black"
14
+ puts "---------------------------"
15
+ puts ""
16
+ puts "Let's begin!"
17
+
18
+ bob = ChessVwong::Player.new(name_1, "w")
19
+ peter = ChessVwong::Player.new(name_2, "b")
20
+ players = [bob, peter]
21
+ ChessVwong::Game.new(players).play
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'chess_vwong/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "chess_vwong"
8
+ spec.version = ChessVwong::VERSION
9
+ spec.authors = ["Vincent Wong"]
10
+ spec.email = ["wingyu64@gmail.com"]
11
+ spec.summary = %q{2-player CLI Chess}
12
+ spec.description = %q{2-player CLI Chess}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = "chess_vwong"#spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "rspec"
24
+ end
@@ -0,0 +1,20 @@
1
+ require_relative "../lib/chess_vwong.rb"
2
+
3
+ puts "Welcome to Chess"
4
+ puts "Player 1, please Enter your name:"
5
+ name_1 = gets.chomp
6
+ puts "Player 2, please Enter your name:"
7
+ name_2 = gets.chomp
8
+ puts ""
9
+
10
+ puts "---------------------------"
11
+ puts "#{name_1} will be White"
12
+ puts "#{name_2} will be Black"
13
+ puts "---------------------------"
14
+ puts ""
15
+ puts "Let's begin!"
16
+
17
+ bob = ChessVwong::Player.new(name_1, "w")
18
+ peter = ChessVwong::Player.new(name_2, "b")
19
+ players = [bob, peter]
20
+ ChessVwong::Game.new(players).play
@@ -0,0 +1,22 @@
1
+ module ChessVwong
2
+ class Bishop < Piece
3
+
4
+ def character
5
+ color == "w" ? "\u{265D}" : "\u{2657}"
6
+ end
7
+
8
+ # Generate all possible Neighbouring Nodes
9
+ def generate_neighbours(current_space)
10
+ moves = []
11
+ (1..8).each {|i| moves << [i, i]}
12
+ (1..8).each {|i| moves << [i, -i]}
13
+ (1..8).each {|i| moves << [-i, i]}
14
+ (1..8).each {|i| moves << [-i, -i]}
15
+ moves.each do |move|
16
+ neigbour_helper(current_space, move[0], move[1])
17
+ end
18
+ end
19
+
20
+ end
21
+ end
22
+
@@ -0,0 +1,207 @@
1
+ module ChessVwong
2
+ class Board
3
+ attr_reader :grid
4
+ attr_accessor :chosen_piece, :node_path, :get_value
5
+
6
+ def initialize
7
+ @grid = default_grid
8
+ end
9
+
10
+ # Convert letter/number input into grid coordinates, if improper coordinates: empty array is returned
11
+ def process_input(input)
12
+ if input[0] =~ /[A-Za-z]/
13
+ grid_values = input.tr!("87654321", "12345678")
14
+ grid_values = input.upcase.tr!("ABCDEFGH", "12345678")
15
+ grid_values = grid_values.split("")
16
+ grid_values.map! {|i|i.to_i}
17
+ else
18
+ return []
19
+ end
20
+ end
21
+
22
+ # Get piece & generate neighbours, extra helper-methods required for Pawns due to unique nature
23
+ def get_piece(input=gets.chomp, player)
24
+ @get_value = process_input(input)
25
+ if get_value.count ==2
26
+ chosen_node = grid[get_value[1]][get_value[0]]
27
+ unless chosen_node.occupied.empty? || chosen_node.occupied.first.color != player.color
28
+ @chosen_piece = chosen_node.occupied.pop()
29
+ chosen_piece.instance_of?(Pawn) ? pawn_kill_helper(chosen_piece, get_value) : @chosen_piece.generate_neighbours(get_value)
30
+ return @chosen_piece
31
+ end
32
+ end
33
+ end
34
+
35
+ # Sets piece if within neighbour range & valid, also checks if pawn can beome Queen
36
+ def set_piece(input=gets.chomp, player)
37
+ value = process_input(input)
38
+ if value.count ==2
39
+ chosen_node = grid[value[1]][value[0]]
40
+ if chosen_piece.neighbours.include?(value) && valid_path?(@get_value, value)
41
+ chosen_piece.current_space = value
42
+ chosen_node.occupied << chosen_piece
43
+ player.kill_list << chosen_node.occupied.shift() if chosen_node.occupied.count > 1
44
+ pawn_to_queen(chosen_piece, chosen_node) if chosen_piece.instance_of?(Pawn)
45
+ return chosen_node.occupied
46
+ end
47
+ end
48
+ end
49
+
50
+ # Print's out Board
51
+ def formatted_grid
52
+ grid.each do |row|
53
+ puts row.map { |node| node.occupied.empty? ? "_" : node.occupied.first.character}.join(" ")
54
+ end
55
+ end
56
+
57
+
58
+
59
+ #Checks if path is valid
60
+ def valid_path?(start, dest)
61
+ #if End node is empty OR end_node is occupied with enemy_piece then check if path is clear
62
+ if grid[dest[1]][dest[0]].occupied.empty? || !grid[dest[1]][dest[0]].occupied.empty? && grid[dest[1]][dest[0]].occupied.first.color != chosen_piece.color
63
+ chosen_piece.instance_of?(Knight) ? true : clear_path?(start, dest)
64
+ else
65
+ false
66
+ end
67
+ end
68
+
69
+
70
+ def scan_for_check
71
+ # execute it for selected piece that was most recently moves AND every king move
72
+ end
73
+
74
+ #Checks if path is clear [x,y] = grid[y][x]
75
+ def clear_path?(start, dest)
76
+ if (start[0] < dest[0] && start[1] > dest[1]) || (start[0] > dest[0] && start[1] < dest[1])
77
+ rising_path(start, dest)
78
+ elsif (start[0] < dest[0] && start[1] < dest[1]) || (start[0] > dest[0] && start[1] > dest[1])
79
+ falling_path(start, dest)
80
+ elsif start[1] != dest[1]
81
+ vertical_path(start, dest)
82
+ elsif start[0] != dest[0]
83
+ horizontal_path(start, dest)
84
+ end
85
+ return process_path
86
+ end
87
+
88
+
89
+
90
+ def vertical_path(start, dest)
91
+ @node_path = []
92
+ # DOWN
93
+ if start[1] < dest[1]
94
+ (start[1]...dest[1]).each do |i|
95
+ node_path << grid[i][start[0]]
96
+ end
97
+ # UP
98
+ elsif start[1] > dest[1]
99
+ start[1].step(dest[1]+1, -1) do |i|
100
+ node_path << grid[i][start[0]]
101
+ end
102
+ end
103
+ node_path
104
+ end
105
+
106
+ def horizontal_path(start, dest)
107
+ @node_path = []
108
+ # RIGHT
109
+ if start[0] < dest[0]
110
+ (start[0]...dest[0]).each do |i|
111
+ node_path << grid[start[1]][i]
112
+ end
113
+ # LEFT
114
+ elsif start[0] > dest[0]
115
+ start[0].step(dest[0]+1, -1) do |i|
116
+ node_path << grid[start[1]][i]
117
+ end
118
+ end
119
+ node_path
120
+ end
121
+
122
+ def rising_path(start, dest)
123
+ @node_path = []
124
+ i = 0
125
+ j = start[0]
126
+ #UP_RIGHT
127
+ if start[0] < dest[0] && start[1] > dest[1]
128
+ while j < dest[0]
129
+ node_path << grid[start[1] - i][start[0]+i]
130
+ i += 1
131
+ j += 1
132
+ end
133
+ #DOWN_LEFT
134
+ elsif start[0] > dest[0] && start[1] < dest[1]
135
+ while j > dest[0]
136
+ node_path << grid[start[1] + i][start[0]-i]
137
+ i += 1
138
+ j -= 1
139
+ end
140
+ end
141
+ node_path
142
+ end
143
+
144
+ def falling_path(start, dest)
145
+ @node_path = []
146
+ i = 0
147
+ j = start[0]
148
+ # DOWN_RIGHT
149
+ if start[0] < dest[0] && start[1] < dest[1]
150
+ while j < dest[0]
151
+ node_path << grid[start[1] + i][start[0]+i]
152
+ i += 1
153
+ j += 1
154
+ end
155
+ # UP_LEFT
156
+ elsif start[0] > dest[0] && start[1] > dest[1]
157
+ while j > dest[0]
158
+ node_path << grid[start[1]-i][start[0]-i]
159
+ i += 1
160
+ j -= 1
161
+ end
162
+ end
163
+ node_path
164
+ end
165
+
166
+
167
+ private
168
+ def default_grid
169
+ Array.new(9) { Array.new(9) { Node.new } }
170
+ end
171
+
172
+ # Goes through each node to see if it's Blocked
173
+ def process_path
174
+ node_path.each do |node|
175
+ unless node.occupied.empty?
176
+ return false
177
+ end
178
+ end
179
+ end
180
+
181
+ # if Pawn is selected, nearby spaces analyzed if enemries are present, if so they have additional moves
182
+ def pawn_kill_helper(chosen_piece, get_value)
183
+ if chosen_piece.color == "w"
184
+ node1 = grid[get_value[1] - 1][get_value[0] - 1]
185
+ node2 = grid[get_value[1] - 1][get_value[0] + 1]
186
+ @chosen_piece.generate_neighbours(get_value, node1, node2)
187
+ else
188
+ node1 = grid[get_value[1] + 1][get_value[0] - 1]
189
+ node2 = grid[get_value[1] + 1][get_value[0] + 1]
190
+ @chosen_piece.generate_neighbours(get_value, node1, node2)
191
+ end
192
+ end
193
+
194
+ def pawn_to_queen(pawn, current_node)
195
+ if pawn.color == "w" && pawn.current_space[1] == 1
196
+ current_node.occupied.pop()
197
+ current_node.occupied << Queen.new(pawn.current_space, "w")
198
+ elsif pawn.color == "b" && pawn.current_space[1] == 8
199
+ current_node.occupied.pop()
200
+ current_node.occupied << Queen.new(pawn.current_space, "b")
201
+ end
202
+ end
203
+
204
+ end
205
+ end
206
+
207
+
@@ -0,0 +1,73 @@
1
+ module ChessVwong
2
+ class Game
3
+ attr_reader :current_player, :other_player
4
+ attr_reader :board
5
+ def initialize(players, board = Board.new)
6
+ @current_player = players[0]
7
+ @other_player = players[1]
8
+ @board = board
9
+ end
10
+
11
+ def switch_players
12
+ @current_player, @other_player = @other_player, @current_player
13
+ end
14
+
15
+
16
+
17
+ def game_over
18
+ return current_player if current_player.kill_list.last.instance_of?(King)
19
+ false
20
+ end
21
+
22
+
23
+ def play
24
+ board.preload_pieces
25
+ while true
26
+ board.formatted_grid
27
+ puts ""
28
+ solicit_get_piece
29
+ puts ""
30
+ solicit_set_piece
31
+ if game_over
32
+ puts game_over_message
33
+ board.formatted_grid
34
+ return
35
+ else
36
+ switch_players
37
+ end
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def solicit_get_piece
44
+ loop do
45
+ puts "#{current_player.name}, Select a piece:"
46
+ if board.get_piece(current_player)
47
+ break
48
+ else
49
+ puts "Invalid Input!"
50
+ end
51
+ end
52
+ end
53
+
54
+ def solicit_set_piece
55
+ loop do
56
+ puts "#{current_player.name}, Select a destination:"
57
+ if board.set_piece(current_player)
58
+ break
59
+ else
60
+ puts "Invalid Move!"
61
+ end
62
+ end
63
+ end
64
+
65
+ def game_over_message
66
+ "#{current_player.name} wins!"
67
+ end
68
+
69
+
70
+ end
71
+ end
72
+
73
+
@@ -0,0 +1,17 @@
1
+ module ChessVwong
2
+ class King < Piece
3
+
4
+ def character
5
+ color == "w" ? "\u{265A}" : "\u{2654}"
6
+ end
7
+
8
+ # Generate all possible Neighbouring Spaces
9
+ def generate_neighbours(current_space)
10
+ moves = [[ 1, 0], [-1, 0], [0, 1], [0, -1], [-1, 1], [1, -1], [1,1], [-1,-1]]
11
+ moves.each do |move|
12
+ neigbour_helper(current_space, move[0], move[1])
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module ChessVwong
2
+ class Knight < Piece
3
+
4
+ def character
5
+ color == "w" ? "\u{265E}" : "\u{2658}"
6
+ end
7
+
8
+ # Generate all possible Neighbouring Spaces
9
+ def generate_neighbours(current_space)
10
+ moves = [[ 1, 2], [-1, 2], [ 1,-2], [-1,-2], [ 2, 1], [-2, 1], [ 2,-1], [-2,-1]]
11
+ moves.each do |move|
12
+ neigbour_helper(current_space, move[0], move[1])
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module ChessVwong
2
+ class Node
3
+ attr_accessor :occupied, :visited
4
+ def initialize
5
+ @occupied = []
6
+ @visited = []
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,44 @@
1
+ module ChessVwong
2
+ class Pawn < Piece
3
+
4
+ def character
5
+ color == "w" ? "\u{265F}" : "\u{2659}"
6
+ end
7
+
8
+ # Generate all possible Neighbouring Spaces
9
+ def generate_neighbours(current_space, node1=nil, node2=nil)
10
+ color == "w" ? moves = [[0, -1]] : moves = [[0, 1]]
11
+ first_turn?(current_space, moves)
12
+ kill_move(node1, node2, moves)
13
+ moves.each do |move|
14
+ neigbour_helper(current_space, move[0], move[1])
15
+ end
16
+ end
17
+
18
+ # if there is a enemy piece nearby, then give option to attack
19
+ def kill_move(node1, node2, moves)
20
+ if color == "w"
21
+ moves << [-1,-1] if node1 &&!node1.occupied.empty? && node1.occupied.first.color == "b"
22
+ moves << [1,-1] if node2 && !node2.occupied.empty? && node2.occupied.first.color == "b"
23
+ else
24
+ moves << [-1,1] if node1 && !node1.occupied.empty? && node1.occupied.first.color == "w"
25
+ moves << [1,1] if node2 && !node2.occupied.empty? && node2.occupied.first.color == "w"
26
+ end
27
+ end
28
+
29
+
30
+ private
31
+
32
+ def first_turn?(current_space, moves)
33
+ if current_space[1] == 2 #Black
34
+ moves << [0,2]
35
+ elsif current_space[1] == 7 #White
36
+ moves << [0,-2]
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+
44
+
@@ -0,0 +1,34 @@
1
+ module ChessVwong
2
+ class Piece
3
+ attr_reader :color
4
+ attr_accessor :neighbours, :current_space
5
+ def initialize(current_space, color)
6
+ @current_space = current_space
7
+ @color = color
8
+ @neighbours = []
9
+ end
10
+
11
+ # Ensuring the pieces can't go off board
12
+ def valid_space?(space)
13
+ true if space.all? {|coordinate| coordinate >= 1 && coordinate <9}
14
+ end
15
+
16
+ def character
17
+ return color
18
+ end
19
+
20
+ private
21
+
22
+ # Create 1 new Neighbouring space
23
+ def neigbour_helper(current_space, x, y)
24
+ new_x = current_space[0] + x
25
+ new_y = current_space[1] + y
26
+ neighbour = [new_x, new_y]
27
+ self.neighbours << neighbour if valid_space?(neighbour)
28
+ end
29
+
30
+
31
+
32
+ end
33
+ end
34
+
@@ -0,0 +1,12 @@
1
+ module ChessVwong
2
+ class Player
3
+ attr_reader :name, :color
4
+ attr_accessor :kill_list, :chosen_piece
5
+ def initialize(name, color="w")
6
+ @name = name
7
+ @color = color
8
+ @kill_list = []
9
+ @chosen_piece = []
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,65 @@
1
+ module ChessVwong
2
+ class Board
3
+ # private
4
+ # White on the Bottom, Black on Top
5
+ def preload_pieces
6
+ white_pieces = [Rook.new([0,7], "w"), Knight.new([1,7], "w"), Bishop.new([2,7], "w"), Queen.new([3,7], "w"),
7
+ King.new([4,7], "w"), Bishop.new([5,7], "w"), Knight.new([6,7], "w"), Rook.new([7,7], "w")]
8
+
9
+ black_pieces = [Rook.new([0,0], "b"), Knight.new([1,0], "b"), Bishop.new([2,0], "b"), Queen.new([3,0], "b"),
10
+ King.new([4,0], "b"), Bishop.new([5,0], "b"), Knight.new([6,0], "b"), Rook.new([7,0], "b")]
11
+
12
+
13
+
14
+
15
+ #Load Coord-Displays
16
+ load_alphabet(grid[0])
17
+ load_num_coord
18
+ # Black Pawns
19
+ load_pawns(grid[2], "b")
20
+ #White Pawns
21
+ load_pawns(grid[7], "w")
22
+ # White Pieces
23
+ load_back_pieces(grid[1], black_pieces)
24
+ #Black Pieces
25
+ load_back_pieces(grid[8], white_pieces)
26
+
27
+ end
28
+ private
29
+ def load_pawns(row, color)
30
+ i = 0
31
+ row.each do |node|
32
+ node.occupied << Pawn.new([i,1],color)
33
+ i += 1
34
+ end
35
+ end
36
+
37
+ def load_alphabet(row)
38
+ alphabet = ("A".."H").to_a
39
+ i = 0
40
+ while i < 8
41
+ row[i+1].occupied << Piece.new([0,0], alphabet[i])
42
+ i += 1
43
+ end
44
+ end
45
+
46
+ def load_num_coord
47
+ i = 8
48
+ j=1
49
+ while i > 0
50
+ grid[j][0].occupied << Piece.new([0,0], i)
51
+ i -= 1
52
+ j += 1
53
+ end
54
+ end
55
+
56
+ def load_back_pieces(row, pieces)
57
+ i = 0
58
+ while i < 8
59
+ row[i+1].occupied << pieces[i]
60
+ i += 1
61
+ end
62
+ end
63
+
64
+ end
65
+ end