User Tools

Site Tools


en:tetris

TETRIS

Info

Author ???????
Computer Amstrad PCW 8256 / 8512 / 9512
Year ????
Gender Strategy
Controls Keyboard
Languages English
Status Preserved

Screenshots

Description

The objective of the game is to place the various tiles with different shapes avoiding the accumulation of holes. As they fall, you can move blocks left or right or even rotate them with the cursor keys. When a layer is completed, it disappears and points will be added. This in turn helps us to access spaces left earlier in the game. If we fill the entire frame then the game will be over. The lower right window gives a preview of the block that will fall after the one on the screen. The better results we get, the faster the game will run, and the better the score will be too. We can press exit at any time of the game to leave it.

To start the game we will see a blinking indicator where the game level is chosen (1 to 9). The scores are continuously updated on the screen. We will be able to save the record to disk along with the player's name and it will then be displayed on the screen in future games with the position reset.

Listing

  • Listing 1 - TETRIS.BAS
10 DIM b(8,10):h!=HIMEM:MEMORY &HBFFE:FOR x=&HC070 TO &HC098:READ pk:POKE x,pk:NEXT x
20 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41
30 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201
40 CHAR=248:count=8:ch=CHAR:WHILE char<count+ch:POKE &HC099,(char):FOR r=1 TO 8:READ b(r,ct):POKE &HC099+r,(b(r,ct))
50 NEXT:cl=&HC070:CALL cl:char=char+1:WEND:MEMORY h!:CHAIN "TETRIS.scr
60 DATA 0,0,0,0,0,0,0,128, 17,68,17,68,17,68,17,68
70 DATA 170,85,170,85,170,85,170,85, 204,204,204,204,204,204,204,204, 255,0,255,0,255,0,255,0
80 DATA  204,51,204,51,204,51,204,51
90 DATA 102,204,153,51,102,204,153,51, 51,153,204,102,51,153,204,102
  • Listing 2 - TETRIS.SCR
10 OPTION RUN
12 h!=HIMEM:MEMORY,10000
20 ee$=CHR$(27):con$=ee$+"e":cof$=ee$+"f":PRINT cof$
30 ul$=ee$+"r":nul$=ee$+"u"
40 DEF FNat$(x,y)=ee$+"Y"+CHR$(32+x)+CHR$(32+y)
50 DEF FNd$(h,g)=STRING$(h,249+g)
60 c$=ee$+"E":PRINT c$ ee$ "0"
70 rev$=ee$+"p":rof$=ee$+"q"
80 RANDOMIZE(PEEK(64504!))
90 DEFINT a-z:DEFSTR a,b,c,e,k
100 er=CHR$(248)+" "
110 DIM z(22,15),E(19),A(19),B(19),L(20),N$(12),s(12)
120 FOR x=0 TO 20:FOR y=0 TO 11 STEP 11:z(x,y)=1:NEXT:NEXT:FOR y=0 TO 11:z(21,y)=1:NEXT
130 FOR i=0 TO 6:x(i)=i:NEXT
140 TOP=1:GOSUB 450
150 n=(RND*19):IF n=0 THEN 150
160 GOSUB 1030
170 PRINT rev$ FNat$(7,31)" "CHR$(150)+STRING$(24,154)+CHR$(156)" "
180 FOR x=8 TO 30:PRINT FNat(x,31)" "CHR$(149)CHR$(149)" "ROF$:FOR y=35 TO 57 STEP 2:PRINT FNat$(x,y)ER:NEXT:PRINT FNat$(X,55)REV$ " "CHR$(149)CHR$(149)" ":NEXT
190 PRINT rev$ FNat$(8,33)CHR$(150)+CHR$(154)ul$+STRING$(20,154)+nul$+CHR$(154)+CHR$(156)
200 PRINT FNat$(29,33)CHR$(147)+STRING$(22,154)+CHR$(153)
210 PRINT FNat$(30,31)" "CHR$(147)+STRING$(24,154)+CHR$(153)" "
220 PRINT rof$ FNAT$(5,0)CHR$(134)+STRING$(10,138)+CHR$(140)"     "CHR$(134)+STRING$(3,138)+CHR$(140)
230 PRINT FNat$(6,0)CHR$(133)"          "CHR$(133)"     "CHR$(133)"   "CHR$(133)
240 PRINT FNAT$(7,0)CHR$(131)+STRING$(10,138)+CHR$(137)"     "CHR$(131)+STRING$(3,138)+CHR$(137)
250 PRINT FNat$(8,0)rof$"TOTAL  SCORE     LEVEL"
260 PRINT FNAT$(24,67)CHR$(134)+STRING$(20,138)+CHR$(140)
270 PRINT FNAT$(5,67)CHR$(134)+STRING$(20,138)+CHR$(140)
280 PRINT FNat$(6,68)" PREVIOUS HI-SCORES"
290 FOR x=25 TO 29:PRINT FNat$(x,67)CHR$(133)" "er er er er er er er er er " " CHR$(133):NEXT
300 FOR x=6 TO 20:FOR y=67 TO 88 STEP 21:PRINT FNat$(x,y)CHR$(133):NEXT:NEXT
310 PRINT FNAT$(30,67)CHR$(131)+STRING$(20,138)+CHR$(137) 
320 PRINT FNAT$(21,67)CHR$(131)+STRING$(20,138)+CHR$(137) 
330 PRINT FNAT$(9,0)CHR$(134)+STRING$(20,138)+CHR$(140)
340 FOR x=10 TO 29:FOR y=0 TO 21 STEP 21:PRINT FNat$(x,y)CHR$(133):NEXT:NEXT
350 PRINT FNAT$(30,0)CHR$(131)+STRING$(20,138)+CHR$(137)
360 PRINT FNat$(10,2)B(1)
370 PRINT FNat$(13,2)B(2)
380 PRINT FNat$(15,2)B(4)
390 PRINT FNat$(18,2)B(8)
400 PRINT FNat$(21,2)B(12) 
410 PRINT FNat$(24,2)B(16) 
420 PRINT FNat$(27,4)B(18) 
430 'PRINT FNat$(26,75) b(n) 
440 MEMORY h!:RUN "TETRIS.OVL
450 c1=STRING$(2,8)+CHR$(10):c2=STRING$(4,8)+CHR$(10):c3=STRING$(6,8)+CHR$(10):b(1)=FNd$(4,0)+c2+FNd$(4,0)
460 a(1)=er+er+c2+er+er
470 e(1)=er+er
480 b(2)=FNd$(8,1)
490 a(2)=er+er+er+er
500 e(2)=er+er+er+er
510 b(3)=FNd$(2,1)+C1+FNd$(2,1)+c1+FNd$(2,1)+c1+FND$(2,1)
520 a(3)=er+C1+er+c1+er+c1+er
530 e(3)=er
540 b(4)=FNd$(6,2)+c1+FNd$(2,2)
550 a(4)=er+er+er+c1+er
560 e(4)=er+er+er
570 b(5)=FNd$(2,2)+c1+FNd$(2,2)+c2+FNd$(4,2)
580 a(5)=er+c1+er+c2+er+er
590 e(5)=er+c1+c1+er
600 b(6)=FNd$(2,2)+c1+FNd$(6,2)
610 a(6)=er+c1+er+er+er
620 e(6)=er+CHR$(10)+er+er
630 b(7)=FNd$(4,2)+c2+FNd$(2,2)+C1+FNd$(2,2)
640 a(7)=er+er+c2+er+C1+er
650 e(7)=er+er
660 b(8)=FNd$(6,3)+c3+FNd$(2,3)
670 a(8)=er+er+er+c3+er
680 e(8)=er+er+er
690 b(9)=FNd$(4,3)+c1+FNd$(2,3)+C1+FNd$(2,3)
700 a(9)=er+er+c1+er+C1+er
710 e(9)=er+er
720 b(10)=FNd$(2,3)+c3+FNd$(6,3)
730 a(10)=er+c3+er+er+er
740 e(10)=er+c3+er+er
750 b(11)=FNd$(2,3)+c1+FNd$(2,3)+c1+FNd$(4,3)
760 a(11)=er+c1+er+c1+er+er
770 e(11)=er+STRING$(2,10)+er
780 b(12)=FNd$(6,4)+c2+FNd$(2,4)
790 a(12)=er+er+er+c2+er
800 e(12)=er+er+er
810 b(13)=FNd$(2,4)+c2+FNd$(4,4)+c1+FNd$(2,4)
820 a(13)=er+c2+er+er+c1+er
830 e(13)=er+c2+er
840 b(14)=FNd$(2,4)+c2+FNd$(6,4)
850 a(14)=er+c2+er+er+er
860 e(14)=er+c2+er+FNd$(2,4)+er
870 b(15)=FNd$(2,4)+c1+FNd$(4,4)+c2+FNd$(2,4)
880 a(15)=er+c1+er+er+c2+er
890 e(15)=er+CHR$(10)+er
900 b(16)=FNd$(4,5)+c1+FNd$(4,5)
910 a(16)=er+er+c1+er+er
920 e(16)=er+er+CHR$(10)+er
930 b(17)=FNd$(2,5)+c2+FNd$(4,5)+c2+FNd$(2,5)
940 a(17)=er+c2+er+er+c2+er
950 e(17)=er+c2+er
960 b(18)=FNd$(4,6)+c3+FNd$(4,6)
970 a(18)=er+er+c3+er+er
980 e(18)=er+er+c3+er
990 b(19)=FNd$(2,6)+c1+FNd$(4,6)+c1+FNd$(2,6)
1000 a(19)=er+c1+er+er+c1+er
1010 e(19)=er+CHR$(10)+er
1020 RETURN
1030 banner(1)=FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(2,x(1))+" "+FNd$(6,x(1))
1040 banner(2)="  "+FNd$(2,x(2))+"   "+FNd$(2,x(2))+"       "+FNd$(2,x(2))+"   "+FNd$(2,x(2))+"  "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))
1050 banner(3)="  "+FNd$(2,x(3))+"   "+FNd$(4,x(3))+"     "+FNd$(2,x(3))+"   "+FNd$(5,X(3))+"  "+FNd$(2,x(3))+" "+FNd$(6,x(3))
1060 banner(4)="  "+FNd$(2,x(4))+"   "+FNd$(2,x(4))+"       "+FNd$(2,x(4))+"   "+FNd$(2,x(4))+"  "+FNd$(2,x(4))+" "+FNd$(2,x(4))+"     "+FNd$(2,x(4))
1070 banner(5)="  "+FNd$(2,x(5))+"   "+FNd$(6,x(5))+"   "+FNd$(2,x(5))+"   "+FNd$(2,x(5))+"  "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(6,x(5))
1080 FOR x=5 TO 1 STEP -1:PRINT FNat$(x-1,26)banner(x):NEXT
1090 RETURN
  • Listing 3 - TETRIS.OVL
10 OPTION RUN:h!=HIMEM:MEMORY,10000
20 ee$=CHR$(27):con$=ee$+"e"
30 ul$=ee$+"r":nul$=ee$+"u"
40 DEF FNat$(x,y)=ee$+"Y"+CHR$(32+x)+CHR$(32+y)
50 DEF FNd$(h,g)=STRING$(h,249+g)
70 rev$=ee$+"p":rof$=ee$+"q"
80 RANDOMIZE(PEEK(64504!))
90 DEFINT a-z:DEFSTR a,b,c,e,k
100 er=CHR$(248)+" "
110 DIM z(22,15),E(19),A(19),B(19),L(20),N$(12),s(12)
120 FOR x=0 TO 20:FOR y=0 TO 11 STEP 11:z(x,y)=1:NEXT:NEXT:FOR y=0 TO 11:z(21,y)=1:z(22,y)=1:NEXT
130 FOR i=0 TO 6:x(i)=i:NEXT
140 TOP=1:GOSUB 1760
150 n=(RND*19):IF n=0 THEN 150
440 GOSUB 2500
450 i=0:k=""
460 WHILE k="":k=INKEY$:GOSUB 2630:PRINT FNat$(6,18)"   ":GOSUB 2630:PRINT FNat$(6,18)rev$" ? "rof$:WEND
470 IF INSTR("-.*=+",k)>0 THEN k="":GOTO 460
480 r=VAL(k):IF r=0 THEN r=5
490 PRINT FNat$(6,18)USING "*#*";r
500 x1=1:x=1:y1=4:y=4
510 PRINT FNat$(26,75)a(n)
520 p=t:t=n:n=RND*19
530 IF n=0 THEN n=2
540 PRINT FNat$(26,75)b(n)
550 GOSUB 1240
560 GOSUB 1550
570 ok=FRE(""):IF r<9 THEN FOR delay=1 TO 8191 STEP (2^(r*1.5)):NEXT
580 k=INKEY$:IF k="" THEN 590 ELSE I=INSTR(CHR$(1)+CHR$(6)+CHR$(31)+CHR$(30)+CHR$(27),k):IF I>0 THEN 610
590 k=INKEY$:x=x+1:GOSUB 1240:GOSUB 1280
600 GOTO 570
610 ON I GOTO 620,760,950,1200,2340
620 ON T GOTO 630,640,650,660,670,630,680,630,690,700,680,710,720,730,680,710,740,730,750
630 IF z(x,y-1) OR z(x+1,y-1) THEN 590 ELSE GOTO 1180
640 IF z(x,y-1) THEN 590 ELSE GOTO 1180
650 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y-1) OR z(x+3,y-1) THEN 590 ELSE GOTO 1180
660 IF z(x,y-1) OR z(x+1,y+1) THEN 590 ELSE GOTO 1180
670 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y-2) THEN 590 ELSE GOTO 1180
680 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y-1) THEN 590 ELSE GOTO 1180
690 IF z(x,y-1) OR z(x+1,y) OR z(x+2,y) THEN 590 ELSE 1180
700 IF z(x,y-1) OR z(x+1,y-3) THEN 590 ELSE  1180
710 IF z(x,y-1) OR z(x+1,y) THEN 590 ELSE  1180
720 IF z(x,y-1) OR z(x+1,y-2) OR z(x+2,y-1) THEN 590 ELSE  1180
730 IF z(x,y-1) OR z(x+1,y-2) THEN 590 ELSE  1180
740 IF z(x,y-1) OR z(x+1,y-2) OR z(x+2,y-2) THEN 590 ELSE  1180
750 IF z(x,y-1) OR z(x+1,y-1) OR z(x+2,y) THEN 590 ELSE  1180
760 ON T GOTO 770,780,790,800,810,820,830,840,850,860,870,880,810,890,900,910,920,930,940
770 IF z(x,y+2) OR z(x+1,y+2) THEN 590 ELSE GOTO 1190
780 IF z(x,y+4) THEN 590 ELSE GOTO 1190
790 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y+1) OR z(x+3,y+1) THEN 590 ELSE GOTO 1190
800 IF z(x,y+3) OR z(x+1,y+3) THEN 590 ELSE GOTO 1190
810 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE GOTO 1190
820 IF z(x,y+1) OR z(x+1,y+3) THEN 590 ELSE GOTO 1190
830 IF z(x,y+2) OR z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE 1190
840 IF z(x,y+3) OR z(x+1,y+1) THEN 590 ELSE  1190
850 IF z(x,y+2) OR z(x+1,y+2) OR z(x+2,y+2) THEN 590 ELSE  1190
860 IF z(x,y+1) OR z(x+1,y+1) THEN 590 ELSE  1190
870 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y+2) THEN 590 ELSE  1190
880 IF z(x,y+3) OR z(x+1,y+2) THEN 590 ELSE  1190
890 IF z(x,y+1) OR z(x+1,y+2) THEN 590 ELSE  1190
900 IF z(x,y+1) OR z(x+1,y+2) OR z(x+2,y+1) THEN 590 ELSE GOTO 1190
910 IF z(x,y+2) OR z(x+1,y+3) THEN 590 ELSE  1190
920 IF z(x,y+1) OR z(x+1,y+1) OR z(x+2,y) THEN 590 ELSE GOTO 1190
930 IF z(x,y+2) OR z(x+1,y+1) THEN 590 ELSE  1190
940 IF z(x,y+1) OR z(x+1,y+2) OR z(x+2,y+2) THEN 590 ELSE GOTO 1190
950 ON t GOTO 590,960,970,980,990,1000,1010,1020,1029,1040,1050,1060,1070,1080,1090,1100,1110,1120,1130:RETURN
960 IF z(x+1,y) OR z(x+2,y) OR z(x+3,y) THEN 590 ELSE p=t:t=3:GOTO 1140 
970 IF z(x,y+1) OR z(x,y+2) OR z(x,y+3) THEN 590 ELSE p=t:t=2:GOTO 1140 
980 IF z(x+1,y) OR z(x+2,y) OR z(x+2,y-1) THEN 590 ELSE p=t:t=5:GOTO 1140 
990 IF z(x+1,y+1) OR z(x+2,y+2) THEN 590 ELSE p=t:t=6:GOTO 1140 
1000 IF z(x,y+1) OR z(x+2,y) THEN 590 ELSE p=t:t=7:GOTO 1140 
1010 IF z(x,y+2) OR z(x+1,y+2) THEN 590 ELSE p=t:t=4:GOTO 1140 
1020 IF z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE p=t:t=9:GOTO 1140 
1029 '
1030 IF z(x+1,MAX(0,y-2)) OR z(x+1,y-1) OR z(x+1,y) THEN 590 ELSE p=t:t=10:GOTO 1140 
1040 IF z(x+2,y) OR z(x+2,y+1) THEN 590 ELSE p=t:t=11:GOTO 1140 
1050 IF z(x,y+2) OR z(x,y+3) THEN 590 ELSE p=t:t=8:GOTO 1140 
1060 IF z(x+1,y-1) OR z(x+1,y) OR z(x+2,y) THEN 590 ELSE p=t:t=13:GOTO 1140 
1070 IF z(x+1,y+1) THEN 590 ELSE p=t:t=14:GOTO 1140 
1080 IF z(x+2,y) THEN 590 ELSE p=t:t=15:GOTO 1140 
1090 IF z(x,y+1) OR z(x,y+2) THEN 590 ELSE p=t:t=12:GOTO 1140 
1100 IF z(x+1,y) OR z(x+1,y-1) OR z(x+2,y-1) THEN 590 ELSE p=t:t=17:GOTO 1140 
1110 IF z(x,y+1) OR z(x+1,y+1) OR z(x+1,y+2) THEN 590 ELSE p=t:t=16:GOTO 1140 
1120 IF z(x+1,y+1) OR z(x+2,y+1) THEN 590 ELSE p=t:t=19:GOTO 1140 
1130 IF z(x+1,y-1) OR z(x,y+1) THEN 590 ELSE p=t:t=18:GOTO 1140 
1140 PRINT FNat$(x+8,y*2+33) a(p) 
1150 PRINT FNat$(x+8,y*2+33) b(t) 
1160 GOSUB 1280
1170 GOTO 590
1180 PRINT FNat$(x+8,y*2+33)a(t):y=y-1:GOSUB 1250:GOSUB 1280:GOTO 590
1190 PRINT FNat$(x+8,y*2+33)a(t):y=y+1:GOSUB 1250:GOSUB 1280:GOTO 590
1200 drop=1:x=x+1:GOSUB 1280:IF landed=0 THEN GOTO 1200
1210 PRINT FNat$(x1+8,y1*2+33) a(t) 
1220 PRINT FNat$(x+8,y*2+33) b(t) 
1230 landed=0:GOSUB 1280
1240 PRINT FNat$(x1+8,y1*2+33)E(T) 
1250 PRINT FNat$(x+8,y*2+33)B(T)
1260 x1=x:y1=y
1270 RETURN
1280 ON t GOSUB 1290,1300,1310,1320,1330,1340,1350,1360,1370,1380,1390,1400,1410,1420,1430,1440,1450,1460,1470:RETURN
1290 IF z(x+2,y) OR z(x+2,y+1) THEN z(x,y)=1:z(x,y+1)=1:z(x+1,y)=1:z(x+1,y+1)=1:GOTO 1480 ELSE RETURN
1300 IF z(x+1,y) OR z(x+1,y+1) OR z(x+1,y+2) OR z(x+1,y+3) THEN z(x,y)=2:z(x,y+1)=2:z(x,y+2)=2:z(x,y+3)=2:GOTO 1480 ELSE RETURN
1310 IF z(x+4,y) THEN z(x,y)=2:z(x+1,y)=2:z(x+2,y)=2:z(x+3,y)=2:GOTO 1480 ELSE RETURN
1320 IF z(x+1,y) OR z(x+1,y+1) OR z(x+2,y+2) THEN z(x,y)=3:z(x,y+1)=3:z(x,y+2)=3:z(x+1,y+2)=3:GOTO 1480 ELSE RETURN
1330 IF z(x+3,y-1) OR z(x+3,y) THEN z(x,y)=3:z(x+1,y)=3:z(x+2,y-1)=3:z(x+2,y)=3:GOTO 1480 ELSE RETURN
1340 IF z(x+2,y) OR z(x+2,y+1) OR z(x+2,y+2) THEN z(x,y)=3:z(x+1,y)=3:z(x+1,y+1)=3:z(x+1,y+2)=3:GOTO 1480 ELSE RETURN
1350 IF z(x+3,y) OR z(x+1,y+1) THEN z(x,y)=3:z(x,y+1)=3:z(x+1,y)=3:z(x+2,y)=3:GOTO 1480 ELSE RETURN
1360 IF z(x+2,y) OR z(x+1,y+1) OR z(x+1,y+2) THEN z(x,y)=4:z(x,y+1)=4:z(x,y+2)=4:z(x+1,y)=4:GOTO 1480 ELSE RETURN
1370 IF z(x+1,y) OR z(x+3,y+1) THEN z(x,y)=4:z(x,y+1)=4:z(x+1,y+1)=4:z(x+2,y+1)=4:GOTO 1480 ELSE RETURN
1380 IF z(x+2,y-2) OR z(x+2,y-1) OR z(x+2,y) THEN z(x,y)=4:z(x+1,y-2)=4:z(x+1,y-1)=4:z(x+1,y)=4:GOTO 1480 ELSE RETURN
1390 IF z(x+3,y) OR z(x+3,y+1) THEN z(x,y)=4:z(x+1,y)=4:z(x+2,y)=4:z(x+2,y+1)=4:GOTO 1480 ELSE RETURN
1400 IF z(x+1,y) OR z(x+2,y+1) OR z(x+1,y+2) THEN z(x,y)=5:z(x,y+1)=5:z(x,y+2)=5:z(x+1,y+1)=5:GOTO 1480 ELSE RETURN
1410 IF z(x+2,y-1) OR z(x+3,y) THEN z(x,y)=5:z(x+1,y-1)=5:z(x+1,y)=5:z(x+2,y)=5:GOTO 1480 ELSE RETURN
1420 IF z(x+2,y-1) OR z(x+2,y) OR z(x+2,y+1) THEN z(x,y)=5:z(x+1,y-1)=5:z(x+1,y)=5:z(x+1,y+1)=5:GOTO 1480 ELSE RETURN
1430 IF z(x+3,y) OR z(x+2,y+1) THEN z(x,y)=5:z(x+1,y)=5:z(x+1,y+1)=5:z(x+2,y)=5:GOTO 1480 ELSE RETURN
1440 IF z(x+1,y) OR z(x+2,y+1) OR z(x+2,y+2) THEN z(x,y)=6:z(x,y+1)=6:z(x+1,y+1)=6:z(x+1,y+2)=6:GOTO 1480 ELSE RETURN
1450 IF z(x+3,y-1) OR z(x+2,y) THEN z(x,y)=6:z(x+1,y-1)=6:z(x+1,y)=6:z(x+2,y-1)=6:GOTO 1480 ELSE RETURN
1460 IF z(x+2,y-1) OR z(x+2,y) OR z(x+1,y+1) THEN z(x,y)=7:z(x,y+1)=7:z(x+1,y-1)=7:z(x+1,y)=7:GOTO 1480 ELSE RETURN
1470 IF z(x+2,y) OR z(x+3,y+1) THEN z(x,y)=7:z(x+1,y)=7:z(x+1,y+1)=7:z(x+2,y+1)=7:GOTO 1480 ELSE RETURN
1480 IF x<3 THEN k=INKEYS$:k=INKEY$:GOTO 2340
1490 IF drop THEN drop=0:landed=1:RETURN
1500 TOP=MIN(TOP,x):FOR xx=x TO 20:l(xx)=0:FOR yy=1 TO 10
1510 IF z(xx,yy) THEN l(xx)=l(xx)+1
1520 NEXT:NEXT
1530 FOR XX=x TO 20:IF L(xx)=10 THEN PRINT CHR$(7):GOSUB 1700
1540 NEXT:GOTO 500
1550 ON t GOSUB 1630,1640,1640,1650,1650,1650,1650,1660,1660,1660,1660,1670,1670,1670,1670,1680,1680,1690,1690:d(8)=d(8)+1:PRINT FNat$(29,14) USING "####";d(8):PRINT FNat$(6,2) USING "#######";s 
1560 IF s>500 AND  r<2 THEN r=2
1570 IF s>1000 AND r<3 THEN r=3
1572 IF s>1250 AND r<4 THEN r=4
1580 IF s>1500 AND r<5 THEN r=5
1582 IF s>1750 AND r<6 THEN r=6
1590 IF s>2000 AND r<7 THEN r=7
1592 IF s>2500 AND r<8 THEN r=8
1600 IF s>3000 AND r<9 THEN r=9
1610 PRINT FNat$(6,18) USING "*#*";r
1620 RETURN
1630 s=s+15+(r/2):d(1)=d(1)+1:PRINT FNat$(11,15) USING "###";d(1):RETURN
1640 s=s+15+(r/2):d(2)=d(2)+1:PRINT FNat$(13,15) USING "###";d(2):RETURN
1650 s=s+17+(r/2):d(3)=d(3)+1:PRINT FNat$(15,15) USING "###";d(3):RETURN
1660 s=s+17+(r/2):d(4)=d(4)+1:PRINT FNat$(18,15) USING "###";d(4):RETURN
1670 s=s+19+(r/2):d(5)=d(5)+1:PRINT FNat$(21,15) USING "###";d(5):RETURN
1680 s=s+19+(r/2):d(6)=d(6)+1:PRINT FNat$(24,15) USING "###";d(6):RETURN
1690 s=s+19+(r/2):d(7)=d(7)+1:PRINT FNat$(27,15) USING "###";d(7):RETURN
1700 FOR ya=1 TO 10:FOR xa=xx TO TOP STEP -1
1710 IF z(xa,ya)=z(xa-1,ya) THEN 1740
1720 z(xa,ya)=z(xa-1,ya) 
1730 IF z(xa,ya) THEN PRINT FNat$(xa+8,ya*2+33) FNd$(2,(z(xa,ya)-1)) ELSE  PRINT FNat$(xa+8,ya*2+33)er
1740 NEXT:NEXT
1750 TOP=TOP+1:s=s+(r*4):PRINT FNat$(6,2) USING "#######";s :RETURN
1760 c1=STRING$(2,8)+CHR$(10):c2=STRING$(4,8)+CHR$(10):c3=STRING$(6,8)+CHR$(10):b(1)=FNd$(4,0)+c2+FNd$(4,0)
1770 a(1)=er+er+c2+er+er
1780 e(1)=er+er
1790 b(2)=FNd$(8,1)
1800 a(2)=er+er+er+er
1810 e(2)=er+er+er+er
1820 b(3)=FNd$(2,1)+C1+FNd$(2,1)+c1+FNd$(2,1)+c1+FND$(2,1)
1830 a(3)=er+C1+er+c1+er+c1+er
1840 e(3)=er
1850 b(4)=FNd$(6,2)+c1+FNd$(2,2)
1860 a(4)=er+er+er+c1+er
1870 e(4)=er+er+er
1880 b(5)=FNd$(2,2)+c1+FNd$(2,2)+c2+FNd$(4,2)
1890 a(5)=er+c1+er+c2+er+er
1900 e(5)=er+c1+c1+er
1910 b(6)=FNd$(2,2)+c1+FNd$(6,2)
1920 a(6)=er+c1+er+er+er
1930 e(6)=er+CHR$(10)+er+er
1940 b(7)=FNd$(4,2)+c2+FNd$(2,2)+C1+FNd$(2,2)
1950 a(7)=er+er+c2+er+C1+er
1960 e(7)=er+er
1970 b(8)=FNd$(6,3)+c3+FNd$(2,3)
1980 a(8)=er+er+er+c3+er
1990 e(8)=er+er+er
2000 b(9)=FNd$(4,3)+c1+FNd$(2,3)+C1+FNd$(2,3)
2010 a(9)=er+er+c1+er+C1+er
2020 e(9)=er+er
2030 b(10)=FNd$(2,3)+c3+FNd$(6,3)
2040 a(10)=er+c3+er+er+er
2050 e(10)=er+c3+er+er
2060 b(11)=FNd$(2,3)+c1+FNd$(2,3)+c1+FNd$(4,3)
2070 a(11)=er+c1+er+c1+er+er
2080 e(11)=er+STRING$(2,10)+er
2090 b(12)=FNd$(6,4)+c2+FNd$(2,4)
2100 a(12)=er+er+er+c2+er
2110 e(12)=er+er+er
2120 b(13)=FNd$(2,4)+c2+FNd$(4,4)+c1+FNd$(2,4)
2130 a(13)=er+c2+er+er+c1+er
2140 e(13)=er+c2+er
2150 b(14)=FNd$(2,4)+c2+FNd$(6,4)
2160 a(14)=er+c2+er+er+er
2170 e(14)=er+c2+er+FNd$(2,4)+er
2180 b(15)=FNd$(2,4)+c1+FNd$(4,4)+c2+FNd$(2,4)
2190 a(15)=er+c1+er+er+c2+er
2200 e(15)=er+CHR$(10)+er
2210 b(16)=FNd$(4,5)+c1+FNd$(4,5)
2220 a(16)=er+er+c1+er+er
2230 e(16)=er+er+CHR$(10)+er
2240 b(17)=FNd$(2,5)+c2+FNd$(4,5)+c2+FNd$(2,5)
2250 a(17)=er+c2+er+er+c2+er
2260 e(17)=er+c2+er
2270 b(18)=FNd$(4,6)+c3+FNd$(4,6)
2280 a(18)=er+er+c3+er+er
2290 e(18)=er+er+c3+er
2300 b(19)=FNd$(2,6)+c1+FNd$(4,6)+c1+FNd$(2,6)
2310 a(19)=er+c1+er+er+c1+er
2320 e(19)=er+CHR$(10)+er
2330 RETURN
2340 FOR q=1 TO 12:IF s>s(q) THEN 2360
2350 NEXT:GOTO 2410
2360 PRINT FNat$(20,68)" PLEASE INSERT NAME"
2370 FOR qq=12 TO q+1 STEP -1:n$(qq)=n$(qq-1):s(qq)=s(qq-1):NEXT:n$(q)="          ":s(q)=s
2380 FOR qq=1 TO 12:PRINT FNat$(7+qq,70) n$(qq) :PRINT FNat$(7+qq,81) USING "#####";s(qq):NEXT
2390 PRINT FNat$(q+7,70);:INPUT"",n$(q):n$(q)=UPPER$(LEFT$(n$(q),10))
2400 PRINT FNat$(7+q,70) n$(q)+SPACE$(11-LEN(n$(q))):PRINT FNat$(7+q,81) USING "#####";s(q)
2410 PRINT FNat$(20,68)"  PLAY AGAIN Y/N?  "
2420 k=UPPER$(INPUT$(1)):PRINT FNat$(20,68)"                 ":IF k="Y" THEN ERASE z,e,b,l,d:GOTO 2560
2430 IF k="N" THEN PRINT CHR$(7) ELSE GOTO 2410
2440 OPEN "O",#1,"TETRIS.REC"
2450 FOR q=1 TO 12
2460 WRITE #1, n$(q),s(q)
2470 NEXT
2480 CLOSE 
2490 MEMORY h!:end
2500 IF FIND$("TETRIS.REC")<>"" THEN OPEN "I",#1,"TETRIS.REC" ELSE PRINT FNat$(8,70)"NO RECORDS YET":GOTO 2550 
2510 FOR q=1 TO 12
2520 INPUT #1, n$(q),s(q)
2530 PRINT FNat$(7+q,70) n$(q) FNat$(7+q,81) USING "#####";s(q):NEXT
2540 CLOSE
2550 RETURN
2560 DIM z(22,15),E(19),B(19),L(20)
2570 FOR x=1 TO 20
2580 PRINT FNat$(x+8,35)er er er er er er er er er er
2590 PRINT FNat$(x+9,10)"          "
2600 NEXT:s=0
2610 FOR x=0 TO 20:FOR y=0 TO 11 STEP 11:z(x,y)=1:NEXT:NEXT:FOR y=0 TO 11:z(21,y)=1:NEXT
2620 GOSUB 1760:GOTO 450
2630 SWAP x(1),x(2):SWAP x(2),x(3):SWAP x(3),x(4):SWAP x(4),x(5):SWAP x(5),X(6):SWAP x(6),x(7)
2640 banner(1)=FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(6,x(1))+" "+FNd$(2,x(1))+" "+FNd$(6,x(1))
2650 banner(2)="  "+FNd$(2,x(2))+"   "+FNd$(2,x(2))+"       "+FNd$(2,x(2))+"   "+FNd$(2,x(2))+"  "+FNd$(2,x(2))+" "+FNd$(2,x(2))+" "+FNd$(2,x(2))
2660 banner(3)="  "+FNd$(2,x(3))+"   "+FNd$(4,x(3))+"     "+FNd$(2,x(3))+"   "+FNd$(5,X(3))+"  "+FNd$(2,x(3))+" "+FNd$(6,x(3))
2670 banner(4)="  "+FNd$(2,x(4))+"   "+FNd$(2,x(4))+"       "+FNd$(2,x(4))+"   "+FNd$(2,x(4))+"  "+FNd$(2,x(4))+" "+FNd$(2,x(4))+"     "+FNd$(2,x(4))
2680 banner(5)="  "+FNd$(2,x(5))+"   "+FNd$(6,x(5))+"   "+FNd$(2,x(5))+"   "+FNd$(2,x(5))+"  "+FNd$(2,x(5))+" "+FNd$(2,x(5))+" "+FNd$(6,x(5))
2690 FOR x=5 TO 1 STEP -1:PRINT FNat$(x-1,26)banner(x):NEXT
2700 RETURN

Controls

       ↑ = ROTATE TOKEN
       ↓ = SPEED DOWN
       → = RIGHT
       ← = LEFT
    EXIT = LEAVE GAME

Loading the program

 1.- Insert the CP/M disc on side 2
 2.- Write BASIC and wait for it to load
 3.- Remove the CP/M disk and insert the disk containing the Tetris game
 4.- Type run "Tetris" and press the "ENTER" key

Download

  • Tetris (game in dsk format, compressed with zip)
en/tetris.txt · Last modified: 2022/06/30 15:06 by jevicac