# TETRIS for bpbatch # version 1.0 # (C) Copyright 2000 James Carter # http://www.jfc.cx/ # # see http://www.fsf.org/copyleft/gpl.html for license... :restart initgraph "640x480" clear black clear blue 219 4,9,21,20 textattr black lightgray at 0,0 print " TETRIS v1.0 " textattr white black at 2,0 print "< LEFT" at 3,0 print "> RIGHT" at 4,0 print "Z ROTATE" at 5,0 print "X DROP" at 7,0 print "Q QUIT" set score="10000000" at 20,1 print "$score"[1-7] at 2,29 print "(C) Copyright 2000 James Carter" at 3,29 print " james@jfc.org.uk" at 4,29 print " http://www.jfc.cx/" at 6,22 print "This program is free software; you can redistribute it" at 7,22 print "and/or modify it under the terms of the GNU General" at 8,22 print "Public License as published by the Free Software" at 9,22 print "Foundation; either version 2 of the License, or (at your" at 10,22 print "option) any later version." at 12,22 print "This program is distributed in the hope that it will be" at 13,22 print "useful, but WITHOUT ANY WARRANTY; without even the" at 14,22 print "implied warranty of MERCHANTABILITY or FITNESS FOR A" at 15,22 print "PARTICULAR PURPOSE. See the GNU General Public License" at 16,22 print "for more details." at 18,22 print "You should have received a copy of the GNU General" at 19,22 print "Public License along with this program; if not, write" at 20,22 print "to the Free Software Foundation, Inc., 59 Temple Place" at 21,22 print "- Suite 330, Boston, MA 02111-1307, USA." set p="----------| || || || || || || || || || || || || || || || |" set random="01432406443455235432435442054200216554225524456221035X" #set random="44444444444444444444444444444444444444444444444444444X" gettime rpos set rpos="$rpos"[7] gettime droptime set droptime="$droptime"[7] #shape0 #OOOO #.... #.... #.... set shape0="OOOO............" #shape1 #OOO. #.O.. #.... #.... set shape1="OOO..O.........." #shape2 #OOO. #O... #.... #.... set shape2="OOO.O..........." #shape3 #OOO. #..O. #.... #.... set shape3="OOO...O........." #shape4 #OO.. #OO.. #.... #.... set shape4="OO..OO.........." #shape5 #OO.. #.OO. #.... #.... set shape5="OO...OO........." #shape6 #.OO. #OO.. #.... #.... set shape6=".OO.OO.........." set shapes=".${shape0}${shape1}${shape2}${shape3}${shape4}${shape5}${shape6}" set rottrans="-.30 -.21 -.12 -.3 -.19 -.10 -.1 +.8 -.8 +.1 +.10 +.19 +.3 +.12 +.21 +.30" #onkey "default" set kp="yes" onkey "," set key="," onkey "." set key="." onkey "z" set key="z" onkey "x" set key="x" onkey "q" set key="q" onkey "default" set key="" goto newshape :draw set key="" if "$new" == "yes" goto newshape set row="0" :drawrowloop set rowp=(20 - $row) set col="0" :drawcolloop set char="$p"[(($row * 10) + $col)] if "$char" == " " textattr black black if "$char" == "-" textattr black blue if "$char" == "|" textattr black blue if "$char" == "X" textattr black red if "$char" == "O" textattr black green at $rowp,($col + 10) print " " set col=($col + 1) if "$col" != "10" goto drawcolloop set row=($row + 1) if "$row" != "17" goto drawrowloop if "$dropping" == "yes" goto droptest gettime t set t="$t"[7] if "$droptime" == "$t" goto linetest set droptime="$t" :droptest set cp="0" :droptestloop set cp=($cp + 1) if "$cp" == "170" goto drop set char="$p"[$cp] if "$char" != "O" goto droptestloop set char="$p"[($cp - 10)] if "$char" == " " goto droptestloop if "$char" == "O" goto droptestloop set p="$p"/O=X/ set new="yes" goto linetest :drop set sp=($sp - 10) set cp="0" :droploop set cp=($cp + 1) if "$cp" == "170" goto linetest set char="$p"[$cp] if "$char" != "O" goto droploop set q="$p"[0-($cp - 1)] set q="${q} " set r="$p"[($cp + 1)-169] set p="${q}$r" set xp=($cp - 10) set q="$p"[0-($xp - 1)] set q="${q}O" set r="$p"[($xp + 1)-169] set p="${q}$r" goto droploop :linetest set rp="170" :ltloop set rp=($rp - 10) if "$rp" == "0" goto keytest set l="$p"[${rp}-($rp + 9)] if "$l" != "|XXXXXXXX|" goto ltloop textattr white black set score=($score + 1) at 20,1 print "$score"[1-7] set cp=($rp + 10) :ltdloop set cp=($cp + 1) if "$cp" == "170" goto ltloop set char="$p"[$cp] if "$char" == "|" goto ltdloop if "$char" == "O" goto ltdloop set q="$p"[0-($cp - 1)] set q="${q} " set r="$p"[($cp + 1)-169] set p="${q}$r" set xp=($cp - 10) set q="$p"[0-($xp - 1)] if "$char" == "X" set q="${q}X" if "$char" == " " set q="${q} " set r="$p"[($xp + 1)-169] set p="${q}$r" goto ltdloop :keytest #if "$kp" == "" goto draw #set kp="" #getkey key if "$key" == "" goto draw if "$key" == "," goto lefttest if "$key" == "." goto righttest if "$key" == "z" goto rottest if "$key" == "x" goto dropit if "$key" == "q" goto quit goto draw :dropit set dropping="yes" goto draw :lefttest set cp="0" :lefttestloop set cp=($cp + 1) if "$cp" == "170" goto left set char="$p"[$cp] if "$char" != "O" goto lefttestloop set char="$p"[($cp - 1)] if "$char" == " " goto lefttestloop if "$char" == "O" goto lefttestloop goto draw :left set sp=($sp - 1) set cp="0" :leftloop set cp=($cp + 1) if "$cp" == "170" goto draw set char="$p"[$cp] if "$char" != "O" goto leftloop set q="$p"[0-($cp - 1)] set q="${q} " set r="$p"[($cp + 1)-169] set p="${q}$r" set xp=($cp - 1) set q="$p"[0-($xp - 1)] set q="${q}O" set r="$p"[($xp + 1)-169] set p="${q}$r" goto leftloop :righttest set cp="0" :righttestloop set cp=($cp + 1) if "$cp" == "170" goto right set char="$p"[$cp] if "$char" != "O" goto righttestloop set char="$p"[($cp + 1)] if "$char" == " " goto righttestloop if "$char" == "O" goto righttestloop goto draw :right set sp=($sp + 1) set cp="170" :rightloop set cp=($cp - 1) if "$cp" == "0" goto draw set char="$p"[$cp] if "$char" != "O" goto rightloop set q="$p"[0-($cp - 1)] set q="${q} " set r="$p"[($cp + 1)-169] set p="${q}$r" set xp=($cp + 1) set q="$p"[0-($xp - 1)] set q="${q}O" set r="$p"[($xp + 1)-169] set p="${q}$r" goto rightloop :rottest set rp=($sp + 10) set erp=($sp - 40) set shapep="0" :rtrowloop set rp=($rp - 10) if "$rp" == "$erp" goto rot set cp=($rp - 1) set ep=($rp + 5) set shapep=($shapep - 1) :rtcolloop set cp=($cp + 1) if "$cp" == "$ep" goto rtrowloop set shapep=($shapep + 1) if "$p"[$cp] != "O" goto rtcolloop set delta="$rottrans"{$shapep}/.= / eval "set xp=($cp $delta)" set char="$p"[$xp] if "$char" == " " goto rtcolloop if "$char" == "O" goto rtcolloop goto draw :rot set rp=($sp + 10) set erp=($sp - 40) set shapep="0" :rrowloop set rp=($rp - 10) if "$rp" == "$erp" goto rotfin set cp=($rp - 1) set ep=($rp + 5) set shapep=($shapep - 1) :rcolloop set cp=($cp + 1) if "$cp" == "$ep" goto rrowloop set shapep=($shapep + 1) set char="$p"[$cp] if "$char" == "O" goto rdoit if "$char" == "B" goto rdoit goto rcolloop :rdoit set q="$p"[0-($cp - 1)] if "$char" == "O" set q="${q} " if "$char" == "B" set q="${q}N" set r="$p"[($cp + 1)-169] set p="${q}$r" set delta="$rottrans"{$shapep}/.= / eval "set xp=($cp $delta)" #at 0,10 print "$cp $delta = $xp" #delay 10 set q="$p"[0-($xp - 1)] set char="$p"[$xp] if "$char" == "O" set q="${q}B" if "$char" != "O" set q="${q}N" set r="$p"[($xp + 1)-169] set p="${q}$r" goto rcolloop :rotfin set p="$p"/N=O/ goto draw :resetshape set rpos="0" :newshape set dropping="no" set new="no" set sp="164" set rpos=($rpos + 1) if "$random"[$rpos] = "X" goto resetshape set shapeno="$random"[$rpos] set shapep=($shapeno * 16) set rp="173" :nsrowloop set rp=($rp - 10) if "$rp" == "123" goto draw set cp="$rp" set ep=($rp + 5) :nscolloop set cp=($cp + 1) if "$cp" == "$ep" goto nsrowloop set shapep=($shapep + 1) if "$shapes"[$shapep] == "." goto nscolloop if "$p"[$cp] != " " goto gameover set q="$p"[0-($cp - 1)] set q="${q}O" set r="$p"[($cp + 1)-169] set p="${q}$r" goto nscolloop :gameover textattr white black at 11,3 print "GAME" at 12,3 print "OVER" delay 10 goto restart :quit