diff --git a/app/models/game.rb b/app/models/game.rb index 454d99c..0f875c8 100644 --- a/app/models/game.rb +++ b/app/models/game.rb @@ -69,5 +69,21 @@ def populate_board! y2 = 7 color = 0 end + + end + + def in_check?(color) + king = pieces.find_by(type: 'king', color: color) + opponents_pieces = pieces(!color) + + opponents_pieces.each do |piece| + if piece.valid_move?(king.x_position, king.y_position) + @checking_piece = piece + return true + else + return false + end + end end + end diff --git a/app/views/shared/_chessboard.html.erb b/app/views/shared/_chessboard.html.erb index 4664c15..4bf6574 100644 --- a/app/views/shared/_chessboard.html.erb +++ b/app/views/shared/_chessboard.html.erb @@ -10,7 +10,7 @@ <% 1.upto(8) do |col| %> <%= link_to piece_path(id: @select_pc.id, x_position: col, y_position: row), method: :put do %> -
+
<% @pieces.detect do |piece| %> <% if piece.x_position == col && piece.y_position == row %> <%= link_to piece_color(piece), piece_path(piece.id), :class => hilite(piece) %> diff --git a/test/models/in_check_test.rb b/test/models/in_check_test.rb new file mode 100644 index 0000000..4a10cdb --- /dev/null +++ b/test/models/in_check_test.rb @@ -0,0 +1,16 @@ +require 'test_helper' + +class GameInCheckTest < ActiveSupport::TestCase + test "game in check state" do + g = Game.create + expected = true + + p = g.pieces.find_by(x_position: 4, y_position: 2, type: 'pawn', color: "black") + k = g.pieces.find_by(x_position: 5, y_position: 1, color: "white", type: 'King') + + p.valid_move?(king.x_position: 5, king.y_position: 1) + + assert_equal true, g.in_check?(1) + end + +end