Skip to content

Instantly share code, notes, and snippets.

@weepy
Created April 27, 2010 08:01
Show Gist options
  • Save weepy/380477 to your computer and use it in GitHub Desktop.
Save weepy/380477 to your computer and use it in GitHub Desktop.
# Without headers
class Game
move: (el, sq) ->
key: @key sq
removed: @at sq
@remove removed if removed
@elements[el.id] = el unless @elements[el.id]
@sqs[key] = el
delete @sqs[@key el.sq] if el.sq
el.sq = sq
removed
remove: (el) ->
delete @sqs[@key el.sq]
delete @elements[el.id]
el.sq = null
@elements_removed[el.id] = el
el
moves: (from, side) ->
from: or @sq
side: or @side
moves: []
for move in @directions
sq: [from[0],from[1]]
while true
to: [sq[0] + move[0], sq[1] + move[1]]
break unless Chess.onBoard to
piece_to: @chess.board.at to
piece: @chess.board.at from
blank: piece_to?
opponent_piece: piece_to and piece_to.side != side
if blank or opponent_piece
moves.push(new Move(from, to, side))
sq = [to[0],to[1]] # clone
break if opponent_piece
else break
break if @repeat == false
moves
# with headers
class Game
move: (el, sq) -> (removed)
key: @key sq
removed: @at sq
@remove removed if removed
@elements[el.id] = el unless @elements[el.id]
@sqs[key] = el
delete @sqs[@key el.sq] if el.sq
el.sq = sq
remove: (el) -> (el)
delete @sqs[@key el.sq]
delete @elements[el.id]
el.sq = null
@elements_removed[el.id] = el
moves: (from, side) -> (moves)
from: or @sq
side: or @side
moves: []
for move in @directions
sq: [from[0],from[1]]
while true
to: [sq[0] + move[0], sq[1] + move[1]]
break unless Chess.onBoard to
piece_to: @chess.board.at to
piece: @chess.board.at from
blank: piece_to?
opponent_piece: piece_to and piece_to.side != side
if blank or opponent_piece
moves.push(new Move(from, to, side))
sq = [to[0],to[1]] # clone
break if opponent_piece
else break
break if @repeat == false
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment