Method: MailChess::Piece::Rook#generate_moves

Defined in:
lib/mail_chess/pieces/rook.rb

#generate_movesObject

Generate the possible moves.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/mail_chess/pieces/rook.rb', line 30

def generate_moves
  super
  
  r, c = ROWS.index(position[1]), COLS.index(position[0])
  f = {:u => false, :l => false, :r => false, :d => false}
  
  (1..7).each do |i|
    pos = []
    pos << [:u, COLS[c] + ROWS[r - i]] if r - i >= 0 and !f[:u]
    pos << [:l, COLS[c - i] + ROWS[r]] if c - i >= 0 and !f[:l]
    pos << [:r, COLS[c + i] + ROWS[r]] if c + i <= 7 and !f[:r]
    pos << [:d, COLS[c] + ROWS[r + i]] if r + i <= 7 and !f[:d]
    
    break if pos.empty?
    pos.each do |s, p|
      if @board.pieces[p]
        @hits << p if @board.pieces[p].color != @color
        f[s] = true
      else
        @moves << p
      end
    end
  end
end