factor/extra/snake-game/util/util.factor

46 lines
1020 B
Factor

! Copyright (C) 2015 Your name.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays assocs combinators kernel math sequences
snake-game.constants ;
IN: snake-game.util
: screen-loc ( loc -- loc )
[ snake-game-cell-size * ] map ;
: offset ( loc dim -- loc )
[ + ] 2map ;
: ?roll-over ( x max -- x )
{
{ [ 2dup >= ] [ 2drop 0 ] }
{ [ over neg? ] [ nip 1 - ] }
[ drop ]
} cond ;
: ?roll-over-x ( x -- x )
snake-game-dim first ?roll-over ;
: ?roll-over-y ( y -- y )
snake-game-dim second ?roll-over ;
: move ( loc dim -- loc )
offset first2
[ ?roll-over-x ] [ ?roll-over-y ] bi* 2array ;
: relative-loc ( loc dir -- loc )
{
{ :left [ { -1 0 } move ] }
{ :right [ { 1 0 } move ] }
{ :up [ { 0 -1 } move ] }
{ :down [ { 0 1 } move ] }
} case ;
: opposite-dir ( dir -- dir )
H{
{ :left :right }
{ :right :left }
{ :up :down }
{ :down :up }
} at ;