Class: MailChess::Piece::Bishop
- Defined in:
- lib/mail_chess/pieces/bishop.rb
Overview
Represents a bishop chess piece.
Instance Attribute Summary
Attributes inherited from Piece
#board, #color, #hits, #html, #id, #moves, #type
Class Method Summary collapse
-
.new!(db, board, position, color) ⇒ Object
Overwrite superclass method.
Instance Method Summary collapse
-
#generate_moves ⇒ Object
Generate the possible moves.
-
#initialize(db, piece_id, board = nil) ⇒ Bishop
constructor
Calls the superclass.
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) ⇒ Bishop
Calls the superclass.
11 12 13 14 15 |
# File 'lib/mail_chess/pieces/bishop.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/bishop.rb', line 18 def self.new! db, board, position, color super db, board, position, color id = db[:pieces].insert(:type => 'bishop', :color => color.to_s, :position => position, :board_id => board.id) return Bishop.new db, id, board end |
Instance Method Details
#generate_moves ⇒ Object
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 54 55 56 57 |
# File 'lib/mail_chess/pieces/bishop.rb', line 30 def generate_moves super r, c = ROWS.index(position[1]), COLS.index(position[0]) f = {:ul => false, :ur => false, :bl => false, :br => false} (1..7).each do |i| pos = [] pos << [:ul, COLS[c - i] + ROWS[r - i]] if c - i >= 0 and r - i >= 0 and !f[:ul] pos << [:ur, COLS[c - i] + ROWS[r + i]] if c - i >= 0 and r + i <= 7 and !f[:ur] pos << [:bl, COLS[c + i] + ROWS[r - i]] if c + i <= 7 and r - i >= 0 and !f[:bl] pos << [:br, COLS[c + i] + ROWS[r + i]] if c + i <= 7 and r + i <= 7 and !f[:br] 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 |