Skip to content

Commit 653051f

Browse files
committed
Refactored the play loop.
1 parent 84f56b5 commit 653051f

File tree

2 files changed

+21
-26
lines changed

2 files changed

+21
-26
lines changed

chess.rb

+14-26
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def initialize(white, black)
77
@player1 = white
88
@player2 = black
99
@move_count = 0
10-
@curr_player = :w
10+
@curr_player = @player1
1111
end
1212

1313
def play
@@ -16,35 +16,23 @@ def play
1616
until @board.checkmate?(:w) || @board.checkmate?(:b)
1717
system('clear')
1818
@board.display
19-
if @move_count.even?
20-
begin
21-
puts "Check." if @board.in_check?(:w)
22-
puts "Player 1:"
23-
start, target = @player1.play_turn
24-
make_move(:w, start, target)
25-
rescue RuntimeError => e
26-
puts e.message
27-
puts "Please select valid move."
28-
retry
29-
end
30-
else
31-
begin
32-
puts "Check." if @board.in_check?(:b)
33-
puts "Player 2:"
34-
start, target = @player2.play_turn
35-
make_move(:b, start, target)
36-
rescue RuntimeError => e
37-
puts e.message
38-
puts "Please select valid move."
39-
retry
40-
end
19+
begin
20+
puts "Check." if @board.in_check?(@curr_player)
21+
puts "#{@curr_player.name}'s turn."
22+
start, target = @curr_player.play_turn
23+
make_move(@curr_player.color, start, target)
24+
rescue RuntimeError => e
25+
puts e.message
26+
puts "Please select valid move."
27+
retry
4128
end
29+
@curr_player = (@curr_player == @player1 ? @player2 : @player1)
4230
@move_count += 1
4331
end
4432

4533
system('clear')
4634
@board.display
47-
winner = @board.checkmate?(:w) ? 'Player 2' : 'Player 1'
35+
winner = @board.checkmate?(:w) ? @player2.name : @player1.name
4836
puts "CHECKMATE. #{winner} wins."
4937
puts "Game lasted for #{@move_count / 2} turns."
5038
puts "Game time: #{Time.now - start_time}s"
@@ -60,8 +48,8 @@ def make_move(color, start, target)
6048
end
6149

6250
if __FILE__ == $PROGRAM_NAME
63-
player1 = HumanPlayer.new
64-
player2 = HumanPlayer.new
51+
player1 = HumanPlayer.new(:w, 'Foo')
52+
player2 = HumanPlayer.new(:b, 'Bar')
6553
game = Game.new(player1, player2)
6654
game.play
6755
end

human_player.rb

+7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
class HumanPlayer
2+
attr_reader :color, :name
3+
4+
def initialize(color, name)
5+
@color = color
6+
@name = name
7+
end
8+
29
def play_turn
310
print "Input start, target positions: "
411
move_string = gets.chomp

0 commit comments

Comments
 (0)