c64-basic/orbit-lab/orbit-lab.bas

36 lines
1.5 KiB
QBasic

10 GOSUB 9000
100 G=50:T=1:GOSUB 500
110 PRINT CHR$(147):PRINT "ORBIT LAB GRAVITY";G;" 1/2/3"
120 PRINT "T=TRAIL SPACE=PAUSE R=RESET Q=QUIT"
130 IF T=1 THEN 140
135 O=1024+INT(12+Y)*40+INT(20+X):IF O>=1024 AND O<2024 THEN POKE O,32
140 R=SQR(X*X+Y*Y):IF R<2 OR R>19 THEN GOSUB 500:GOTO 130
150 AX=-G*X/(R*R*R):AY=-G*Y/(R*R*R)
160 VX=VX+AX*.08:VY=VY+AY*.08:X=X+VX*.08:Y=Y+VY*.08
170 POKE 1024+12*40+20,42:POKE 55296+12*40+20,7
180 P=1024+INT(12+Y)*40+INT(20+X)
190 IF P>=1024 AND P<2024 THEN POKE P,81:POKE P+54272,3
200 GET A$:IF A$="1" THEN G=35
210 IF A$="2" THEN G=50
220 IF A$="3" THEN G=70
230 IF A$="T" THEN T=1-T
250 IF A$="R" THEN GOSUB 500
260 IF A$=" " THEN GOSUB 600
270 IF A$<>"Q" THEN 130
280 GOTO 9900
500 X=12:Y=0:VX=0:VY=2.05:RETURN
600 GET A$:IF A$="" THEN 600
610 IF A$="Q" THEN 9900
620 RETURN
9000 POKE 53280,0:POKE 53281,0:PRINT CHR$(147);CHR$(154)
9010 PRINT:PRINT:PRINT " ORBIT LAB":PRINT
9020 PRINT CHR$(5);" WATCH VELOCITY BEND AROUND GRAVITY":PRINT:PRINT
9030 PRINT CHR$(153);" CONTROLS":PRINT
9040 PRINT CHR$(158);" 1-3";CHR$(5);" GRAVITY ";CHR$(158);"T";CHR$(5);" TRAIL ";CHR$(158);"R";CHR$(5);" RESET"
9050 PRINT " ";CHR$(158);"SPACE";CHR$(5);" PAUSE ";CHR$(158);"Q";CHR$(5);" QUIT":PRINT:PRINT
9060 PRINT " HTTPS://C64.P20.DEV":PRINT
9070 PRINT CHR$(152);" RELEASED 22 OCTOBER 2026":PRINT:PRINT
9080 PRINT CHR$(158);" PRESS SPACE TO START"
9090 GET A$:IF A$<>" " THEN 9090
9100 RETURN
9900 POKE 53280,14:POKE 53281,6:PRINT CHR$(147):END