📄 snake.lst
字号:
174 {
175 1 uchar i=0;
176 1
177 1 /*********************根据按键选择蛇的运动方向*******************/
178 1 if((Key_Value==Key_Right&&Key_V_temp!=Key_Left)||(Key_Value==Key_Left&&Key_V_temp==Key_Right))
179 1 {
C51 COMPILER V7.06 SNAKE 07/12/2010 23:49:26 PAGE 4
180 2 Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾给熄灭掉
181 2
182 2 for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
183 2 {
184 3 Snake.X[i]=Snake.X[i+1];
185 3 Snake.Y[i]=Snake.Y[i+1];
186 3 }
187 2
188 2 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+1;
189 2 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+0; //蛇头向你要求的方向移动
190 2
191 2 for(i=0;i<Snake.Long;i++) //这个让蛇显示出来的函数
192 2 {
193 3 Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
194 3 }
195 2 Key_V_temp=Key_Right;
196 2 }
197 1
198 1 if((Key_Value==Key_Left&&Key_V_temp!=Key_Right)||(Key_Value==Key_Right&&Key_V_temp==Key_Left))
199 1 {
200 2
201 2 Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾给熄灭掉
202 2
203 2 for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
204 2 {
205 3 Snake.X[i]=Snake.X[i+1];
206 3 Snake.Y[i]=Snake.Y[i+1];
207 3 }
208 2
209 2 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]-1;
210 2 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+0; //蛇头向你要求的方向移动
211 2
212 2 for(i=0;i<Snake.Long;i++) //这个让蛇显示出来的函数
213 2 {
214 3 Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
215 3 }
216 2 Key_V_temp=Key_Left;
217 2 }
218 1 if(( Key_Value==Key_Up&&Key_V_temp!=Key_Down)||( Key_Value==Key_Down&&Key_V_temp==Key_Up))
219 1 {
220 2 Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾给熄灭掉
221 2
222 2 for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
223 2 {
224 3 Snake.X[i]=Snake.X[i+1];
225 3 Snake.Y[i]=Snake.Y[i+1];
226 3 }
227 2
228 2 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+0;
229 2 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]-1; //蛇头向你要求的方向移动
230 2
231 2 for(i=0;i<Snake.Long;i++) //这个让蛇显示出来的函数
232 2 {
233 3 Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
234 3 }
235 2 Key_V_temp=Key_Up;
236 2 }
237 1 if(( Key_Value==Key_Down&&Key_V_temp!=Key_Up)||( Key_Value==Key_Up&&Key_V_temp==Key_Down))
238 1 {
239 2 Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾给熄灭掉
240 2
241 2 for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
C51 COMPILER V7.06 SNAKE 07/12/2010 23:49:26 PAGE 5
242 2 {
243 3 Snake.X[i]=Snake.X[i+1];
244 3 Snake.Y[i]=Snake.Y[i+1];
245 3 }
246 2
247 2 Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+0;
248 2 Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+1; //蛇头向你要求的方向移动
249 2
250 2 for(i=0;i<Snake.Long;i++) //这个让蛇显示出来的函数
251 2 {
252 3 Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
253 3 }
254 2 Key_V_temp=Key_Down;
255 2 }
256 1
257 1
258 1 /****************根据按键选择蛇的运动程序结束*******************/
259 1 /////////////////////////////////////////////////////////////////
260 1
261 1
262 1 /************************判断蛇是否死亡***********************/
263 1 if(Snake.X[Snake.Long-1]>=19||Snake.Y[Snake.Long-1]>=28)//判蛇头是否撞到墙壁
264 1 {
265 2 Snake.Life=1;
266 2 }
267 1 for(i=3;i<Snake.Long;i++)//从第三节开始判断蛇头是否咬到自己
268 1 {
269 2 if(Snake.X[i]==Snake.X[0]&&Snake.Y[i]==Snake.Y[0])
270 2 {
271 3 Snake.Life=1;
272 3 }
273 2 }
274 1 if(Snake.Life==1) //if the snake over
275 1 {
276 2
277 2 Display_dead();
278 2 }
279 1 /******************判断蛇是否死亡程序结束***********************/
280 1 /////////////////////////////////////////////////////////////////
281 1
282 1
283 1 /************************判断蛇是否最长了**********************/
284 1 if(Snake.Long==SNAKE_Max_Long)
285 1 {
286 2
287 2 Display_Pass();
288 2 }
289 1 /////////////////////////////////////////////////////////////////
290 1
291 1 /*************************判蛇是否吃到食物**********************/
292 1 if(Snake.X[Snake.Long-1]==Food.X&&Snake.Y[Snake.Long-1]==Food.Y)//
293 1 {
294 2 //Trun_Off_Point(Food.X,Food.Y); //消隐食物
295 2 Snake.Long++;//蛇节数加1
296 2 Snake.X[Snake.Long-1]=Food.X;
297 2 Snake.Y[Snake.Long-1]=Food.Y;
298 2 Snake.Score+=10;
299 2 LCDShow_uCharNumber(96,24,Snake.Score,0x00ff,0xBE5F);
300 2 Food.Yes=1; //食物标志置1
301 2 }
302 1 /////////////////////////////////////////////////////////////////
303 1
C51 COMPILER V7.06 SNAKE 07/12/2010 23:49:26 PAGE 6
304 1
305 1 /***************************放果子程序*************************/
306 1 if(Food.Yes==0)
307 1 {
308 2 Trun_On_Point(Food.X,Food.Y,0xaa);
309 2 }
310 1 if(Food.Yes==1)
311 1 {
312 2 while(1)
313 2 {
314 3 Food.X=((TL1&0X24)>>1); //获得随机数
315 3 Food.Y=TL1&0X1B;
316 3
317 3 for(i=0;i<Snake.Long;i++) //判断产生的食物坐标是否和蛇身重合
318 3 {
319 4 if((Food.X==Snake.X[i])&&(Food.X==Snake.Y[i]))
320 4 break;
321 4 }
322 3 if(i==Snake.Long)
323 3 {
324 4 Food.Yes=0;
325 4 break; //产生有效的食物坐标
326 4 }
327 3 }
328 2 }
329 1 /////////////////////////////////////////////////////////////////
330 1
331 1
332 1 /**************************延时用于调整游戏速度************************/
333 1 Delay_1mS(300-Snake.Level*50);
334 1 /////////////////////////////////////////////////////////////////
335 1 }
336
337
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1195 ----
CONSTANT SIZE = 35 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -