110 REM === http://reddit.com/r/RetroBattlestations 120 REM === written by FozzTexx 130 REM === Kaypro 4/84 version by RottenSalad 200 REM === Clear screen and setup variables 210 PRINT CHR$(27)+"C4":PRINT CHR$(26) 220 CL=40:RW=24:REM Columns and Rows of screen 230 CA=45:CN=5:REM Angle and lenght of cannon 240 CX=5:PX=CL-5:SC=0:LV=3 250 PI=3.14159 300 REM === Play game 310 CV=INT(RND(1)*15)+10:GOSUB 4010:GOSUB 2010 320 GOSUB 2510 330 IF ASC(KE$)=11 THEN CA=CA+5:IF CA>85 THEN CA=85 340 IF ASC(KE$)=10 THEN CA=CA-5:IF CA<15 THEN CA=15 350 IF KE$="Q" OR KE$="q" OR KE$=CHR$(81) OR KE$=CHR$(113) THEN PRINT CHR$(27)+"B4":END 360 IF KE$=" " THEN 410 370 GOSUB 1010 380 GOTO 320 400 REM === Fire! 410 LX=(CN+1)*COS((360-CA)*PI/180):LY=(CN+1)*SIN((360-CA)*PI/180) 420 BX=CX+LX:BY=RW+LY 430 GOSUB 1510 440 VX=CV*COS((360-CA)*PI/180):VY=CV*SIN((360-CA)*PI/180) 500 REM === Move player and animate ball 510 GOSUB 2510 520 IF ASC(KE$)=8 THEN PX=PX-1:IF PXCL-1 THEN PX=CL-1 540 GOSUB 2010 550 BX=BX+(VX/10):BY=BY+(VY/10):GOSUB 1510 560 VY=VY+2 570 IF BY=PX-1 AND IX<=PX+1 THEN SC=SC+10:PRINT CHR$(7):GOTO 310 640 LV=LV-1:GOSUB 4010 650 IF LV<1 THEN P$="GAME OVER":X1%=(CL-LEN(P$))/2:Y1%=RW/2:GOSUB 3510:PRINT CHR$(27)+"B4":END 660 GOTO 310 1000 REM === Draw cannon 1010 IF (CA=LA) THEN RETURN 1020 P$="ANGLE: "+STR$(CA)+" ":X1%=2:Y1%=1:GOSUB 3510 1030 LX=CN*COS((360-LA)*PI/180):LY=CN*SIN((360-LA)*PI/180) 1040 X1=CX:Y1=RW:X2=X1+LX:Y2=Y1+LY:P$=" ":GOSUB 3010 1050 LX=CN*COS((360-CA)*PI/180):LY=CN*SIN((360-CA)*PI/180) 1060 X2=X1+LX:Y2=Y1+LY:P$="%":GOSUB 3010 1070 LA=CA:RETURN 1500 REM === Draw ball 1510 X1%=BX:Y1%=BY:P$="o":GOSUB 3510 1520 IF BX%<>X1% OR BY%<>Y1% THEN X1%=BX%:Y1%=BY%:P$=" ":GOSUB 3510 1530 BX%=BX:BY%=BY 1540 RETURN 2000 REM === Draw player 2010 P$="U":X1%=PX:Y1%=RW:GOSUB 3510 2020 IF PX%<>X1% THEN X1%=PX%:P$=" ":GOSUB 3510 2030 PX%=PX 2040 RETURN 2500 REM === Read the keyboard 2510 KE$=INKEY$:IF LEN(KE$)=0 THEN 2510 2520 RETURN 3000 REM === Plot a line 3010 X1%=X1:X2%=X2:Y1%=Y1:Y2%=Y2 3020 DX%=ABS(X2%-X1%):SX%=-1:IF X1%DY% THEN ER%=DX% 3050 ER%=ER%/2 3060 GOSUB 3510 3070 IF X1%=X2% AND Y1%=Y2% THEN RETURN 3080 E2%=ER% 3090 IF E2%>-DX% THEN ER%=ER%-DY%:X1%=X1%+SX% 3100 IF X1%=X2% AND Y1%=Y2% THEN RETURN 3110 IF E2%CL OR Y1%<1 OR Y1%>RW THEN RETURN 3520 PRINT CHR$(27)+"="+CHR$(Y1%+32)+CHR$(X1%+32); 3530 PRINT P$;:PRINT CHR$(30) 3540 RETURN 4000 REM === Show score/lives/velocity 4010 P$="VELOCITY: "+STR$(CV)+" ":X1%=CL/3:Y1%=1:GOSUB 3510 4020 P$="SCORE: "+STR$(SC):X1%=CL*2/3:GOSUB 3510 4030 P$=MID$(" UUU",LV+1,3):X1%=CL-2:GOSUB 3510 4040 RETURN