115 lines
2.0 KiB
Factor
115 lines
2.0 KiB
Factor
! Copyright (C) 2006, 2007 Alex Chapman
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: kernel arrays namespaces sequences math math.vectors
|
|
colors random ;
|
|
IN: tetris.tetromino
|
|
|
|
TUPLE: tetromino states colour ;
|
|
|
|
C: <tetromino> tetromino
|
|
|
|
SYMBOL: tetrominoes
|
|
|
|
{
|
|
[
|
|
{ {
|
|
{ 0 0 } { 1 0 } { 2 0 } { 3 0 }
|
|
}
|
|
{ { 0 0 }
|
|
{ 0 1 }
|
|
{ 0 2 }
|
|
{ 0 3 }
|
|
}
|
|
} cyan
|
|
] [
|
|
{
|
|
{ { 1 0 }
|
|
{ 0 1 } { 1 1 } { 2 1 }
|
|
} {
|
|
{ 0 0 }
|
|
{ 0 1 } { 1 1 }
|
|
{ 0 2 }
|
|
} {
|
|
{ 0 0 } { 1 0 } { 2 0 }
|
|
{ 1 1 }
|
|
} {
|
|
{ 1 0 }
|
|
{ 0 1 } { 1 1 }
|
|
{ 1 2 }
|
|
}
|
|
} purple
|
|
] [
|
|
{ { { 0 0 } { 1 0 }
|
|
{ 0 1 } { 1 1 } }
|
|
} yellow
|
|
] [
|
|
{
|
|
{ { 0 0 } { 1 0 } { 2 0 }
|
|
{ 0 1 }
|
|
} {
|
|
{ 0 0 } { 1 0 }
|
|
{ 1 1 }
|
|
{ 1 2 }
|
|
} {
|
|
{ 2 0 }
|
|
{ 0 1 } { 1 1 } { 2 1 }
|
|
} {
|
|
{ 0 0 }
|
|
{ 0 1 }
|
|
{ 0 2 } { 1 2 }
|
|
}
|
|
} orange
|
|
] [
|
|
{
|
|
{ { 0 0 } { 1 0 } { 2 0 }
|
|
{ 2 1 }
|
|
} {
|
|
{ 1 0 }
|
|
{ 1 1 }
|
|
{ 0 2 } { 1 2 }
|
|
} {
|
|
{ 0 0 }
|
|
{ 0 1 } { 1 1 } { 2 1 }
|
|
} {
|
|
{ 0 0 } { 1 0 }
|
|
{ 0 1 }
|
|
{ 0 2 }
|
|
}
|
|
} blue
|
|
] [
|
|
{
|
|
{ { 1 0 } { 2 0 }
|
|
{ 0 1 } { 1 1 }
|
|
} {
|
|
{ 0 0 }
|
|
{ 0 1 } { 1 1 }
|
|
{ 1 2 }
|
|
}
|
|
} green
|
|
] [
|
|
{
|
|
{
|
|
{ 0 0 } { 1 0 }
|
|
{ 1 1 } { 2 1 }
|
|
} {
|
|
{ 1 0 }
|
|
{ 0 1 } { 1 1 }
|
|
{ 0 2 }
|
|
}
|
|
} red
|
|
]
|
|
} [ call <tetromino> ] map tetrominoes set-global
|
|
|
|
: random-tetromino ( -- tetromino )
|
|
tetrominoes get random ;
|
|
|
|
: blocks-max ( blocks quot -- max )
|
|
map [ 1+ ] map supremum ; inline
|
|
|
|
: blocks-width ( blocks -- width )
|
|
[ first ] blocks-max ;
|
|
|
|
: blocks-height ( blocks -- height )
|
|
[ second ] blocks-max ;
|
|
|