cls
break on$=setascii("on")
; normal sized DOS box perimeter
box(0, 0, 25, 79, single)
;box(2, 2, 22, 15, single) ; draw box
; Define shapes
;
; There are four kinds: I, L, T and B
; each has four pieces: 0, 1, 2 and 3
; and each has four rotations: 1, 2, 3 and 4
;
; I= XXXX
;
; X
; X
; L= XX
;
; 7= XX
; X
; X
; X
; T= XX
; X
;
; B= XX
; XX
;
; These are created from a base point and then an array of the
; other relative points
;
; ie for the T that is XXX
; X
; the base is the top center and the
; other points are numbered: 102
; 3
; so, to generate a T we draw a X at base (0, 0)
; then one at (-1, 0) then (+1, 0) and then (0, +1)
;
dim $ix1[4] dim $ix2[4] dim $ix3[4] dim $ix4[4]
dim $iy1[4] dim $iy2[4] dim $iy3[4] dim $iy4[4] ; I
dim $lx1[4] dim $lx2[4] dim $lx3[4] dim $lx4[4]
dim $ly1[4] dim $ly2[4] dim $ly3[4] dim $ly4[4] ; L
dim $7x1[4] dim $7x2[4] dim $7x3[4] dim $7x4[4]
dim $7y1[4] dim $7y2[4] dim $7y3[4] dim $7y4[4] ; 7
dim $tx1[4] dim $tx2[4] dim $tx3[4] dim $tx4[4]
dim $ty1[4] dim $ty2[4] dim $ty3[4] dim $ty4[4] ; T
dim $bx1[4] dim $bx2[4] dim $bx3[4] dim $bx4[4]
dim $by1[4] dim $by2[4] dim $by3[4] dim $by4[4] ; Box
$ix1[1]=1 $iy1[1]=0 $ix1[2]=2 $iy1[2]=0 $ix1[3]=3 $iy1[3]=0
$ix2[1]=0 $iy2[1]=1 $ix2[2]=0 $iy2[2]=2 $ix2[3]=0 $iy2[3]=3
$ix3[1]=1 $iy3[1]=0 $ix3[2]=2 $iy3[2]=0 $ix3[3]=3 $iy3[3]=0
$ix4[1]=0 $iy4[1]=1 $ix4[2]=0 $iy4[2]=2 $ix4[3]=0 $iy4[3]=3
$lx1[1]=0 $ly1[1]=-1 $lx1[2]=1 $ly1[2]=0 $lx1[3]=2 $ly1[3]=0
$lx2[1]=1 $ly2[1]=0 $lx2[2]=0 $ly2[2]=1 $lx2[3]=0 $ly2[3]=2
$lx3[1]=0 $ly3[1]=1 $lx3[2]=-1 $ly3[2]=0 $lx3[3]=-2 $ly3[3]=0
$lx4[1]=-1 $ly4[1]=0 $lx4[2]=0 $ly4[2]=-1 $lx4[3]=0 $ly4[3]=-2
$7x1[1]=0 $7y1[1]=1 $7x1[2]=1 $7y1[2]=0 $7x1[3]=2 $7y1[3]=0
$7x2[1]=-1 $7y2[1]=0 $7x2[2]=0 $7y2[2]=1 $7x2[3]=0 $7y2[3]=2
$7x3[1]=0 $7y3[1]=-1 $7x3[2]=-1 $7y3[2]=0 $7x3[3]=-2 $7y3[3]=0
$7x4[1]=1 $7y4[1]=0 $7x4[2]=0 $7y4[2]=-1 $7x4[3]=0 $7y4[3]=-2
$tx1[1]=-1 $ty1[1]=0 $tx1[2]=0 $ty1[2]=-1 $tx1[3]=1 $ty1[3]=0
$tx2[1]=0 $ty2[1]=-1 $tx2[2]=1 $ty2[2]=0 $tx2[3]=0 $ty2[3]=1
$tx3[1]=1 $ty3[1]=0 $tx3[2]=0 $ty3[2]=1 $tx3[3]=-1 $ty3[3]=0
$tx4[1]=0 $ty4[1]=1 $tx4[2]=-1 $ty4[2]=0 $tx4[3]=0 $ty4[3]=-1
$bx1[1]=0 $by1[1]=1 $bx1[2]=1 $by1[2]=1 $bx1[3]=1 $by1[3]=0
$bx2[1]=0 $by2[1]=1 $bx2[2]=1 $by2[2]=1 $bx2[3]=1 $by2[3]=0
$bx3[1]=0 $by3[1]=1 $bx3[2]=1 $by3[2]=1 $bx3[3]=1 $by3[3]=0
$bx4[1]=0 $by4[1]=1 $bx4[2]=1 $by4[2]=1 $bx4[3]=1 $by4[3]=0
$turn=1
:chooz
at(19, 1) "Choose shape: I, L, 7, T or B..."
at(20, 1) "R=Rotate Q=Quit"
get $key
if $key="q"
exit
endif
select
case $key="r"
$turn=$turn+1
if $turn=5
$turn=1
endif
$key=$lastkey
endselect
select
case $key="i"
select
case $turn=1
$disp1x=$ix1[1] $disp1y=$iy1[1]
$disp2x=$ix1[2] $disp2y=$iy1[2]
$disp3x=$ix1[3] $disp3y=$iy1[3]
case $turn=2
$disp1x=$ix2[1] $disp1y=$iy2[1]
$disp2x=$ix2[2] $disp2y=$iy2[2]
$disp3x=$ix2[3] $disp3y=$iy2[3]
case $turn=3
$disp1x=$ix3[1] $disp1y=$iy3[1]
$disp2x=$ix3[2] $disp2y=$iy3[2]
$disp3x=$ix3[3] $disp3y=$iy3[3]
case $turn=4
$disp1x=$ix4[1] $disp1y=$iy4[1]
$disp2x=$ix4[2] $disp2y=$iy4[2]
$disp3x=$ix4[3] $disp3y=$iy4[3]
endselect
case $key="l"
select
case $turn=1
$disp1x=$lx1[1] $disp1y=$ly1[1]
$disp2x=$lx1[2] $disp2y=$ly1[2]
$disp3x=$lx1[3] $disp3y=$ly1[3]
case $turn=2
$disp1x=$lx2[1] $disp1y=$ly2[1]
$disp2x=$lx2[2] $disp2y=$ly2[2]
$disp3x=$lx2[3] $disp3y=$ly2[3]
case $turn=3
$disp1x=$lx3[1] $disp1y=$ly3[1]
$disp2x=$lx3[2] $disp2y=$ly3[2]
$disp3x=$lx3[3] $disp3y=$ly3[3]
case $turn=4
$disp1x=$lx4[1] $disp1y=$ly4[1]
$disp2x=$lx4[2] $disp2y=$ly4[2]
$disp3x=$lx4[3] $disp3y=$ly4[3]
endselect
case $key="7"
select
case $turn=1
$disp1x=$7x1[1] $disp1y=$7y1[1]
$disp2x=$7x1[2] $disp2y=$7y1[2]
$disp3x=$7x1[3] $disp3y=$7y1[3]
case $turn=2
$disp1x=$7x2[1] $disp1y=$7y2[1]
$disp2x=$7x2[2] $disp2y=$7y2[2]
$disp3x=$7x2[3] $disp3y=$7y2[3]
case $turn=3
$disp1x=$7x3[1] $disp1y=$7y3[1]
$disp2x=$7x3[2] $disp2y=$7y3[2]
$disp3x=$7x3[3] $disp3y=$7y3[3]
case $turn=4
$disp1x=$7x4[1] $disp1y=$7y4[1]
$disp2x=$7x4[2] $disp2y=$7y4[2]
$disp3x=$7x4[3] $disp3y=$7y4[3]
endselect
case $key="t"
select
case $turn=1
$disp1x=$tx1[1] $disp1y=$ty1[1]
$disp2x=$tx1[2] $disp2y=$ty1[2]
$disp3x=$tx1[3] $disp3y=$ty1[3]
case $turn=2
$disp1x=$tx2[1] $disp1y=$ty2[1]
$disp2x=$tx2[2] $disp2y=$ty2[2]
$disp3x=$tx2[3] $disp3y=$ty2[3]
case $turn=3
$disp1x=$tx3[1] $disp1y=$ty3[1]
$disp2x=$tx3[2] $disp2y=$ty3[2]
$disp3x=$tx3[3] $disp3y=$ty3[3]
case $turn=4
$disp1x=$tx4[1] $disp1y=$ty4[1]
$disp2x=$tx4[2] $disp2y=$ty4[2]
$disp3x=$tx4[3] $disp3y=$ty4[3]
endselect
case $key="b"
select
case $turn=1
$disp1x=$bx1[1] $disp1y=$by1[1]
$disp2x=$bx1[2] $disp2y=$by1[2]
$disp3x=$bx1[3] $disp3y=$by1[3]
case $turn=2
$disp1x=$bx2[1] $disp1y=$by2[1]
$disp2x=$bx2[2] $disp2y=$by2[2]
$disp3x=$bx2[3] $disp3y=$by2[3]
case $turn=3
$disp1x=$bx3[1] $disp1y=$by3[1]
$disp2x=$bx3[2] $disp2y=$by3[2]
$disp3x=$bx3[3] $disp3y=$by3[3]
case $turn=4
$disp1x=$bx4[1] $disp1y=$by4[1]
$disp2x=$bx4[2] $disp2y=$by4[2]
$disp3x=$bx4[3] $disp3y=$by4[3]
endselect
endselect
; remember last key press for rotate
$lastkey=$key
; erase old symbol
box(1, 1, 10, 10, " ")
; draw symbol
$x=5 $y=5
at($x, $y) chr(219)
at($x+$disp1x, $y+$disp1y) chr(219)
at($x+$disp2x, $y+$disp2y) chr(219)
at($x+$disp3x, $y+$disp3y) chr(219)
at(9, 9) "$turn"
goto chooz