c64-basic/projectile-lab/projectile-lab.bas

30 lines
1.4 KiB
QBasic

10 GOSUB 9000
100 PRINT CHR$(147):INPUT "LAUNCH SPEED (5-30)";V
110 IF V<5 OR V>30 THEN 100
120 INPUT "ANGLE (10-80 DEGREES)";A
130 IF A<10 OR A>80 THEN 120
140 R=A*3.14159265/180:G=9.8
150 D=V*V*SIN(2*R)/G:H=V*V*SIN(R)*SIN(R)/(2*G)
160 PRINT CHR$(147):PRINT "PROJECTILE LAB SPEED";V;" ANGLE";A
170 PRINT "RANGE";INT(D*10)/10;"M HEIGHT";INT(H*10)/10;"M"
180 FOR X=1 TO 38:POKE 1024+22*40+X,45:POKE 55296+22*40+X,12:NEXT
190 FOR I=0 TO 38:X=D*I/38:Y=X*TAN(R)-G*X*X/(2*V*V*COS(R)*COS(R))
200 IF Y<0 THEN Y=0
210 Q=21-INT(Y/H*17):IF Q<4 THEN Q=4
220 P=1024+Q*40+I+1:POKE P,42:POKE P+54272,7:NEXT
230 PRINT:PRINT "R=RELAUNCH Q=QUIT"
240 GET A$:IF A$="R" THEN 100
250 IF A$<>"Q" THEN 240
260 GOTO 9900
9000 POKE 53280,0:POKE 53281,0:PRINT CHR$(147);CHR$(154)
9010 PRINT:PRINT:PRINT " PROJECTILE LAB":PRINT
9020 PRINT CHR$(5);" PLOT A FLIGHT THROUGH GRAVITY":PRINT:PRINT
9030 PRINT CHR$(153);" CONTROLS":PRINT
9040 PRINT CHR$(158);" 5-30";CHR$(5);" SPEED ";CHR$(158);"10-80";CHR$(5);" ANGLE"
9050 PRINT " ";CHR$(158);"R";CHR$(5);" RELAUNCH ";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