-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFWRKS2.BAS
More file actions
170 lines (149 loc) · 3.37 KB
/
Copy pathFWRKS2.BAS
File metadata and controls
170 lines (149 loc) · 3.37 KB
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
167
168
169
DEFINT A-Z
DECLARE SUB volley ()
DECLARE SUB ascend (X, Y)
DECLARE SUB exp1 (X, Y)
DECLARE SUB exp2 (X, Y)
DECLARE SUB exp3 (X, Y)
DECLARE SUB exp4 (X, Y)
SCREEN 0
WIDTH 80, 50
CLS
RANDOMIZE TIMER
TIMER ON
' More Advanced (and buggy...) Fireworks
' R. Bassett Jr.
' 2021.05.28
'
' Logic Flow:
' Number of explosions?
' Position of explosions?
' Loop until all explosions cleared:
' Draw dots towards positions
' If position reached, do explosion
' Clear explosion
' Repeat
I$ = ""
S# = TIMER
DIM SHARED F AS INTEGER
F = 6 ' Number of fireworks
DIM SHARED D AS INTEGER
D = 0 ' Number of fwrks that have completed
DIM SHARED highest AS INTEGER
highest = 1 ' The highest firework in the volley
DIM SHARED fwrks(F) AS INTEGER ' Current Y position of fireworks
DIM SHARED xPos(F) AS INTEGER ' X position
DIM SHARED yPos(F) AS INTEGER ' Final Y position
DIM SHARED boom(F) AS INTEGER ' Stage of explosion
DIM SHARED done AS INTEGER
done = 0
DIM SHARED soFar AS INTEGER
soFar = 0
DIM SHARED fwrksClrs(11) AS INTEGER
fwrksClrs(1) = 1
fwrksClrs(2) = 2
fwrksClrs(3) = 3
fwrksClrs(4) = 4
fwrksClrs(5) = 5
fwrksClrs(6) = 9
fwrksClrs(7) = 10
fwrksClrs(8) = 11
fwrksClrs(9) = 12
fwrksClrs(10) = 13
fwrksClrs(11) = 14
' Configure first volley
volley
DO WHILE I$ <> CHR$(27)
I$ = INKEY$
' Update fireworks
IF TIMER - S# > .03 THEN
FOR C = 1 TO F
IF fwrks(C) > yPos(C) THEN
ascend xPos(C), fwrks(C)
fwrks(C) = fwrks(C) - 1
' Has this firework completed its accent?
IF fwrks(C) = yPos(C) THEN
soFar = soFar + yPos(C)
' Trigger explosion
boom(C) = 1
END IF
END IF
IF boom(C) > 0 THEN
IF boom(C) < 4 THEN
exp1 xPos(C), yPos(C)
boom(C) = boom(C) + 1
ELSEIF boom(C) < 8 THEN
exp2 xPos(C), yPos(C)
boom(C) = boom(C) + 1
ELSEIF boom(C) < 12 THEN
exp3 xPos(C), yPos(C)
boom(C) = boom(C) + 1
ELSEIF boom(C) < 18 THEN
exp4 xPos(C), yPos(C)
boom(C) = 255
END IF
END IF
NEXT C
S# = TIMER
' Launch a new volley
IF boom(highest) = 255 THEN volley
END IF
LOOP
TIMER OFF
END
SUB ascend (X, Y)
' Draw
COLOR INT(RND * 14) + 1
LOCATE Y, X: PRINT ".";
COLOR 7
' Erase
IF Y + 1 < 51 THEN
LOCATE Y + 1, X: PRINT " ";
END IF
END SUB
SUB exp1 (X, Y)
' Erase
LOCATE Y + 1, X: PRINT " ";
' Draw
COLOR 15
LOCATE Y, X: PRINT "X"
END SUB
SUB exp2 (X, Y)
COLOR 14
LOCATE Y - 1, X: PRINT "x"
LOCATE Y, X - 1: PRINT "x x"
LOCATE Y + 1, X: PRINT "x"
END SUB
SUB exp3 (X, Y)
COLOR fwrksClrs(INT(RND * 10) + 1)
LOCATE Y - 2, X - 3: PRINT " * * *"
LOCATE Y - 1, X - 3: PRINT "* *"
LOCATE Y, X - 3: PRINT "* *"
LOCATE Y + 1, X - 3: PRINT "* *"
LOCATE Y + 2, X - 3: PRINT " * * *"
END SUB
SUB exp4 (X, Y)
COLOR 15
LOCATE Y - 2, X - 3: PRINT " + + +"
LOCATE Y - 1, X - 3: PRINT "+ +"
LOCATE Y, X - 3: PRINT "+ +"
LOCATE Y + 1, X - 3: PRINT "+ +"
LOCATE Y + 2, X - 3: PRINT " + + +"
END SUB
SUB volley
CLS
done = 0
soFar = 0
F = INT(RND * 6) + 4 ' Number of fwrks in this volley
REDIM fwrks(F) AS INTEGER
REDIM xPos(F) AS INTEGER
REDIM yPos(F) AS INTEGER
REDIM boom(F) AS INTEGER
FOR C = 1 TO F
fwrks(C) = 50
boom(C) = 0
xPos(C) = INT(RND * 60) + 10
yPos(C) = INT(RND * 24) + 10
done = done + yPos(C)
IF yPos(C) > highest THEN highest = C
NEXT C
END SUB