Class: Piece

Inherits:
Object
  • Object
show all
Defined in:
lib/ari_chess/pieces/super/piece.rb

Direct Known Subclasses

Pawn, SlidingPiece, SteppingPiece

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(pos = nil, board = nil, color = nil) ⇒ Piece

Returns a new instance of Piece.



4
5
6
7
8
# File 'lib/ari_chess/pieces/super/piece.rb', line 4

def initialize(pos = nil, board = nil, color = nil)
  @pos = pos
  @board = board
  @color = color
end

Instance Attribute Details

#boardObject

Returns the value of attribute board.



2
3
4
# File 'lib/ari_chess/pieces/super/piece.rb', line 2

def board
  @board
end

#colorObject

Returns the value of attribute color.



2
3
4
# File 'lib/ari_chess/pieces/super/piece.rb', line 2

def color
  @color
end

#posObject

Returns the value of attribute pos.



2
3
4
# File 'lib/ari_chess/pieces/super/piece.rb', line 2

def pos
  @pos
end

Instance Method Details

#deltasObject



46
47
48
# File 'lib/ari_chess/pieces/super/piece.rb', line 46

def deltas
  self.class::DELTAS
end

#dup(new_board) ⇒ Object



50
51
52
# File 'lib/ari_chess/pieces/super/piece.rb', line 50

def dup(new_board)
  self.class.new(pos, new_board, color)
end

#move_into_check?(possible_pos) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
39
40
# File 'lib/ari_chess/pieces/super/piece.rb', line 36

def move_into_check?(possible_pos)
  new_board = board.dup
  new_board.move!(pos, possible_pos)
  new_board.in_check?(color)
end

#movesObject



10
11
12
13
14
15
16
17
18
19
# File 'lib/ari_chess/pieces/super/piece.rb', line 10

def moves
  positions = []

  deltas.each do |delta|
    possible_moves = potential_moves(delta)
    positions.concat(possible_moves) #unless possible_moves.nil?
  end

  positions
end

#next_pos(pos, delta) ⇒ Object



25
26
27
28
29
30
# File 'lib/ari_chess/pieces/super/piece.rb', line 25

def next_pos(pos, delta)
  x, y = pos
  dx, dy = delta

  [x + dx, y + dy]
end

#update_piece(pos) ⇒ Object



21
22
23
# File 'lib/ari_chess/pieces/super/piece.rb', line 21

def update_piece(pos)
  self.pos = pos
end

#valid_movesObject



42
43
44
# File 'lib/ari_chess/pieces/super/piece.rb', line 42

def valid_moves
  moves.reject { |move| move_into_check?(move) }
end

#valid_pos?(pos) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/ari_chess/pieces/super/piece.rb', line 32

def valid_pos?(pos)
  board.on_board?(pos) && (board[pos].nil? || board[pos].color != color)
end