-
Notifications
You must be signed in to change notification settings - Fork 0
/
fallingsnake.v3.bas.txt
209 lines (175 loc) · 6.83 KB
/
fallingsnake.v3.bas.txt
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
NEW: CLS
0 REM SET TO 40X30 CHARS SCREEN
1 SCREEN 0
2 HM$=CHR$(19) : REM HOME CHARACTER
3 DIM EX(9)
4 FOR T=0TO8: READ C: EX(T)=C: NEXT : REM READ PETSCII EXPLOSION
5 TS = 0 : REM SET TOP SCORE
6 DIM CO(6): CO(0)=9: CO(1)=11: CO(2)=12: CO(3)=15: CO(4)=5: CO(5)=6
7 DIM IO(6): IO(0)=$66: IO(1)=$6F: IO(2)=$54: IO(3)=$75: IO(4)=$58: IO(5)=$1E
10 GOSUB 1000 : REM READ SPRITE DATA
11 GOSUB 1050 : REM SETUP SPRITE 0
12 GOSUB 1030 : REM SETUP LAYER 1
49 REM TITLE SCREEN -----------------
50 REM SET COLORS TO BLACK AND WHITE, CLEAR SCREEN
51 COLOR 2,0: CLS : REM PRINT TITLE
52 PRINT " y y y "
53 PRINT " y y y "
54 PRINT " y y y y"
55 PRINT " y y y y y y"
56 PRINT " y y y y" : COLOR 11,0
57 PRINT " FALLING SNAKE":COLOR 12
58 PRINT " FALLING SNAKE":COLOR 14
59 PRINT " **";:COLOR 1
60 PRINT "FALLING SNAKE";: COLOR 14: PRINT "**": PRINT: COLOR 15
61 PRINT : PRINT
62 COLOR 7: PRINT " HI-SCORE: "+STR$(TS)
63 PRINT : PRINT : PRINT : COLOR 15
65 PRINT " SIMON SNAKE IS FALLING"
66 PRINT " DOWN A HOLE!": PRINT
67 PRINT " AVOID ALL OBSTACLES": PRINT: PRINT
68 COLOR 7: PRINT " PRESS SPACE TO START"
69 BA$=CHR$(113):BB$=CHR$(119) : REM BALL SYMBOLS
70 COLOR 2,0 : PRINT " "+BA$
71 PRINT " "+BA$:PRINT " "+BA$
72 PRINT " "+BA$+BA$+BA$+BA$+BA$+BA$+BA$+BA$+BA$;:COLOR 8:PRINT BB$;
73 COLOR 2: PRINT "="
75 X0=150: Y0=68: GOSUB 1070 : REM SET SPRITE X,Y
76 D0=0: GOSUB 1080 : REM SET SPRITE DATA OFFSET
77 GOSUB 1020
80 C0=C0+1: IF C0>2 THEN C0=0: C1=C1+1: IF C1>255 THEN C1=0:
82 VPOKE 1,$FA1C,C1: VPOKE 1,$FA1D,C1
85 GET A$: IF A$="" GOTO 80 : REM WAIT FOR KEY
99 REM START GAME -----------------
100 COLOR 1,0: CLS
101 FOR T=1TO29:PRINT:NEXT
102 BO=29*256:SI=102:HI=83 : REM BOTTOMSCREENOFFSET, STONEIMAGE
103 PO=15*256:PI=81:PC=2:PX=20 : REM PLAYEROFFSET, PLAYERIMAGE, PLAYERCOLOR
104 DE=500 : REM DELAY VALUE
105 S=0 : REM SET SCORE
106 D0=4: GOSUB 1080 : REM SET SPRITE DATA OFFSET
107 OI=0 : REM OBSTACLE IMAGE
108 CC=0:L=0
199 REM GAME LOOP -----------------
200 GET A$
201 IF A$=CHR$(29) AND PX<40 THEN PX=PX+1 : REM GO RIGHT
202 IF A$=CHR$(157) AND PX>0 THEN PX=PX-1: REM GO LEFT
210 X=INT(RND(1)*40)*2: C=INT(RND(1)*15)+1 : REM GET RANDOM STONE POSITION
211 O=PO+(PX*2): PE=VPEEK( 0, O )
212 IF PE<>32 THEN O0=O: C0=PE: D0=1: GOSUB 500 : IF D0=1 THEN GOTO 400
225 R=( INT(RND(1)*5) ): IF RND(1) > .95 THEN R=5
226 C=CO(R): I=IO(R)
231 VPOKE 0, BO+X, I: VPOKE 0, BO+X+1, C
235 VPOKE 0, PO+(PX*2), PI: VPOKE 0, PO+(PX*2)+1, PC
280 CL=CL+1
281 IF CL>2 THEN CL=0: CC=1-CC
282 IF CC=0 THEN LO=255:HI=8
283 IF CC=1 THEN LO=15:HI=1
284 VPOKE 1,$FA0C,LO: VPOKE 1,$FA0D,HI
295 X0=PX*8: Y0=122: GOSUB 1070 : REM SET SPRITE X,Y
300 FOR W=1 TO DE: NEXT : REM DELAY, SLOW DOWN CODE
305 PRINT : S=S+1 : DE=DE-1 : IF DE<0 THEN DE=0
310 GOTO 200
399 REM GAME OVER -----------------
400 GOSUB 1025 : IF S>TS THEN TS=S
401 REM DRAW EXPLOSION
402 FOR XX=0TO2:FOR YY=0TO2
403 XS=XX+PX-1: YS=YY+15-1 : REM SCREEN X,Y
404 IF PX<1 THEN XS=XX+1 : REM CHECK PLAYER X TO BE ON SCREEN
405 IF PX>38 THEN XS=XX+38
406 DO=XX+(YY*3):SO=(XS*2)+(YS*256) : REM CALC DATA OFFSET, SCREEN OFFSET
407 VPOKE 0,SO,EX(DO) : REM WRITE TO SCREEN
408 VPOKE 0,SO+1,1 : REM WRITE TO SCREEN
409 NEXT:NEXT
410 REM EXPLOSION COLOR EFFECT
411 FOR T=1 TO 50
412 C0=INT(RND(1)*255)
413 C1=INT(RND(1)*255)
414 VPOKE 1,$FA00,C0: VPOKE 1,$FA01,C1
415 NEXT: VPOKE 1,$FA00,0: VPOKE 1,$FA01,0
421 PRINT HM$:PRINT:PRINT:COLOR 14: PRINT " GAME OVER": PRINT
422 COLOR 1: PRINT " SCORE: "+STR$(S);
425 PRINT " HI-SCORE="+STR$(TS)
430 COLOR 7: PRINT: PRINT " PRESS SPACE TRY AGAIN" : PRINT:PRINT
440 GET A$
441 C0=C0+1: IF C0>2 THEN C0=0: C1=C1+1: IF C1>255 THEN C1=0:
442 VPOKE 1,$FA1C,C1: VPOKE 1,$FA1D,C1
450 IF A$ = "" OR A$=CHR$(29) OR A$=CHR$(157) THEN GOTO 440
452 GOTO 50
500 REM CHECK COLISSION
501 D0 = 1
502 IF C0 = $58 THEN S=S+50 : D0=0: GOSUB600 : REM GOT FOOD = EXTRA POINTS
503 IF C0 = $1E THEN DE=DE+100 : D0=0: GOSUB630 : REM GOT "SLOW DOWN" SYMBOL
505 RETURN
600 VPOKE 0,O0-256,$35 : VPOKE 0,2+O0-256,$30
601 VPOKE 0,1+O0-256,1 : VPOKE 0,3+O0-256,1
602 RETURN
630 VPOKE 0,O0-4-256,$13 : VPOKE 0,2+O0-4-256,$0C:
631 VPOKE 0,4+O0-4-256,$0F :VPOKE 0,6+O0-4-256,$17
632 VPOKE 0,1+O0-4-256,1 : VPOKE 0,3+O0-4-256,1
633 VPOKE 0,5+O0-4-256,1 : VPOKE 0,7+O0-4-256,1
634 RETURN
999 REM SPRITE ROUTINES
1000 REM READ SPRITE DATA
1001 FOR I=O TO 255
1011 READ PX
1012 VPOKE $0,$4000+I,PX
1013 NEXT I
1014 RETURN
1020 POKE $9F29,($40 OR PEEK($9F29))
1021 RETURN
1025 POKE $9F29,PEEK($9F29)-$40
1026 RETURN
1029 REM ENABLE LAYER 1
1030 POKE $9F29,($20 OR PEEK($9F29))
1031 RETURN
1050 POKE $9F29,($40 OR PEEK($9F29)): PO=0
1051 REM SET SPRITE DATA
1053 VPOKE $1,$FC11,$02 : REM 4BPP, ADDRESS $04000
1060 VPOKE $1,$FC16,$0C : REM NO COLLISION, ZDEPTH 3, NO FLIP
1061 VPOKE $1,$FC17,$50+PO : REM 16X16 PIXELS, PALETTE OFFSET PO
1062 RETURN
1070 REM SET SPRITE 0,X0,Y0
1071 VPOKE $1,$FC12,X0 AND $FF
1072 VPOKE $1,$FC13,(X0 AND $0300)/$100
1073 VPOKE $1,$FC14,Y0 : REM YPOS 128
1074 VPOKE $1,$FC15,$00
1075 RETURN
1080 REM SET SPRITE IMG DATA
1081 VPOKE $1,$FC10,D0
1082 RETURN
10000 REM PETSCI EXPLOSION
10001 DATA $4D, $20 , $4E, $20, $D6, $20, $4E, $20, $4D
11000 DATA $00, $00, $22, $22, $22, $22, $00, $00
11001 DATA $00, $22, $82, $82, $82, $82, $22, $00
11002 DATA $02, $88, $88, $28, $28, $28, $28, $20
11003 DATA $28, $08, $08, $22, $22, $22, $82, $8b
11004 DATA $28, $88, $88, $20, $00, $28, $28, $b0
11005 DATA $02, $82, $82, $00, $02, $82, $8b, $00
11006 DATA $00, $22, $20, $00, $28, $22, $b0, $00
11007 DATA $00, $20, $20, $28, $22, $2b, $00, $00
11008 DATA $00, $00, $02, $82, $2b, $b0, $00, $00
11009 DATA $00, $00, $28, $2b, $b0, $00, $00, $00
11010 DATA $00, $00, $82, $00, $00, $00, $00, $00
11011 DATA $00, $00, $22, $92, $00, $00, $00, $00
11012 DATA $00, $00, $0b, $22, $92, $92, $00, $00
11013 DATA $00, $00, $00, $00, $22, $29, $92, $00
11014 DATA $00, $00, $00, $00, $00, $00, $22, $20
11015 DATA $00, $00, $00, $00, $00, $00, $00, $22
12000 DATA $00, $22, $22, $00, $00, $00, $00, $00
12001 DATA $02, $88, $88, $20, $00, $00, $00, $00
12002 DATA $28, $08, $80, $82, $00, $00, $00, $00
12003 DATA $28, $88, $88, $82, $00, $00, $00, $00
12004 DATA $02, $88, $88, $20, $00, $00, $00, $00
12005 DATA $00, $28, $82, $00, $00, $00, $00, $00
12006 DATA $00, $02, $20, $00, $00, $00, $00, $00
12007 DATA $00, $20, $02, $00, $00, $00, $00, $00
12008 DATA $00, $00, $00, $00, $00, $00, $00, $00
12009 DATA $00, $00, $00, $00, $00, $00, $00, $00
12010 DATA $00, $00, $00, $00, $00, $00, $00, $00
12011 DATA $00, $00, $00, $00, $00, $00, $00, $00
12012 DATA $00, $00, $00, $00, $00, $00, $00, $00
12013 DATA $00, $00, $00, $00, $00, $00, $00, $00
12014 DATA $00, $00, $00, $00, $00, $00, $00, $00
12015 DATA $00, $00, $00, $00, $00, $00, $00, $00
50000 REM END