'=========================================================================== ' Subject: TETRIS (TEXT MODE) Date: 04-23-96 (00:00) ' Author: Joshua Dickerson Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: GAMES.ABC '=========================================================================== ' ÛÛÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ ' Û Û Û Û Û Û Û ' Û ÛÛÛÛ Û ÛÛÛÛ Û ÛÛÛ ' Û Û Û Û Û Û Û ' Û ÛÛÛÛÛÛ Û Û Û ÛÛÛÛÛ ÛÛÛÛ ' ' 'To win,Guide your Piece down the pit and form strait horzontal lines. 'on A-Type you must make 24 Lines.On B-Type you must make 100.On B-type 'Every ten lines you pass a level.Turn on NUM-LOCK ' 'Keys: ' rotate piece ' 4 Ä5Ä 6 ' ³ ' 2 'Press SHIFT+F5 to play 'By Joshua Dickerson ' 'PROGRAMMER'S LOG: 4/23/96 -> I am updating this program for faster execution, ' effieciency, and readibility. CLS : RANDOMIZE TIMER: DIM Stat(7), Block$(7, 4), B$(4): WIDTH 40 FOR i = 1 TO 7: READ Plength(i): NEXT: FOR i = 1 TO 7: FOR J = 1 TO Plength(i) READ Block$(i, J): NEXT: NEXT PRINT "Use Number Pad to select.Press ENTER to play": PRINT PRINT " Type: Level:" PRINT "ÚÄÄÄÄÄÄÄ¿ ÚÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄ¿" PRINT "³>A-Type³ ³"; : COLOR 0, 7: PRINT "0"; : COLOR 7, 0 PRINT "³1³2³3³4³5³6³7³8³9³": PRINT "³ B-Type³ ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙ" PRINT "ÀÄÄÄÄÄÄÄÙ Hieght": LOCATE 9, 20: PRINT "ÚÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄÂÄ¿" LOCATE 10, 20: PRINT "³0³1³2³3³4³5³6³7³8³9³" LOCATE 11, 20: PRINT "ÀÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÙ": Type$ = "A-Type": LOCATE 6, 20 WHILE A$ <> CHR$(13): A$ = INKEY$ IF A$ <> "" THEN LOCATE ASC(Type$) + -59, 2: PRINT " ": LOCATE 6, level * 2 + 21: PRINT USING "#"; level IF A$ = "8" THEN Type$ = "A-Type" IF A$ = "2" THEN Type$ = "B-Type" IF A$ = "4" AND level > 0 THEN level = level - 1 IF A$ = "6" AND level < 9 THEN level = level + 1 LOCATE ASC(Type$) + -59, 2: PRINT ">": COLOR 0, 7: LOCATE 6, level * 2 + 21 PRINT USING "#"; level: COLOR 7, 0: WEND: IF Type$ = "B-Type" THEN GOTO Display A$ = "": lines = 24: WHILE A$ <> CHR$(13): A$ = INKEY$ IF A$ <> "" THEN LOCATE 10, Hieght * 2 + 21: PRINT USING "#"; Hieght IF A$ = "4" AND Hieght > 0 THEN Hieght = Hieght - 1 IF A$ = "6" AND Hieght < 9 THEN Hieght = Hieght + 1 LOCATE 10, Hieght * 2 + 21: COLOR 0, 7: PRINT USING "#"; Hieght: COLOR 7, 0 WEND Display: top = 10000 COLOR 7, 0: CLS : PRINT Type$: PRINT "ÚÄÄÄÄÄÄÄÄÄÄ¿" PRINT "³Statistics³": FOR i = 1 TO 19: PRINT "³ ³": NEXT PRINT "ÀÄÄÄÄÄÄÄÄÄÄÙ": FOR i = 1 TO 7: LOCATE 1 + i * 3, 8: PRINT "- 0" FOR J = 1 TO Plength(i): LOCATE J + 3 * i, 2: PRINT Block$(i, J): NEXT: NEXT FOR J = 2 TO 21: LOCATE J, 15: PRINT "Û Û": NEXT: LOCATE 22, 15 PRINT "ÛÛÛÛÛÛÛÛÛÛÛÛ": LOCATE 1, 16: PRINT "Lines -"; lines: LOCATE 2, 33 PRINT "ÚÄÄÄÄÄÄ¿": FOR i = 3 TO 6: LOCATE i, 33: PRINT "³ ³": NEXT LOCATE 7, 33: PRINT "ÀÄÄÄÄÄÄÙ": LOCATE 3, 34: PRINT "Top:": LOCATE 4, 34 PRINT USING "######"; top: LOCATE 5, 34: PRINT "Score:": LOCATE 6, 34 PRINT " 0": LOCATE 8, 35: PRINT "ÚÄÄÄÄ¿": LOCATE 9, 35: PRINT "³Next³" FOR i = 1 TO 4: LOCATE 9 + i, 35: PRINT "³ ³": NEXT: LOCATE 14, 35 PRINT "ÀÄÄÄÄÙ": LOCATE 15, 34: PRINT "ÚÄÄÄÄÄ¿": LOCATE 16, 34: PRINT "³Level³" LOCATE 17, 34: PRINT "³ "; USING "##"; level; : PRINT " ³": LOCATE 18, 34 PRINT "ÀÄÄÄÄÄÙ": NextBlock = 7: NextBlockColor = 1 IF Type$ = "B-Type" THEN GOTO SelectPiece LOCATE 20, 33: PRINT "ÚÄÄÄÄÄÄ¿": LOCATE 21, 33: PRINT "³Hieght³" LOCATE 22, 33: PRINT "³ "; USING "##"; Hieght; : PRINT " ³": LOCATE 23, 33 PRINT "ÀÄÄÄÄÄÄÙ": LOCATE 22 - Hieght: FOR i = 1 TO Hieght: FOR J = 1 TO 10 LOCATE 22 - i, 15 + J IF INT(2 * RND(1)) = 1 THEN COLOR INT(15 * RND(1)) + 1: PRINT "Û"; NEXT: NEXT SelectPiece: Collided = 0: Block = NextBlock: BlockColor = NextBlockColor Pbegin = Plength(Block) + 1: row = 1: col = 5 FOR i = 1 TO LEN(Block$(Block, Pbegin - 1)): A$ = MID$(Block$(Block, Pbegin - 1), i, 1) A = SCREEN(2, 19 + i): IF A = 219 AND A$ = "Û" THEN gameover = 1 NEXT: Stat(Block) = Stat(Block) + 1: LOCATE 1 + Block * 3, 9 PRINT USING "###"; Stat(Block): NextBlock = INT(7 * RND(1)) + 1 NextBlockColor = INT(15 * RND(1)) + 1: COLOR NextBlockColor: FOR i = 1 TO 4 LOCATE 9 + i, 36: PRINT " ": NEXT: FOR i = 1 TO Plength(NextBlock) LOCATE 9 + i, 36: PRINT Block$(NextBlock, i): NEXT: GOSUB DropPiece WHILE INKEY$ <> "": WEND MainLoop: IF gameover THEN FOR i = 40 TO 10 STEP -.5 SOUND INT(10 * i * RND) + 100, .1 NEXT FOR i = 21 TO 2 STEP -1 LOCATE i, 16 PRINT "ßßßßßßßßßß" NEXT END END IF IF lines < 1 AND Type$ = "A-Type" THEN LOCATE 12, 17: PRINT "Sucsess!": END IF lines > 99 AND Type$ = "B-Type" THEN LOCATE 12, 17: PRINT "Sucsess!": END t = TIMER: WHILE c$ <> "2" AND TIMER < t + ((10 - level) / 10) c$ = INKEY$: IF c$ = "4" THEN x = -1: GOSUB MovePiece IF c$ = "6" THEN x = 1: GOSUB MovePiece IF c$ = "5" THEN collision = 0: FOR i = 1 TO 4: B$(i) = "": NEXT: K = 0 FOR i = LEN(Block$(Block, 1)) TO 1 STEP -1: K = K + 1 FOR J = 1 TO Plength(Block): A$ = MID$(Block$(Block, J), K, 1) B$(i) = B$(i) + A$: NEXT: NEXT: Ptemp = LEN(Block$(Block, 1)) Pend = row + Plength(Block) - Pbegin IF Ptemp > Pend THEN Pbtemp = Ptemp - (Pend - 1): Rtemp = 1 IF Ptemp <= Pend THEN Pbtemp = 1: Rtemp = Pend - (Ptemp - 1) Action = 1: GOSUB DisplayPiece: K = 0: FOR i = Pbtemp TO Ptemp: K = K + 1 FOR J = 1 TO LEN(B$(1)): A$ = MID$(B$(i), J, 1) A = SCREEN(Rtemp + K, col + J + 14): IF A = 219 AND A$ = "Û" THEN collision = 1 NEXT: NEXT: IF col + LEN(B$(1)) > 11 THEN collision = 1 IF collision = 1 THEN Action = 2: GOSUB DisplayPiece: GOTO MainLoop Plength(Block) = Ptemp: FOR i = 1 TO Ptemp: Block$(Block, i) = B$(i): NEXT Pbegin = Pbtemp: row = Rtemp: Action = 2: GOSUB DisplayPiece SOUND 900, .3 END IF: WEND: c$ = "": GOSUB CheckForCollision IF Collided = 0 THEN GOSUB DropPiece ELSE SOUND 100, 1: GOSUB EraseLine: GOTO SelectPiece GOTO MainLoop CheckForCollision: Collided = 0: K = 0 IF Pbegin <> 1 THEN Pbegin = Pbegin - 1: row = 0 IF row + Plength(Block) = 21 THEN Collided = 1: RETURN FOR i = Pbegin TO Plength(Block): K = K + 1: FOR J = 1 TO LEN(Block$(Block, 1)) A = SCREEN(row + K + 1, col + J + 14): A$ = MID$(Block$(Block, i), J, 1) B$ = " ": IF i < Plength(Block) THEN B$ = MID$(Block$(Block, i + 1), J, 1) IF A = 219 AND A$ = "Û" AND B$ = " " THEN Collided = 1 NEXT: NEXT: IF row < 1 THEN row = 1: Pbegin = Pbegin + 1 RETURN MovePiece: collision = 0: IF col = 1 AND x = -1 THEN RETURN IF col + LEN(Block$(Block, 1)) = 11 AND x = 1 THEN RETURN FOR i = 1 TO LEN(Block$(Block, 1)): K = 0: FOR J = Pbegin TO Plength(Block) K = K + 1: A = SCREEN(row + K, col + i + 14 + x) A$ = MID$(Block$(Block, J), i, 1): B$ = " " IF i > 1 AND x = -1 THEN B$ = MID$(Block$(Block, J), i - 1, 1) IF i < LEN(Block$(Block, 1)) AND x = 1 THEN B$ = MID$(Block$(Block, J), i + 1, 1) IF A = 219 AND A$ = "Û" AND B$ = " " THEN collision = 1 NEXT: NEXT: IF collision = 1 THEN RETURN Action = 1: GOSUB DisplayPiece: col = col + x: Action = 2: GOSUB DisplayPiece SOUND 1000, .3: RETURN DropPiece: Action = 1: GOSUB DisplayPiece: row = row + 1 IF Pbegin > 1 THEN Pbegin = Pbegin - 1: row = 1 Action = 2: GOSUB DisplayPiece: RETURN DisplayPiece: COLOR BlockColor K = 0 FOR i = Pbegin TO Plength(Block): K = K + 1 FOR J = 1 TO LEN(Block$(Block, 1)) IF MID$(Block$(Block, i), J, 1) <> " " THEN LOCATE row + K, col + J + 14 IF Action = 1 THEN PRINT " "; ELSE PRINT CHR$(219); END IF NEXT: NEXT: RETURN EraseLine: K = 0: add = 500: FOR i = Pbegin TO Plength(Block): K = K + 1 Check = 0: FOR J = 1 TO 10: Check = Check + SCREEN(row + K, J + 15): NEXT IF Check = 2190 THEN FOR n = 1 TO 20: SOUND INT(500 * RND) + 100, .1: NEXT FOR l = row + K TO 3 STEP -1: FOR m = 1 TO 10 COLOR SCREEN(l - 1, m + 15, 1): LOCATE l, m + 15 PRINT CHR$(SCREEN(l - 1, m + 15)): NEXT: NEXT: LOCATE 2, 16 PRINT " ": score = score + add: add = add * 2 IF Type$ = "A-Type" THEN lines = lines - 1 IF Type$ = "B-Type" THEN lines = lines + 1: IF INT(lines / 10) > level THEN level = INT(lines / 10) LOCATE 17, 36: PRINT level: LOCATE 1, 23: PRINT lines: LOCATE 6, 34 PRINT USING "######"; score END IF: NEXT: RETURN 'Game A: DATA 2,2,2,2,2,2,1,"ÛÛÛ"," Û ","ÛÛÛ"," Û","ÛÛ "," ÛÛ","ÛÛ","ÛÛ"," ÛÛ","ÛÛ " DATA "ÛÛÛ","Û ","ÛÛÛÛ" 'Game B: 'DATA 2,1,2,2,2,2,1,"ÛÛÛ "," ÛÛÛ","Û Û"," Û","Û ","Û "," Û"," Û ", "ÛÛÛ"," Û" 'DATA "Û ", "ÛÛÛÛ" 'Game C: 'DATA 2,2,2,2,2,2,1,"Û Û"," Û "," ÛÛ","ÛÛ ","Û Û","ÛÛÛÛ","Û Û","Û Û","ÛÛ" 'DATA " Û"," ÛÛ ","ÛÛÛÛ","ÛÛÛÛ"