mirror of
https://github.com/tilleul/apple2.git
synced 2025-02-17 19:30:27 +00:00
Add files via upload
This commit is contained in:
parent
e1d1c66265
commit
7f3badb8d5
473
honoring_the_code/002 - lores tetris/htc2_tetris.bas
Normal file
473
honoring_the_code/002 - lores tetris/htc2_tetris.bas
Normal file
@ -0,0 +1,473 @@
|
||||
REM KEYS
|
||||
|
||||
|
||||
REM J/K/L: left/down/right
|
||||
REM F/G or U/O: rotate left/right
|
||||
REM I: quick drop
|
||||
REM P: PAUSE
|
||||
REM Q: quit
|
||||
|
||||
REM GAME LOOP FROM 1 TO 740
|
||||
|
||||
0 GOTO 1000
|
||||
1 IF W>LV THEN W=Z: GOTO 4
|
||||
2 W=W+U: ON PEEK(L)-V GOTO 11,9,1,380,7,3,8,1,1,9,740,720,1,1,1,11: GOTO 1
|
||||
3 POKE KC,Z
|
||||
|
||||
REM DOWN
|
||||
4 Y=Y+U: J=J+O: R=U
|
||||
|
||||
REM erase_check_n_restore
|
||||
5 INVERSE: HTAB M:VTAB N:PRINT Z$;: POKE FA,FI: IF SCRN(I+A,J+B)+ SCRN(I+C,J+D)+SCRN(I+E,J+F)+ SCRN(I+G,J+H) THEN Y=N: X=M: HTAB X: VTAB Y: PRINT A$; : ON R GOTO 400: I=X-U: GOTO 1
|
||||
|
||||
REM draw new position
|
||||
6 M=X:N=Y: R=Z: HTAB X: VTAB Y: PRINT A$;: GOTO 1
|
||||
|
||||
REM LEFT
|
||||
7 POKE KC,Z: X=I: I=X-U:GOTO 5
|
||||
|
||||
REM RIGHT
|
||||
8 POKE KC,Z: I=X: X=X+U: GOTO 5
|
||||
|
||||
|
||||
REM ROT_RIGHT
|
||||
9 POKE KC,Z: SS=S: S=S-Q: TT=T: T=T-U: IF T<Z THEN T=P:S=S+S6: GOTO 260
|
||||
10 GOTO 260
|
||||
|
||||
REM ROT LEFT
|
||||
11 POKE KC,Z: SS=S: S=S+Q: TT=T: T=T+U: IF T=Q THEN T=Z:S=S-S6
|
||||
|
||||
|
||||
REM CHECK IF ROT POSSIBLE, IF NOT RESTORE AND REDRAW
|
||||
260 AA=A: BB=B:CC=C:DD=D:EE=E:FF=F:GG=G:HH=H: A= X(S+Z): B=Y(S+Z): C=X(S+U): D=Y(S+U): E=X(S+O): F=Y(S+O): G=X(S+P): H=Y(S+P)
|
||||
270 INVERSE: HTAB X:VTAB Y:PRINT Z$;: POKE FA,FI: IF SCRN(I+A,J+B)+SCRN(I+C,J+D)+SCRN(I+E,J+F)+SCRN(I+G,J+H) THEN A=AA:B=BB:C=CC:D=DD:E=EE:F=FF:G=GG:H=HH: S=SS: T=TT: HTAB X: VTAB Y: PRINT A$; : GOTO 1
|
||||
|
||||
REM ROTATION IS POSSIBLE, SET NEW VALUES
|
||||
280 SS=S: QS=NS*Q+T: A$=A$(QS): Z$=Z$(QS): HTAB X: VTAB Y: PRINT A$;: GOTO 1
|
||||
|
||||
|
||||
REM QUICK DROP
|
||||
380 POKE KC,Z: Y=Y+U: J=J+O: INVERSE: HTAB M:VTAB N:PRINT Z$;: POKE FA,FI: IF NOT SCRN(I+A,J+B) THEN IF NOT SCRN(I+C,J+D) THEN IF NOT SCRN(I+E,J+F) THEN IF NOT SCRN(I+G,J+H) THEN M=X:N=Y: R=R+U: HTAB X: VTAB Y: PRINT A$;: GOTO 380
|
||||
390 SC=SC+N0*INT(R/N5): Y=N: X=M: HTAB X: VTAB Y: PRINT A$; : NORMAL: HTAB 1: VTAB T1: PRINT "SCORE: "SC;
|
||||
|
||||
|
||||
|
||||
REM check_lines
|
||||
400 A=PEEK(SP): A=PEEK(SP): IF Y=1 THEN GOTO 700
|
||||
410 J=J-O: IF LJ>J THEN LJ=J
|
||||
420 R=Z: RN=-U: K= J+Q+Q: IF K>NY THEN K=NY
|
||||
430 FOR JJ = J TO K STEP O: G=U: FOR I = MX TO NX: IF NOT SCRN(I,JJ) THEN I=NX+U: G=Z
|
||||
440 NEXT
|
||||
450 IF G THEN RN=RN+U: R(RN) = JJ
|
||||
460 NEXT
|
||||
470 IF RN<Z THEN 610
|
||||
480 FOR C = Z TO 32: A=PEEK(SP): COLOR=C: FOR I=Z TO RN: HLIN MX,NX AT R(I): HLIN MX,NX AT R(I)+U: NEXT: NEXT
|
||||
490 FOR K = Z TO RN: Y=R(K): FOR J = Y-U TO LJ-U STEP -O: FOR I=MX TO NX: COLOR=SCRN(I,J): PLOT I,J+O: COLOR=SCRN(I,J-U): PLOT I,J+U: NEXT: NEXT: LJ=LJ+O: NEXT
|
||||
|
||||
560 SC=SC+P(RN): LI=LI+RN+U: IF LI>=NL THEN NL=NL+TL: LV=LV-U: IF LV<U THEN LV=U
|
||||
|
||||
600 NORMAL: HTAB U: VTAB T1: PRINT "SCORE: "SC: PRINT "LINES: "LI: PRINT "LEVEL: "ML-LV
|
||||
610 INVERSE: HTAB E8: VTAB N0: PRINT Z$(PS*Q); : NS=PS: PS=INT(RND(U)*7): POKE FA, C(PS): HTAB E8: VTAB N0: PRINT A$(PS*Q);
|
||||
|
||||
620 S=NS*S6: QS=NS*Q: A$=A$(QS): Z$=Z$(QS): FI=C(NS): T=Z: X=T1: Y=U: N=Y: M=X: SS=S: A= X(S+Z): B=Y(S+Z): C=X(S+U): D=Y(S+U): E=X(S+O): F=Y(S+O): G=X(S+P): H=Y(S+P): POKE FA,FI: HTAB X: VTAB Y: ? A$; : I=X-U: J=Y-U: W=Z: GOTO 1
|
||||
|
||||
|
||||
|
||||
REM GAME OVER
|
||||
700 POKE KC,Z: PRINT CHR$(7)+CHR$(7)+CHR$(7): VTAB T2: HTAB T0: INVERSE: PRINT ">>> GAME OVER <<<"; : VTAB T4: HTAB N0: NORMAL: PRINT "PLAY AGAIN (Y/N) ? "; :GET K$: IF K$<>"N" THEN 2020
|
||||
710 TEXT: HOME: NORMAL: PRINT "THANKS FOR PLAYING ! ": IF DS THEN CALL 43089: REM RECONNECT DOS
|
||||
715 END
|
||||
720 POKE KC,Z: VTAB T4: HTAB U: INVERSE: ? "ARE YOU SURE (Y/N)?"; : GET K$ : IF K$ = "Y" THEN 710
|
||||
730 HTAB U: CALL - 868: GOSUB 2600: POKE FA,FI: GOTO 1
|
||||
|
||||
REM PAUSE
|
||||
740 POKE KC,Z: VTAB T4: HTAB O: FLASH: PRINT ">>> PAUSED <<<";: GET K$: POKE KC,Z: VTAB T4: HTAB 1: CALL - 868: GOSUB 2600: POKE FA,FI: GOTO 1
|
||||
|
||||
|
||||
REM VARIABLES
|
||||
REM A$: STRING REPRESENTING THE SHAPE TO PRINT
|
||||
REM A/B/C/D/E/F/G/H: X/Y OFFSETS TO CHECK
|
||||
REM AA/BB/CC/DD/EE/FF/GG/HH PREVIOUS VALUES OF A/B/C/D/E/F/G/H
|
||||
REM AA$: PREVIOUS VALUE OF A$
|
||||
REM E8: CONSTANT 8
|
||||
REM FA: CONSTANT 50
|
||||
REM FI: INVERSE FLAG TO POKE
|
||||
REM I/J: PIECE POSITION ON LORES SCREEN
|
||||
REM K: MISC. COUNTER
|
||||
REM KC: CLEAR KBD STROBE CONSTANT (49168)
|
||||
REM L: CONSTANT 49152 (LAST KEY HIT ADDR.)
|
||||
REM LV: LEVEL
|
||||
REM M/N: PREVIOUS X/Y POSITION
|
||||
REM MX/NX: PIT LEFT AND PIT RIGHT POSITIONS (15/24)
|
||||
REM MY/NY: PIT TOP/BOTTOM POS
|
||||
REM ML: MAX LEVEL
|
||||
REM NS: SHAPE #
|
||||
REM N0: CONSTANT 10
|
||||
REM O: CONSTANT 2
|
||||
REM P: CONSTANT 3
|
||||
REM Q: CONSTANT 4
|
||||
REM R: PIECE GOING DOWN FLAG (0/1)
|
||||
REM S: SHAPE OFFSET NUMBER 0..27
|
||||
REM SS: PREVIOUS SHAPE OFFSET 0..27
|
||||
REM SP: CONSTANT 49200 (SPEAKER)
|
||||
REM T: 0-3 COUNTER
|
||||
REM TT: PREVIOUS VALUE OF T
|
||||
REM T0, T1, T2, T4: CONSTANTS 20, 21, 22, 24
|
||||
REM U: CONSTANT 1
|
||||
REM V: CONSTANT 197 = MIN. KEY #
|
||||
REM X/Y: PIECE POSITION ON TEXT SCREEN
|
||||
REM Z: CONSTANT 0
|
||||
REM Z$: STRING TO ERASE SHAPE
|
||||
REM ZZ$: PREVIOUS VALUE OF Z$
|
||||
|
||||
|
||||
REM DECLARE MOST USED VARIABLES FIRST !
|
||||
|
||||
1000 U=1:X=0:Y=0:Z=0:S=0:O=2:M=0:N=0:K=0:R=0:SS=0:A$="":Z$="":A=0:B=0:C=0:D=0:E=0:F=0:G=0:H=0:T=0:TT=0:P=3:Q=4:L=49152:V=197:CE=62248:FA=50:FI=0:KC=49168:S6=16:MX=15:NX=24:MY=4:NY=36:SP=49200:N5=5:N0=10:T1=21:T2=22:T4=24:T0=20:E8=8
|
||||
|
||||
1010 GOSUB 3000: TEXT: HOME: NORMAL: HTAB 5: PRINT "A TETRIS CLONE IN PURE APPLESOFT": HTAB 13: PRINT "BY FVL (C) 2022"
|
||||
1020 VTAB 4: HTAB 17: PRINT "KEYS:"
|
||||
1030 VTAB 6: PRINT " J/K/L : MOVE LEFT/DOWN/RIGHT"
|
||||
1040 PRINT " F/G OR U/O : ROTATE LEFT/RIGHT"
|
||||
1050 PRINT " I : QUICK DROP"
|
||||
1060 PRINT " P : PAUSE"
|
||||
1070 PRINT " Q : QUIT"
|
||||
1080 VTAB 12: HTAB 15: PRINT "POINTS:"
|
||||
1090 VTAB 14: PRINT " 1 LINE : 40 POINTS"
|
||||
1100 PRINT " 2 LINES : 100 POINTS"
|
||||
1110 PRINT " 3 LINES : 300 POINTS"
|
||||
1120 PRINT " 4 LINES : 1200 POINTS"
|
||||
1130 PRINT " QUICK DROP : 0-30 POINTS": HTAB 15: PRINT "(HEIGHT DEPENDENT)"
|
||||
1140 VTAB 21: HTAB 9: PRINT "NEW LEVEL EVERY 5 LINES": VTAB 22: HTAB 5: PRINT "SPEED INCREASES WITH EACH LEVEL"
|
||||
|
||||
|
||||
1380 VTAB T4: HTAB 8: PRINT "PLEASE WAIT >>> .......";: TH= PEEK(36): TA = PEEK(40)+PEEK(41)*256+TH-7
|
||||
|
||||
|
||||
|
||||
1390 DIM X(111), Y(111), A$(27), Z$(27), C(6): FOR S=0 TO 6: POKE TA+S, PEEK(TA+S)-128 : FOR J=0 TO 3: FOR I=0 TO 3: READ X(S*S6 + J*Q + I), Y(S*S6 + J*Q + I): NEXT: NEXT: READ C(S): NEXT
|
||||
1400 D$ = CHR$(10): L$=CHR$(8): Q$=CHR$(34): F$=CHR$(102)
|
||||
|
||||
|
||||
REM SQUARE SHAPE
|
||||
REM .xX.
|
||||
REM .xx.
|
||||
|
||||
1410 A$(0) = L$+"QQ"+D$+L$+L$+"QQ": A$(1)=A$(0): A$(2)=A$(0): A$(3)=A$(0)
|
||||
1420 Z$(0) = L$+"@@"+D$+L$+L$+"@@": Z$(1)=Z$(0): Z$(2)=Z$(0): Z$(3)=Z$(0): POKE TA, 160
|
||||
|
||||
REM BAR
|
||||
REM ..O.
|
||||
REM xxxx
|
||||
|
||||
1430 A$(4) = D$ + L$ + L$ + Q$+ Q$+ Q$+ Q$: Z$(4) = + L$ + L$ + D$ + "@@@@"
|
||||
|
||||
REM .xO.
|
||||
REM .x..
|
||||
REM .x..
|
||||
REM .x..
|
||||
|
||||
1440 A$(5) = L$ + Q$ + D$+L$+Q$+ D$+L$+Q$+ D$+L$+Q$
|
||||
1450 Z$(5) = L$ + "@" + D$+L$+"@"+ D$+L$+"@"+ D$+L$+"@"
|
||||
1460 A$(6) = A$(4): A$(7)=A$(5): Z$(6) = Z$(4): Z$(7)=Z$(5): POKE TA+1, 160
|
||||
|
||||
REM T-SHAPE
|
||||
REM .xO.
|
||||
REM xxx.
|
||||
|
||||
1470 A$(8) = L$ + "L" + D$ + L$ + L$ + "LLL": Z$(8) = L$ + "@" + D$+L$ + L$ +"@@@"
|
||||
|
||||
REM .xO.
|
||||
REM xx..
|
||||
REM .x..
|
||||
|
||||
1480 A$(9) = L$ + "L" + D$+L$+L$+ "LL" + D$+L$+"L": Z$(9) = L$ + "@" + D$+L$+L$+ "@@" + D$+L$+"@"
|
||||
|
||||
REM ..O.
|
||||
REM xxx.
|
||||
REM .x..
|
||||
|
||||
1490 A$(10) = D$ + L$ + L$ + "LLL" + D$+L$+L$+"L": Z$(10) = D$ + L$ + L$ + "@@@" + D$+L$+L$+"@"
|
||||
|
||||
REM .xO.
|
||||
REM .xx.
|
||||
REM .x..
|
||||
|
||||
1500 A$(11) = L$ + "L" + D$ + L$+"LL" + D$+L$+L$+ "L": Z$(11) = L$ + "@" + D$ + L$+"@@" + D$+L$+L$+ "@": POKE TA+2, 160
|
||||
|
||||
REM L-SHAPE
|
||||
REM ..O.
|
||||
REM xxx.
|
||||
REM x...
|
||||
|
||||
1510 A$(12) = D$ + L$ + L$ + "]]]" + D$ + L$+ L$+ L$+"]": Z$(12) = D$ + L$ + L$ + "@@@" + D$ + L$+ L$+ L$+"@"
|
||||
|
||||
REM .xO.
|
||||
REM .x..
|
||||
REM .xx.
|
||||
|
||||
1520 A$(13) = L$ + "]"+ D$ + L$ + "]"+ D$ + L$ + "]]": Z$(13) = L$ + "@"+ D$ + L$ + "@"+ D$ + L$ + "@@"
|
||||
|
||||
REM ..X.
|
||||
REM xxx.
|
||||
|
||||
1530 A$(14) = "]" + D$ + L$+ L$+ L$+"]]]": Z$(14) = "@" + D$ + L$+ L$+ L$+"@@@"
|
||||
|
||||
REM xxO.
|
||||
REM .x..
|
||||
REM .x..
|
||||
|
||||
1540 A$(15) = L$+L$+"]]" + D$ + L$ + "]" + D$ + L$ + "]": Z$(15) = L$+L$+"@@" + D$ + L$ + "@" + D$ + L$ + "@": POKE TA+3, 160
|
||||
|
||||
REM L-SHAPE INVERTED
|
||||
REM ..O.
|
||||
REM xxx.
|
||||
REM ..x.
|
||||
|
||||
1550 A$(16) = D$ + L$ + L$ + F$ + F$ + F$ + D$ + L$+ F$: Z$(16) = D$ + L$ + L$ + "@@@" + D$ + L$+ "@"
|
||||
|
||||
REM .xX.
|
||||
REM .x..
|
||||
REM .x..
|
||||
|
||||
1560 A$(17) = L$ + F$ + F$ + D$ + L$+L$ + F$+ D$ + L$ + F$: Z$(17) = L$ + "@@" + D$ + L$+L$ + "@"+ D$ + L$ + "@"
|
||||
|
||||
REM x.O.
|
||||
REM xxx.
|
||||
|
||||
1570 A$(18) = L$ + L$ + F$ + D$ + L$ + F$ + F$ + F$: Z$(18) = L$ + L$ + "@" + D$ + L$ + "@@@"
|
||||
|
||||
REM .xO.
|
||||
REM .x..
|
||||
REM xx..
|
||||
|
||||
1580 A$(19) = L$ + F$ + D$+L$ + F$ + D$+L$ + L$ + F$ + F$: Z$(19) = L$ + "@" + D$+L$ + "@" + D$+L$+L$ + "@@": POKE TA+4, 160
|
||||
|
||||
REM Z-SHAPE
|
||||
|
||||
REM xxO.
|
||||
REM .xx.
|
||||
|
||||
1590 A$(20) = L$ + L$ + "33" + D$ + L$ + "33": Z$(20) = L$ + L$ + "@@" + D$ + L$ + "@@"
|
||||
|
||||
REM .xO.
|
||||
REM xx..
|
||||
REM x...
|
||||
|
||||
1600 A$(21) = L$ + "3" + D$ + L$ + L$ + "33" + D$ + L$ + L$ + "3": Z$(21) = L$ + "@" + D$ + L$ + L$ + "@@" + D$ + L$ + L$ + "@"
|
||||
1610 A$(22) = A$(20): A$(23) = A$(21): Z$(22) = Z$(20): Z$(23) = Z$(21): POKE TA+5, 160
|
||||
|
||||
REM S-SHAPE
|
||||
REM .xX.
|
||||
REM xx..
|
||||
|
||||
1620 A$(24) = L$ + ";;" + D$ + L$ + L$ + L$ + ";;": Z$(24) = L$ + "@@" + D$ + L$ + L$ + L$ + "@@"
|
||||
|
||||
REM x.O.
|
||||
REM xx..
|
||||
REM .x..
|
||||
|
||||
1630 A$(25) = L$ + L$ + ";" + D$ + L$ + ";;" + D$ + L$ + ";": Z$(25) = L$ + L$ + "@" + D$ + L$ + "@@" + D$ + L$ + "@"
|
||||
1640 A$(26) = A$(24): A$(27) = A$(25): Z$(26) = Z$(24): Z$(27) = Z$(25): POKE TA+6, 160
|
||||
|
||||
1700 VTAB 24: CALL - 868: HTAB 1: INVERSE: PRINT " <<< ANY KEY TO CONTINUE >>> "; : POKE TA-TH+39+7,32: WAIT 49152, 128
|
||||
|
||||
|
||||
2000 P(0)=40: P(1)=100: P(2)=300:P(3)=1200: DS= PEEK(40672) = 162: IF DS THEN CALL 40672: REM DISCONNECT DOS FOR FASTER PRINT
|
||||
|
||||
2010 Q$ = CHR$(119) + CHR$(119) + CHR$(119) + CHR$(119) + CHR$(119): Q$=Q$+Q$+Q$+Q$+Q$+Q$+Q$+Q$: SL=1: OD=0: OL=5
|
||||
2020 HOME: GR: FLASH: FOR I=1 TO 20: VTAB I: ? Q$;: NEXT: INVERSE: FOR I = 1 TO 19: HTAB 16: VTAB I: ? "@@@@@@@@@@";: NEXT: FOR I= 9 TO 13: VTAB I: HTAB 5: PRINT "@@@@@@";: NEXT
|
||||
|
||||
2080 NORMAL
|
||||
2090 POKE KC, Z: VTAB 21: HTAB 7: PRINT "STARTING LEVEL: ";: INVERSE: PRINT SL;: NORMAL : PRINT SPC(SL<10)" (+/-) TO CHANGE";
|
||||
2100 VTAB 22: HTAB 4: PRINT "OBSTACLES DENSITY: ";: INVERSE: PRINT OD;: NORMAL: PRINT " (O/P) TO CHANGE";
|
||||
2110 VTAB 23: HTAB 1: PRINT "OBSTACLES UP TO LINE: ";: INVERSE: PRINT OL;: NORMAL: PRINT SPC(OL<10)" (L/M) TO CHANGE";
|
||||
|
||||
2120 INVERSE: VTAB 24: HTAB 3: PRINT "<<< PRESS ANY OTHER KEY TO START >>>"; : GET K$: NORMAL
|
||||
2130 IF K$<>"+" AND K$<>"-" THEN 2170
|
||||
REM CHANGE LEVEL
|
||||
2140 SL=SL+44-ASC(K$): IF SL<1 THEN SL=40: GOTO 2090
|
||||
2150 IF SL>40 THEN SL=1
|
||||
2160 GOTO 2090
|
||||
2170 IF K$="L" OR K$="M" THEN 2250: REM CHANGE OBSTACLES LINE
|
||||
2180 IF K$<>"O" AND K$<>"P" THEN 2300: REM START GAME
|
||||
REM CHANGE OBSTACLES DENSITY
|
||||
2190 OD=OD-2*ASC(K$)+159: IF OD>7 THEN OD=0
|
||||
2200 IF OD<0 THEN OD=7
|
||||
2210 GOTO 2090
|
||||
REM CHANGE OBSTACLES FINAL LINE
|
||||
2250 OL=OL-2*ASC(K$)+153: IF OL>15 THEN OL=5
|
||||
2260 IF OL<5 THEN OL=15
|
||||
2270 GOTO 2090
|
||||
|
||||
2300 HOME: SC=0: LJ=40: ML=41: LV=ML-SL: PS=INT(RND(U)*7): LI=0: TL=5: NL=TL: GOSUB 2600
|
||||
2310 IF NOT OD THEN 2400
|
||||
2320 FOR J=NY TO NY+2-OL*2 STEP -2: K=0: FOR I=0 TO 9
|
||||
2330 IF K<9 AND RND(1)*10<=OD THEN CC=INT(RND(1)*16): CC=CC*(CC<>7): COLOR=CC: PLOT I+MX,J: PLOT I+MX,J+1: K=K+(CC>0)
|
||||
2340 NEXT: NEXT
|
||||
|
||||
2400 GOTO 600
|
||||
|
||||
2600 NORMAL: VTAB 21: HTAB 19: PRINT "J/K/L: LEFT/DOWN/RIGHT";: HTAB 15: PRINT "F/G - U/O: ROTATE L/R": HTAB 23: PRINT "I: QUICK DROP": HTAB 21: PRINT "P/Q: PAUSE/QUIT";: HTAB 2: INVERSE: PRINT "=== TETRIS ===";: RETURN
|
||||
|
||||
REM =========== ONERR GOTO
|
||||
REM ALSO PREPARE AMPERSAND VECTOR TO JMP TO $F328 (RESET STACK POSITION WITHOUT RESUME)
|
||||
REM ANYTHING AFTER ON ERR ON THE SAME LINE IS IGNORED BY APPLESOFT
|
||||
|
||||
3000 ON ERR GOTO 3100
|
||||
3010 POKE 1013, 76: POKE 1014,40: POKE 1015,243: RETURN
|
||||
|
||||
REM === 3072 is next multiple of 256, so going to line 3100 in case of error will only skip line 3010 !
|
||||
REM USE AMPERSAND TO DO A CALL 62248 (-3288) TO SPARE A FEW CYCLES.
|
||||
3100 &: GOTO 1
|
||||
|
||||
|
||||
|
||||
|
||||
REM ======================================= CHECKING POINTS
|
||||
|
||||
REM BECAUSE PRINT CAN ONLY MOVE THE CURSOR LEFT AND DOWN, WE HAVE TO ASSUME WE START IN POS (3,0)
|
||||
REM X MARKS A PLOTTED STARTING POINT, O MARKS AN UNPLOTTED STARTING POINT
|
||||
|
||||
REM 0123
|
||||
REM 0..X.
|
||||
REM 1....
|
||||
REM 2....
|
||||
REM 3....
|
||||
|
||||
|
||||
REM SQUARE SHAPE
|
||||
REM .xX.
|
||||
REM .xx.
|
||||
|
||||
10010 DATA 0, 0,-1, 0, 0, 2,-1, 2
|
||||
10020 DATA 0, 0,-1, 0, 0, 2,-1, 2
|
||||
10030 DATA 0, 0,-1, 0, 0, 2,-1, 2
|
||||
10040 DATA 0, 0,-1, 0, 0, 2,-1, 2,63 : REM [] COLOR=MAGENTA (Q INVERSED)
|
||||
|
||||
REM BAR
|
||||
REM ..O.
|
||||
REM xxxx
|
||||
|
||||
10050 DATA 0, 2,-1, 2,-2, 2, 1, 2
|
||||
|
||||
REM .xO.
|
||||
REM .x..
|
||||
REM .x..
|
||||
REM .x..
|
||||
|
||||
10060 DATA -1, 0,-1, 2,-1, 4,-1, 6
|
||||
10070 DATA 0, 2,-1, 2,-2, 2, 1, 2
|
||||
10080 DATA -1, 0,-1, 2,-1, 4,-1, 6
|
||||
10090 DATA 63: REM COLOR=DARK BLUE (" INVERSED)
|
||||
|
||||
REM T-SHAPE
|
||||
REM .xO.
|
||||
REM xxx.
|
||||
|
||||
10100 DATA -1, 0,-2, 2,-1, 2, 0, 2
|
||||
|
||||
REM .xO.
|
||||
REM xx..
|
||||
REM .x..
|
||||
|
||||
10110 DATA -1, 0,-2, 2,-1, 2, -1, 4
|
||||
|
||||
REM ..O.
|
||||
REM xxx.
|
||||
REM .x..
|
||||
|
||||
10120 DATA -2, 2,-1, 2, 0, 2, -1, 4
|
||||
|
||||
REM .xO.
|
||||
REM .xx.
|
||||
REM .x..
|
||||
|
||||
10130 DATA -1, 0,-1, 2, 0, 2,-1, 4
|
||||
|
||||
10140 DATA 255: REM COLOR=GREEN (L NORMAL)
|
||||
|
||||
REM L-SHAPE
|
||||
REM ..O.
|
||||
REM xxx.
|
||||
REM x...
|
||||
|
||||
10150 DATA -2,2,-1,2,0,2,-2,4
|
||||
|
||||
REM .xO.
|
||||
REM .x..
|
||||
REM .xx.
|
||||
|
||||
10160 DATA -1,0,-1,2,-1,4,0,4
|
||||
|
||||
REM ..X.
|
||||
REM xxx.
|
||||
|
||||
10170 DATA 0,0,-2,2,-1,2,0,2
|
||||
|
||||
REM xxO.
|
||||
REM .x..
|
||||
REM .x..
|
||||
|
||||
10180 DATA -2,0,-1,0,-1,2,-1,4
|
||||
|
||||
10190 DATA 255: REM COLOR=YELLOW (] NORMAL)
|
||||
|
||||
REM L-SHAPE INVERTED
|
||||
REM ..O.
|
||||
REM xxx.
|
||||
REM ..x.
|
||||
|
||||
10200 DATA -2,2,-1,2,0,2,0,4
|
||||
|
||||
REM .xX.
|
||||
REM .x..
|
||||
REM .x..
|
||||
|
||||
10210 DATA 0,0,-1,0,-1,2,-1,4
|
||||
|
||||
REM x.O.
|
||||
REM xxx.
|
||||
|
||||
10220 DATA -2,0,-2,2,-1,2,0,2
|
||||
|
||||
REM .xO.
|
||||
REM .x..
|
||||
REM xx..
|
||||
|
||||
10230 DATA -1,0,-1,2,-1,4,-2,4
|
||||
|
||||
10240 DATA 127: REM COLOR=MEDIUM BLUE (CHAR 102 AND FLAG 127)
|
||||
|
||||
REM Z-SHAPE
|
||||
|
||||
REM xxO.
|
||||
REM .xx.
|
||||
|
||||
10250 DATA -2,0,-1,0,-1,2,0,2
|
||||
|
||||
REM .xO.
|
||||
REM xx..
|
||||
REM x...
|
||||
|
||||
10260 DATA -1,0,-1,2,-2,2,-2,4
|
||||
10270 DATA -2,0,-1,0,-1,2,0,2
|
||||
10280 DATA -1,0,-1,2,-2,2,-2,4
|
||||
|
||||
10290 DATA 63: REM COLOR=PURPLE (3 INVERSE)
|
||||
|
||||
REM S-SHAPE
|
||||
REM .xX.
|
||||
REM xx..
|
||||
|
||||
10300 DATA 0,0,-1,0,-1,2,-2,2
|
||||
|
||||
REM x.O.
|
||||
REM xx..
|
||||
REM .x..
|
||||
|
||||
10310 DATA -2,0,-2,2,-1,2,-1,4
|
||||
10320 DATA 0,0,-1,0,-1,2,-2,2
|
||||
10330 DATA -2,0,-2,2,-1,2,-1,4
|
||||
|
||||
10340 DATA 255: REM COLOR=PINK (; NORMAL)
|
BIN
honoring_the_code/002 - lores tetris/htc2_tetris.dsk
Normal file
BIN
honoring_the_code/002 - lores tetris/htc2_tetris.dsk
Normal file
Binary file not shown.
161
honoring_the_code/002 - lores tetris/paleotronic_tetris.bas
Normal file
161
honoring_the_code/002 - lores tetris/paleotronic_tetris.bas
Normal file
@ -0,0 +1,161 @@
|
||||
10 GOSUB 1000
|
||||
100 W = W +1: IF W >LV THEN W = 0: GOSUB 350
|
||||
110 K = PEEK(KB): IF K > = H THEN POKE KC,H:K = K -H: GOSUB 300
|
||||
190 GOTO 100
|
||||
200 PY = PY *A2: VLIN PY,PY +A1 AT PX: RETURN
|
||||
225 PY = PY *A2: HLIN X1,X2 AT PY: HLIN X1,X2 AT PY +A1: RETURN
|
||||
300 ON E(K) GOTO 30000,330,340,350,360,30100
|
||||
310 RETURN
|
||||
330 X = X -1: GOTO 400
|
||||
340 X = X +1: GOTO 400
|
||||
350 DN = 1:Y = Y +1: GOSUB 400:DN = 0: RETURN
|
||||
360 S = S +1: IF S/4 = INT(S/4) THEN S = S -4
|
||||
400 GOSUB 500
|
||||
410 GOSUB 800: IF F = 0 THEN X = XX:Y = YY:S = SS: GOSUB 420: IF DN THEN GOSUB 900
|
||||
420 COLOR= CF: FOR PP = 1 TO 4:PX = X +X(S,PP):PY = Y +Y(S,PP): GOSUB 200: NEXT PP:XX = X:YY = Y:SS = S:D = 0: RETURN
|
||||
500 IF DD THEN RETURN
|
||||
510 COLOR= CB: FOR PP = 1 TO 4:PX = XX +X(SS,PP):PY = YY +Y(SS,PP): GOSUB 200: NEXT PP:DD = 0: RETURN
|
||||
800 F = 1: FOR PP = 1 TO 4:PY = Y +Y(SS,PP): ON ( FN PC(X +X(S,PP)) >0) GOTO 805: NEXT PP: RETURN
|
||||
805 F = 0: RETURN
|
||||
850 F = 1: RETURN
|
||||
900 P = 10: GOSUB 30300
|
||||
905 RN = 0:Y = YM
|
||||
910 X = XL
|
||||
920 PY = Y: IF FN PC(X) = CB THEN 950
|
||||
930 X = X +1: IF X < = XR THEN 920
|
||||
940 R(RN) = Y:RN = RN +1
|
||||
950 Y = Y -1: IF Y > = 0 THEN 910
|
||||
960 IF RN THEN GOSUB 30400
|
||||
970 Y = 0
|
||||
980 X = INT((XR -XL)/2) +XL
|
||||
985 S = INT( RND(1) *NS):CF = C(S):S = S *4
|
||||
990 GOSUB 800: IF F THEN RETURN
|
||||
995 GOTO 31000
|
||||
1000 DIM E(127),X(27,4),Y(27,4),R(40)
|
||||
1010 TEXT : HOME : GR
|
||||
1011 PRINT "WELCOME..."
|
||||
1014 LM = 10
|
||||
1015 XM = 10:YM = 15
|
||||
1016 XL = INT((40 -XM)/2)
|
||||
1017 XR = XL +XM -1
|
||||
1021 A1 = 1
|
||||
1022 A2 = 2
|
||||
1030 DEF FN PC(X) = SCRN( X,PY *A2)
|
||||
1040 CB = 0
|
||||
1050 XX = 20:YY = 0:SS = 0
|
||||
1100 KB = -16384
|
||||
1110 KC = -16368
|
||||
1120 H = 128
|
||||
1129 REM KEYBOARD ACTIONS
|
||||
1130 REM QUIT
|
||||
1131 E( ASC("Q")) = 1
|
||||
1132 E( ASC("Q") -64) = 1
|
||||
1140 REM MOVE LEFT
|
||||
1141 E(8) = 2
|
||||
1142 E( ASC(",")) = 2
|
||||
1150 REM MOVE RIGHT
|
||||
1151 E(21) = 3
|
||||
1152 E( ASC(".")) = 3
|
||||
1160 REM MOVE DOWN
|
||||
1161 E(32) = 4
|
||||
1162 E( ASC("Z")) = 4
|
||||
1170 REM ROTATE
|
||||
1171 E( ASC("R")) = 5
|
||||
1172 E(13) = 5
|
||||
1173 E( ASC("A")) = 5
|
||||
1179 REM PAUSE GAME
|
||||
1180 E( ASC("P")) = 6
|
||||
1181 E( ASC("P") -64) = 6
|
||||
1185 GOSUB 2000
|
||||
1186 GOSUB 1300
|
||||
1190 PRINT "PRESS ANY KEY TO START..."
|
||||
1191 PRINT
|
||||
1192 PRINT "PRESS Q TO QUIT."
|
||||
1193 GOTO 31020
|
||||
1299 REM DRAW THE GAME
|
||||
1300 COLOR= 4: FOR I = 0 TO 19:X1 = 0:X2 = 39:PY = I: GOSUB 225: NEXT
|
||||
1320 COLOR= CB: FOR I = 0 TO YM:X1 = XL:X2 = XR:PY = I: GOSUB 225: NEXT
|
||||
1350 RETURN
|
||||
1400 DATA 1
|
||||
1401 DATA 0,0,1,0,0,1,1,1
|
||||
1402 DATA 0,0,1,0,0,1,1,1
|
||||
1403 DATA 0,0,1,0,0,1,1,1
|
||||
1404 DATA 0,0,1,0,0,1,1,1
|
||||
1410 DATA 2
|
||||
1411 DATA 0,1,1,1,2,1,3,1
|
||||
1412 DATA 1,0,1,1,1,2,1,3
|
||||
1413 DATA 0,1,1,1,2,1,3,1
|
||||
1414 DATA 1,0,1,1,1,2,1,3
|
||||
1420 DATA 12
|
||||
1421 DATA 1,1,0,1,1,0,2,1
|
||||
1422 DATA 1,1,0,1,1,0,1,2
|
||||
1423 DATA 1,1,0,1,2,1,1,2
|
||||
1424 DATA 1,1,1,0,2,1,1,2
|
||||
1430 DATA 13
|
||||
1431 DATA 1,1,0,1,2,1,0,2
|
||||
1432 DATA 1,1,1,0,1,2,2,2
|
||||
1433 DATA 1,1,0,1,2,1,2,0
|
||||
1434 DATA 1,1,1,0,1,2,0,0
|
||||
1440 DATA 9
|
||||
1441 DATA 1,1,0,1,2,1,2,2
|
||||
1442 DATA 1,1,1,0,1,2,2,0
|
||||
1443 DATA 1,1,0,1,2,1,0,0
|
||||
1444 DATA 1,1,1,0,1,2,0,2
|
||||
1450 DATA 3
|
||||
1451 DATA 1,1,1,0,0,0,2,1
|
||||
1452 DATA 1,1,1,0,0,1,0,2
|
||||
1453 DATA 1,1,1,0,0,0,2,1
|
||||
1454 DATA 1,1,1,0,0,1,0,2
|
||||
1460 DATA 6
|
||||
1461 DATA 1,1,0,1,1,0,2,0
|
||||
1462 DATA 1,1,0,1,0,0,1,2
|
||||
1463 DATA 1,1,0,1,1,0,2,0
|
||||
1464 DATA 1,1,0,1,0,0,1,2
|
||||
1990 DATA -1
|
||||
2000 X = 0:Y = 0
|
||||
2010 NS = 0
|
||||
2020 READ C: IF C < > -1 THEN C(NS) = C: FOR J = 0 TO 3: FOR I = 1 TO 4: READ X(NS *4 +J,I): READ Y(NS *4 +J,I): NEXT I: NEXT J:NS = NS +1: GOTO 2020
|
||||
2030 RETURN
|
||||
21210 P = 1: RETURN
|
||||
30000 TEXT : HOME : END
|
||||
30100 HOME
|
||||
30110 PRINT "GAME PAUSED. PRESS P TO CONTINUE..."
|
||||
30120 P = 1
|
||||
30130 K = PEEK(KB): IF K > = H THEN POKE KC,H:K = K -H: GOSUB 30200
|
||||
30140 IF P THEN 30130
|
||||
30150 HOME
|
||||
30160 PRINT "SCORE ";SC; TAB( 21);"LEVEL ";LM -LV +1
|
||||
30170 RETURN
|
||||
30200 ON E(K) GOTO 30000,30210,30210,30210,30210,30220
|
||||
30210 RETURN
|
||||
30220 P = 0
|
||||
30230 RETURN
|
||||
30300 SC = SC +P
|
||||
30310 VTAB 21: HTAB 7
|
||||
30320 PRINT SC;
|
||||
30330 RETURN
|
||||
30400 RN = RN -1
|
||||
30410 FOR C = 0 TO 32
|
||||
30415 COLOR= C
|
||||
30420 FOR I = 0 TO RN:X1 = XL:X2 = XR:PY = R(I): GOSUB 225: NEXT I
|
||||
30430 FOR I = 0 TO 2: NEXT I
|
||||
30440 NEXT C
|
||||
30450 FOR I = 0 TO RN
|
||||
30460 Y = R(I) +I
|
||||
30470 YP = Y -1: FOR X = XL TO XR:PY = YP: COLOR= FN PC(X):PX = X:PY = Y: GOSUB 200: NEXT X:Y = Y -1: IF Y >0 THEN 30470
|
||||
30480 P = 100: GOSUB 30300
|
||||
30490 NEXT I
|
||||
30495 RETURN
|
||||
31000 VTAB 22: PRINT
|
||||
31010 PRINT " GAME OVER"
|
||||
31020 P = 1
|
||||
31030 K = PEEK(KB): IF K > = H THEN POKE KC,H:K = K -H: GOSUB 31200
|
||||
31040 IF P THEN 31030
|
||||
31050 D = 1
|
||||
31060 SC = 0:LV = LM
|
||||
31070 GOSUB 30150
|
||||
31080 GOSUB 1300
|
||||
31090 GOTO 905
|
||||
31200 ON E(K) GOTO 30000
|
||||
31210 P = 0: RETURN
|
||||
32000 REM END OF LISTING
|
Loading…
x
Reference in New Issue
Block a user