Browse code

Added game reset

Devine Lu Linvega authored on 02/11/2021 21:04:26
Showing 1 changed files
... ...
@@ -10,10 +10,10 @@
10 10
 %RTN { JMP2r }
11 11
 %TOS { #00 SWP }
12 12
 %SWP? { #01 JCN SWP }
13
+%RTN? { #01 JCN RTN }
13 14
 %BRK? { #01 JCN BRK }
14 15
 
15
-%DEBUG  { ;print-hex JSR2 #0a .Console/write DEO }
16
-%DEBUG2 { SWP ;print-hex JSR2 ;print-hex JSR2 #0a .Console/write DEO }
16
+%DIFFICULTY { #06 }
17 17
 
18 18
 ( devices )
19 19
 
... ...
@@ -35,72 +35,89 @@
35 35
 @apple
36 36
 	&x $1 &y $1
37 37
 @snake
38
-	&direction $1 &length $1 
38
+	&direction $1 &length $1 &dead $1
39 39
 	&x $1 &y $1
40 40
 	&tail
41 41
 
42 42
 |0100 ( -> )
43 43
 
44 44
 	( theme ) 
45
-	#0f2f .System/r DEO2 
46
-	#0ff2 .System/g DEO2 
47
-	#0022 .System/b DEO2
45
+	#0f7e .System/r DEO2 
46
+	#0fe6 .System/g DEO2 
47
+	#0f62 .System/b DEO2
48 48
 
49 49
 	( vectors )
50 50
 	;on-frame .Screen/vector DEO2
51 51
 	;on-button .Controller/vector DEO2
52 52
 
53 53
 	( resize )
54
-	#00c0 .Screen/width DEO2
54
+	#00c8 .Screen/width DEO2
55 55
 	#0100 .Screen/height DEO2
56 56
 
57
+	( set arena )
57 58
 	.Screen/width DEI2 8// NIP .arena/w STZ
58 59
 	.Screen/height DEI2 8// NIP .arena/h STZ
59 60
 
60
-	( put snake )
61
-	.arena/w LDZ 2/ #01 - .snake/x STZ
62
-	.arena/h LDZ 2/ #01 - .snake/y STZ
63
-
64
-	;add-apple JSR2
61
+	;reset JSR2
65 62
 
66 63
 BRK
67 64
 
68 65
 @on-frame ( -> )
69 66
 
70 67
 	.arena/timer LDZ INC DUP .arena/timer STZ
71
-		#06 = BRK?
72
-
73
-	#00 ;draw-snake JSR2
74
-	;move JSR2
75
-	#02 ;draw-snake JSR2
68
+		DIFFICULTY = BRK?
76 69
 
70
+	( clear ) #00 ;draw-snake JSR2
71
+	( update ) ;move JSR2
72
+	( draw ) #02 .snake/dead LDZ + ;draw-snake JSR2
73
+	( score ) .snake/length LDZ #01 ;draw-score JSR2
77 74
 	( reset ) #00 .arena/timer STZ
78 75
 
79 76
 BRK
80 77
 
81 78
 @on-button ( -> )
82 79
 
83
-	.Controller/button DEI #04 SFT 
84
-	DUP #00 = ,&skip JCN
80
+	.Controller/button DEI 
81
+	DUP #08 ! ,&no-escape JCN
82
+		;reset JSR2
83
+		&no-escape
84
+	#04 SFT DUP #00 = ,&skip JCN
85 85
 		DUP .snake/direction STZ
86 86
 		&skip
87 87
 	POP
88 88
 
89 89
 BRK
90 90
 
91
+@reset ( -- )
92
+
93
+	#00 ;draw-snake JSR2
94
+	#00 ;draw-apple JSR2
95
+
96
+	.arena/w LDZ 2/ #01 - .snake/x STZ
97
+	.arena/h LDZ 2/ #01 - .snake/y STZ
98
+	#00 .snake/dead STZ
99
+	#00 .snake/length STZ
100
+	#00 .snake/direction STZ
101
+
102
+	#03 ;draw-snake JSR2
103
+	;add-apple JSR2
104
+
105
+RTN
106
+
91 107
 @move ( -- )
92 108
 
93 109
 	( tail )
94 110
 	.snake/x LDZ2 STH2
95 111
 	.snake/length LDZ #00
96 112
 	&loop
97
-		DUP 2* .snake/tail + LDZ2 STH2
98
-		SWP2r
99
-		DUP 2* .snake/tail + STH2r ROT STZ2
113
+		( pop ) DUP 2* .snake/tail + LDZ2 STH2 SWP2r
114
+		( push ) DUP 2* .snake/tail + STH2r ROT STZ2
100 115
 		INC GTHk ,&loop JCN
101 116
 	POP2
102 117
 	POP2r
103 118
 
119
+	.snake/dead LDZ #00 = RTN?
120
+
104 121
 	.snake/direction LDZ
105 122
 	DUP #01 ! ,&no-up JCN
106 123
 		.snake/y LDZ #01 - 
... ...
@@ -124,37 +141,42 @@ BRK
124 141
 		&no-right
125 142
 	POP
126 143
 
127
-	( detect collision )
128
-	.snake/x LDZ .apple/x LDZ ! ,&no-collision JCN
129
-	.snake/y LDZ .apple/y LDZ ! ,&no-collision JCN
144
+	( detect collision with apple )
145
+	.snake/x LDZ2 .apple/x LDZ2 [ ROT = ROT ROT = #0101 !! ] ,&no-collision-apple JCN
130 146
 		#00 ;draw-apple JSR2
131
-		.snake/length LDZ INC DUP DEBUG .snake/length STZ
147
+		.snake/length LDZ INC .snake/length STZ
132 148
 		;add-apple JSR2
133 149
 		;move JSR2
134
-		&no-collision
150
+		&no-collision-apple
151
+
152
+	.snake/length LDZ #01
153
+	&loop-body
154
+		( pop ) DUP 2* .snake/tail + LDZ2 
155
+		.snake/x LDZ2 [ ROT = ROT ROT = #0101 !! ] ,&no-collision-body JCN
156
+			#01 .snake/dead STZ
157
+			#03 ;draw-snake JSR2
158
+			&no-collision-body
159
+		INC GTHk ,&loop-body JCN
160
+	POP2
161
+
135 162
 
136 163
 RTN
137 164
 
138 165
 @add-apple ( -- )
139 166
 
140
-	( seed )
141 167
 	.DateTime/hour DEI2 .DateTime/minute DEI2 MUL2 #1234 MUL2 +
142 168
 		.arena/w LDZ MOD .apple/x STZ
143 169
 	.DateTime/hour DEI2 .DateTime/minute DEI2 MUL2 #abcd MUL2 +
144 170
 		.arena/h LDZ MOD .apple/y STZ
145
-
146
-	#03 ;draw-apple JSR2
171
+	#83 ;draw-apple JSR2
147 172
 
148 173
 RTN
149 174
 
150 175
 @draw-snake ( color -- )
151 176
 
152
-	.snake/x LDZ TOS 8** .Screen/x DEO2
153
-	.snake/y LDZ TOS 8** .Screen/y DEO2
154
-	;snake-icns .Screen/addr DEO2
155
-	STHk .Screen/sprite DEO
156
-
177
+	STH
157 178
 	( draw tail )
179
+	;snake-icns .Screen/addr DEO2
158 180
 	.snake/length LDZ #00
159 181
 	&loop
160 182
 		DUP 2* .snake/tail + LDZ TOS 8** .Screen/x DEO2
... ...
@@ -162,33 +184,53 @@ RTN
162 184
 		STHkr .Screen/sprite DEO
163 185
 		INC GTHk ,&loop JCN
164 186
 	POP2
165
-	POPr
187
+	( draw head )
188
+	.snake/x LDZ TOS 8** .Screen/x DEO2
189
+	.snake/y LDZ TOS 8** .Screen/y DEO2
190
+	;snake-icns/face .Screen/addr DEO2
191
+	STHr .Screen/sprite DEO
166 192
 
167 193
 RTN
168 194
 
169 195
 @draw-apple ( color -- )
170
-		.apple/x LDZ TOS 8** .Screen/x DEO2
171
-		.apple/y LDZ TOS 8** .Screen/y DEO2
172
-		;apple-icn .Screen/addr DEO2
173
-		.Screen/sprite DEO
174
-	RTN
196
+
197
+	.apple/x LDZ TOS 8** .Screen/x DEO2
198
+	.apple/y LDZ TOS 8** .Screen/y DEO2
199
+	;apple-chr .Screen/addr DEO2
200
+	.Screen/sprite DEO
175 201
 
176 202
 RTN
177 203
 
178
-@print-hex ( value -- )
179
-	
180
-	STHk #04 SFT ,&parse JSR .Console/write DEO
181
-	STHr #0f AND ,&parse JSR .Console/write DEO
182
-	RTN
183
-	&parse ( value -- char )
184
-		DUP #09 GTH ,&above JCN #30 ADD RTN &above #09 SUB #60 ADD RTN
204
+@draw-score ( score color -- )
205
+
206
+	STH
207
+	#0010 .Screen/x DEO2
208
+	#0010 .Screen/y DEO2
209
+	DUP #04 SFT TOS 8** ;font-hex ++ .Screen/addr DEO2
210
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
211
+		( draw ) STHkr .Screen/sprite DEO
212
+	#0f AND TOS 8** ;font-hex ++ .Screen/addr DEO2
213
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
214
+		( draw ) STHr .Screen/sprite DEO
185 215
 
186 216
 RTN
187 217
 
188 218
 ( assets )
189 219
 
190 220
 @snake-icns
191
-	ffff ffff ffff ffff
192
-@apple-icn
193
-	ffff ffff ffff ffff
221
+	7eff ffff ffff ff7e
222
+	&face
223
+		7eff ffdb ffe7 ff7e
224
+@apple-chr
225
+	0000 76ff ffff 7e3c
226
+	1008 0000 0000 0000
227
+@font-hex ( 0-F )
228
+	007c 8282 8282 827c 0030 1010 1010 1010
229
+	007c 8202 7c80 80fe 007c 8202 1c02 827c
230
+	000c 1424 4484 fe04 00fe 8080 7c02 827c
231
+	007c 8280 fc82 827c 007c 8202 1e02 0202
232
+	007c 8282 7c82 827c 007c 8282 7e02 827c
233
+	007c 8202 7e82 827e 00fc 8282 fc82 82fc
234
+	007c 8280 8080 827c 00fc 8282 8282 82fc
235
+	007c 8280 f080 827c 007c 8280 f080 8080 
194 236