46 lines
1020 B
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 ;
|