-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path3d_invaders.bas
166 lines (166 loc) · 3.65 KB
/
3d_invaders.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
0 REM 3D INVADERS
10 MODE 7
20 PROCIN
30 MODE 2
40 VDU 5
50 PROCVA
60 PROCBD
70 PROCIV
80 GCOL 3,1
90 REPEAT
100 FOR P%=0 TO D
110 MOVE U%,64
120 PRINTT$
130 PROCMV
140 MOVE U%,64
150 PRINT S$
160 IF INKEY(-74) THEN PROCLL
170 IF L% THEN PROCFI
180 NEXT
190 PROCAD
200 IF A%=8 THEN A%=7
210 UNTIL I(A%,0)=9
220 PROCEX
230 MODE 6
240 PROCNG
250 RUN
260 END
270 DEF PROCIN
280 VDU 31,10,10,141
290 PRINT "3D Invaders"
300 VDU 31,10,11,141
310 PRINT "3D Invaders"
320 T=TIME
330 REPEAT
340 UNTIL INKEY(-99) OR TIME-T>200
350 ENDPROC
360 DEF PROCVA
370 DIM C$(7)
380 FOR A%=0 TO 7
390 C$(A%)=CHR$18+CHR$0+CHR$A%
400 NEXT
410 VDU 23,255,60,126,0,0,0,24,24,24
420 VDU 23,254,0,0,255,219,126,36,66,129
430 DIM I$(7)
440 FOR A%=2 TO 7
450 I$(A%)=C$(A%-1)+CHR$255+CHR$8+C$(A%)+CHR$254
460 NEXT
470 I$(0)=C$(7)+CHR$255+CHR$8+C$(1)+CHR$254
480 I$(1)=C$(3)+CHR$255+CHR$8+C$(1)+CHR$254
490 VDU 23,253,0,0,0,0,0,102,129,129
500 VDU 23,252,0,0,0,24,24,24,24,0
510 VDU 23,251,0,0,0,0,0,0,102,126
520 S$=C$(1)+CHR$252+CHR$8+C$(2)+CHR$251+CHR$8+C$(3)+CHR$253
530 DIM I(7,2)
540 FOR A%=0 TO 7
550 I(A%,0)=1
560 I(A%,1)=RND(1200)
570 I(A%,2)=RND(512)+300
580 NEXT
590 U%=640
600 M%=32
610 L%=0
620 VDU 23,250,0,0,0,24,24,126,255,255
630 T$=C$(0)+CHR$250
640 D=200
650 VDU 23,249,60,126,255,219,126,60,90,153
660 V$=C$(0)+CHR$249
670 K%=0
680 ENVELOPE 1,138,0,-4,4,1,2,2,100,0,0,-50,100,100
690 S%=0
700 ENDPROC
710 DEF PROCIV
720 FOR A%=0 TO 7
730 MOVE I(A%,1),I(A%,2)
740 IF I(A%,0)=9 THEN ENDPROC
750 IF I(A%,0) THEN PRINT I$(8-I(A%,0))
760 NEXT
770 ENDPROC
780 DEF PROCBD
790 MOVE 160,1023
800 FOR A%=7 TO 0 STEP -1
810 PRINT I$(A%);
820 VDU 10,10,8,56-A%,9,11,11
830 NEXT
840 MOVE 288,896
850 GCOL 3,6
860 PRINT "Score: 0"
870 ENDPROC
880 DEF PROCAD
890 SOUND 1,-1,250-D,10
900 E%=0
910 D=D-2
920 FOR A%=0 TO 7
930 I(A%,0)=I(A%,0)+1
940 E%=(I(A%,0)=8)+E%
950 NEXT
960 PROCIV
970 ENDPROC
980 DEF PROCFI
990 PROCBU
1000 IF H%>900 THEN L%=0:ENDPROC
1010 IF INKEY(-1) THEN 1190
1020 H%=H%+16
1030 PROCBU
1040 ENDPROC
1050 DEF PROCLL
1060 IF L% THEN ENDPROC
1070 SOUND 0, -10,4,-1
1080 L%=-1
1090 B%=U%
1100 H%=128
1110 D=D-RND(1)
1120 PROCBU
1130 ENDPROC
1140 DEF PROCBU
1150 GCOL 3,1
1160 MOVE B%,H%
1170 VDU 252
1180 ENDPROC
1190 L%=0
1200 Q%=0
1210 *FX15,0
1220 FOR A%=0 TO 7
1230 X%=ABS(I(A%,1)-B%)
1240 Y%=ABS(I(A%,2)-H%)
1250 IF X%<32 AND Y%<64 THEN Q%=-1:W%=A%
1260 NEXT A%
1270 IF Q%=0 THEN ENDPROC
1280 MOVE I(W%,1),I(W%,2)
1290 PRINT V$
1300 GCOL 3.6
1310 MOVE 736,896
1320 PRINT ;K%
1330 K%=K%+(8-1(W%,0))*25
1340 MOVE 736,896
1350 PRINT ;K%
1360 I(W%,1)=RND(1200)
1370 I(W%,2)=RND(512)+300
1380 I(W%,0)=0
1390 ENDPROC
1400 DEF PROCMV
1410 U%=U%+(INKEY(-98)-INKEY(-83))*16
1420 IF U%>1200 THEN U%=0
1430 IF U%<0 THEN U%=1200
1440 ENDPROC
1450 DEF PROCEX
1460 *FX15,0
1470 FOR A%=1 TO 200
1480 VDU 19,0,RND(7),0,0,0
1490 SOUND RND(3), -12,RND(200),1
1500 NEXT
1510 ENDPROC
1520 DEF PROCNG
1530 PRINT " You let them get within range to fire!!!"
1540 IF H%<K% THEN H%=K%
1550 PRINTTAB(0,4); "You scored ";k%
1560 PRINT "Hi-Score ";H%
1570 PRINT ''"Press Y or N"
1580 PRINT "to play again"
1590 REPEAT
1600 UNTIL INKEY(-69) OR INKEY(-86)
1610 IF INKEY(-69) THEN ENDPROC
1620 *FX15,0
1630 CLS
1640 END
1650 ENDPROC