Class: MailChess::Piece::Rook

Inherits:
Piece
  • Object
show all
Defined in:
lib/mail_chess/pieces/rook.rb

Overview

Represents a rook chess piece.

Instance Attribute Summary

Attributes inherited from Piece

#board, #color, #hits, #html, #id, #moves, #type

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Piece

#can_hit?, #can_move?, create_tables, #delete!, load!, #move, need_to_create_tables?, #position, #save!

Constructor Details

#initialize(db, piece_id, board = nil) ⇒ Rook

Calls the superclass.



11
12
13
14
15
# File 'lib/mail_chess/pieces/rook.rb', line 11

def initialize db, piece_id, board = nil
  super db, piece_id, board
  
  @html = @color == :white ? '♖' : '♜'
end

Class Method Details

.new!(db, board, position, color) ⇒ Object

Overwrite superclass method.



18
19
20
21
22
23
24
25
26
27
# File 'lib/mail_chess/pieces/rook.rb', line 18

def self.new! db, board, position, color
  super db, board, position, color

  id = db[:pieces].insert(:type => 'rook', 
                          :color => color.to_s,
                          :position => position,
                          :board_id => board.id)

  return Rook.new db, id, board
end

Instance Method Details

#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