Class: MailChess::Piece::Queen
- Defined in:
- lib/mail_chess/pieces/queen.rb
Overview
Represents a queen 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) ⇒ Queen
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) ⇒ Queen
Calls the superclass.
11 12 13 14 15 |
# File 'lib/mail_chess/pieces/queen.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/queen.rb', line 18 def self.new! db, board, position, color super db, board, position, color id = db[:pieces].insert(:type => 'queen', :color => color.to_s, :position => position, :board_id => board.id) return Queen.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 58 59 60 61 |
# File 'lib/mail_chess/pieces/queen.rb', line 30 def generate_moves super r, c = ROWS.index(position[1]), COLS.index(position[0]) f = {:ul => false, :uc => false, :ur => false, :ml => false, :mc => true, :mr => false, :bl => false, :bc => false, :br => false} (1..7).each do |i| pos = [] {'u' => -1, 'm' => 0, 'b' => 1}.each do |y, v| {'l' => -1, 'c' => 0, 'r' => 1}.each do |x, w| s, cc, rr = (y + x).to_sym, c + w * i, r + v * i if cc >= 0 and cc <= 7 and rr >= 0 and rr <= 7 pos << [s, COLS[cc] + ROWS[rr]] if !f[s] else f[s] = true end end end 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 |