Class: MailChess::Piece::Knight

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

Overview

Represents a knight 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) ⇒ Knight

Calls the superclass.



11
12
13
14
15
# File 'lib/mail_chess/pieces/knight.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/knight.rb', line 18

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

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

  return Knight.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
# File 'lib/mail_chess/pieces/knight.rb', line 30

def generate_moves
  super
  
  r, c = ROWS.index(position[1]), COLS.index(position[0])
  
  pos = []
  pos << COLS[c - 1] + ROWS[r - 2] if c > 0 and r > 1
  pos << COLS[c + 1] + ROWS[r - 2] if c < 7 and r > 1
  pos << COLS[c - 2] + ROWS[r - 1] if c > 1 and r > 0
  pos << COLS[c + 2] + ROWS[r - 1] if c < 6 and r > 0
  pos << COLS[c - 2] + ROWS[r + 1] if c > 1 and r < 7
  pos << COLS[c + 2] + ROWS[r + 1] if c < 6 and r < 7
  pos << COLS[c - 1] + ROWS[r + 2] if c > 0 and r < 6
  pos << COLS[c + 1] + ROWS[r + 2] if c < 7 and r < 6
  
  pos.each do |p|
    if @board.pieces[p]
      @hits << p
    else
      @moves << p
    end
  end
end