Skip to content

Instantly share code, notes, and snippets.

@wmcbrine
Created August 1, 2022 03:20

Revisions

  1. wmcbrine created this gist Aug 1, 2022.
    87 changes: 87 additions & 0 deletions saucer.bas
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,87 @@
    10 CLS
    20 CLEAR 50
    30 M=RND(219)
    40 N=RND(179)
    50 V=0:W=0:SK=0
    60 PMODE 4,1
    70 SCREEN 1,1
    80 PCLS
    90 DIM A(14)
    100 DIM Z(1)
    110 DIM E(12)
    120 DIM DR(9,2)
    130 READ X
    140 IF X=-1 THEN GOTO 190
    150 READ Q,R,S,T
    160 LINE (Q,R)-(S,T),PSET
    170 IF X>0 THEN FOR Q=1 TO X:READ S,T:LINE -(S,T),PSET:NEXT Q
    180 GOTO 130
    190 FOR X=1 TO 9:READ DR(X,1),DR(X,2):NEXT X
    200 GET (0,0)-(44,12),A,G
    210 GET (251,0)-(255,4),Z,G
    220 GET (0,180)-(36,192),E,G
    230 X1=3.34920635
    240 Y1=2.85714286
    250 X2=3.98412698
    260 Y2=2.96825397
    270 PCLS
    280 X=INT(JOYSTK(0)*X1):Y=INT(JOYSTK(1)*Y1)
    290 IF (SK=1) AND ((X=XO) AND (Y=YO)) THEN GOTO 330
    300 IF SK=1 THEN LINE (XO,YO)-(XO+44,YO+12),PRESET,BF
    310 PUT (X,Y)-(X+44,Y+12),A,PSET
    320 XO=X:YO=Y
    330 S=RND(22)
    340 T=RND(9)
    350 M=M+S*DR(T,1)
    N=N+S*DR(T,2)
    370 IF M<0 THEN M=M+220 ELSE IF M>219 THEN M=M-220
    380 IF N<0 THEN N=N+180 ELSE IF N>179 THEN N=N-180
    390 IF (SK=1) AND ((MO=M) AND (NO=N)) THEN GOTO 430
    400 IF SK=1 THEN LINE (MO,NO)-(MO+36,NO+12),PRESET,BF
    410 PUT (M,N)-(M+36,N+12),E,PSET
    420 MO=M:NO=N
    430 IF ((X<M+36) AND (M<X+44)) AND ((Y<N+12) AND (N<Y+12)) THEN GOTO 700
    440 B=INT(JOYSTK(2)*X2)+2:C=INT(JOYSTK(3)*Y2)+2
    450 IF SK=1 THEN LINE (BO-2,CO-2)-(BO+2,CO+2),PRESET,BF
    460 PUT (B-2,C-2)-(B+2,C+2),Z,PSET
    470 BO=B:CO=C
    480 SK=1
    490 T=PEEK(65280)
    500 IF T<>126 AND T<>254 THEN GOTO 280
    510 SOUND 100,1:LINE(X+22,Y+6)-(B,C),PSET
    520 IF ((M<B AND B<M+36) AND (N<C AND C<N+12)) THEN FOR S=200 TO 210:SOUND S,1:NEXT S:V=V+1
    530 IF V=6 THEN GOTO 640
    540 Q=X+RND(100)-28
    550 R=Y+RND(32)-10
    560 IF Q<0 THEN Q=0 ELSE IF Q>255 THEN Q=255
    570 IF R<0 THEN R=0 ELSE IF R>191 THEN R=191
    580 LINE (M+18,N+6)-(Q,R),PSET:SOUND 100,1
    590 IF ((X<Q) AND (Q<(X+44))) AND ((Y<R) AND (R<(Y+12))) THEN FOR S=10 TO 1 STEP -1:SOUND S,1:NEXT S:W=W+1
    600 IF W=3 THEN GOTO 700
    610 PCLS
    620 SK=0
    630 GOTO 280
    640 FOR S=1 TO 255 STEP 10
    650 SOUND S,1
    660 NEXT S
    670 PRINT"WINNER! ";
    680 IF INKEY$<>"" THEN RUN
    690 GOTO 670
    700 FOR S=255 TO 1 STEP -10
    710 SOUND S,1
    720 NEXT S
    730 PRINT"LOSER! ";
    740 IF INKEY$<>"" THEN RUN
    750 GOTO 730
    760 DATA 3,16,0,28,0,44,8,0,8,16,0
    770 DATA 2,4,8,8,12,36,12,40,8
    780 DATA 3,20,4,24,4,26,6,18,6,20,4
    790 DATA 3,16,4,14,6,9,6,12,4,16,4
    800 DATA 3,28,4,32,4,35,6,30,6,28,4
    810 DATA 0,251,2,255,2,0,253,0,253,4
    820 DATA 5,8,180,28,180,36,186,28,192,8,192,0,186,8,180
    830 DATA 0,18,180,18,192
    840 DATA 1,13,180,9,186,13,192
    850 DATA 1,23,180,27,186,23,192
    860 DATA 0,0,186,36,186,-1
    870 DATA -1,1,-1,0,-1,-1,0,-1,1,-1,1,0,1,1,0,1,0,0