Skip to content

Instantly share code, notes, and snippets.

@wmcbrine
Created August 1, 2022 03:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wmcbrine/9471b25910bd7fe0caa21a0f1afab34e to your computer and use it in GitHub Desktop.
Save wmcbrine/9471b25910bd7fe0caa21a0f1afab34e to your computer and use it in GitHub Desktop.
Saucer, a space duel (game for the CoCo)
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment