mirror of
https://github.com/tilleul/apple2.git
synced 2024-11-25 20:31:48 +00:00
161 lines
4.6 KiB
QBasic
161 lines
4.6 KiB
QBasic
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 |