📄 snake.lst
字号:
276 4 {
277 5 My_snake.Temp_Pot_Or_Last_Trail.x=My_snake.Snake_body[0][X_POT];
278 5 My_snake.Temp_Pot_Or_Last_Trail.y=My_snake.Snake_body[0][Y_POT];
279 5 My_snake.Snake_body[0][X_POT]--;
280 5 } //如果是第一个点就X++
281 4 else
282 4
283 4 {
284 5 temp_x=My_snake.Snake_body[i][X_POT];
285 5 temp_y=My_snake.Snake_body[i][Y_POT];
286 5 My_snake.Snake_body[i][X_POT]=My_snake.Temp_Pot_Or_Last_Trail.x;
287 5 My_snake.Snake_body[i][Y_POT]=My_snake.Temp_Pot_Or_Last_Trail.y;
288 5 My_snake.Temp_Pot_Or_Last_Trail.x=temp_x;
289 5 My_snake.Temp_Pot_Or_Last_Trail.y=temp_y;
290 5 }
291 4
292 4
293 4 }
294 3 return;
295 3 }
296 2 /*-----------------------------------------------------------------------------*/
297 2 case UP:
298 2 {
299 3 for(i=0;i<SNAKE_LONG;i++)
300 3 {
301 4 if(i==0)
302 4 {
C51 COMPILER V7.20 SNAKE 12/23/2007 22:27:19 PAGE 6
303 5 My_snake.Temp_Pot_Or_Last_Trail.x=My_snake.Snake_body[0][X_POT];
304 5 My_snake.Temp_Pot_Or_Last_Trail.y=My_snake.Snake_body[0][Y_POT];
305 5 My_snake.Snake_body[0][Y_POT]--;
306 5 } //如果是第一个点就X++
307 4 else
308 4 {
309 5 temp_x=My_snake.Snake_body[i][X_POT];
310 5 temp_y=My_snake.Snake_body[i][Y_POT];
311 5 My_snake.Snake_body[i][X_POT]=My_snake.Temp_Pot_Or_Last_Trail.x;
312 5 My_snake.Snake_body[i][Y_POT]=My_snake.Temp_Pot_Or_Last_Trail.y;
313 5 My_snake.Temp_Pot_Or_Last_Trail.x=temp_x;
314 5 My_snake.Temp_Pot_Or_Last_Trail.y=temp_y;
315 5 }
316 4 }
317 3 return;
318 3 }
319 2 /*---------------------------------------------------------------------------*/
320 2 case DOWN:
321 2 {
322 3 for(i=0;i<SNAKE_LONG;i++)
323 3 {
324 4 if(i==0)
325 4 {
326 5 My_snake.Temp_Pot_Or_Last_Trail.x=My_snake.Snake_body[0][X_POT];
327 5 My_snake.Temp_Pot_Or_Last_Trail.y=My_snake.Snake_body[0][Y_POT];
328 5 My_snake.Snake_body[0][Y_POT]++;
329 5 } //如果是第一个点就X++
330 4 else
331 4 {
332 5 temp_x=My_snake.Snake_body[i][X_POT];
333 5 temp_y=My_snake.Snake_body[i][Y_POT];
334 5 My_snake.Snake_body[i][X_POT]=My_snake.Temp_Pot_Or_Last_Trail.x;
335 5 My_snake.Snake_body[i][Y_POT]=My_snake.Temp_Pot_Or_Last_Trail.y;
336 5 My_snake.Temp_Pot_Or_Last_Trail.x=temp_x;
337 5 My_snake.Temp_Pot_Or_Last_Trail.y=temp_y;
338 5 }
339 4
340 4 }
341 3 return ;
342 3 }
343 2 default:
344 2 return;
345 2 }
346 1 return;
347 1
348 1 }
349 /*------------ 确认某一点是否是空点------------------*/
350 bit Sure_Pot_Empty(uchar x,uchar y) /*------------ 确认某一点是否是空点------------------*/
351 {
352 1 uchar i;
353 1 for(i=0;i<SNAKE_LONG;i++)
354 1 {
355 2 if(My_snake.Snake_body[i][X_POT]==x&&My_snake.Snake_body[i][Y_POT]==y) //查遍蛇的全身看看蛇身是否在
-这点上
356 2 return 0;
357 2 }
358 1 return 1;//如
359 1 }
360 /*--------------------这个函数是用来确认前面没有障碍物------------*/
361 bit Sure_No_Stock()
362 {
363 1 switch (My_snake.direction)
C51 COMPILER V7.20 SNAKE 12/23/2007 22:27:19 PAGE 7
364 1 {
365 2 case RIGHT: //如果向右
366 2 {
367 3 if((My_snake.Snake_body[0][X_POT])>=RIGHT_MAX)
368 3 return 0 ;
369 3 else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT]+1,My_snake.Snake_body[0][Y_POT]))
370 3 return 1;
371 3 else return 0;
372 3 }
373 2 break;
374 2 case LEFT:
375 2 {
376 3 if(My_snake.Snake_body[0][X_POT]==LEFT_MAX)
377 3 return 0;
378 3 else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT]-1,My_snake.Snake_body[0][Y_POT]))
379 3 return 1;
380 3 else return 0;
381 3 }
382 2 break;
383 2 case UP:
384 2 {
385 3 if(My_snake.Snake_body[0][Y_POT]==UP_MAX)
386 3 return 0;
387 3 else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT],My_snake.Snake_body[0][Y_POT]-1))
388 3 return 1;
389 3 else return 0;
390 3 }
391 2 break;
392 2 case DOWN:
393 2 {
394 3 if(My_snake.Snake_body[0][Y_POT]>=DOWN_MAX)
395 3 return 0;
396 3 else if(Sure_Pot_Empty(My_snake.Snake_body[0][X_POT],My_snake.Snake_body[0][Y_POT]+1))
397 3 return 1;
398 3 else return 0;
399 3 }
400 2 break;
401 2 default:
402 2 break;
403 2 }
404 1 return 0;
405 1
406 1 }
407 /*-----------------------------键盘响应函数--------------*/
408 void Key_Respond()
409 {
410 1 if (KEY_DOWN)
411 1 {
412 2 KEY_DOWN=0;
413 2 switch(My_snake.Game_Mode)
414 2 {
415 3 case GAME_RUNING:
416 3 switch (KEY_WORD)
417 3 {
418 4 case DOWN_DOWN:
419 4 My_snake.direction=DOWN;
420 4 break;
421 4 case UP_DOWN:
422 4 My_snake.direction=UP;
423 4 break;
424 4 case RIGHT_DOWN:
425 4 My_snake.direction=RIGHT;
C51 COMPILER V7.20 SNAKE 12/23/2007 22:27:19 PAGE 8
426 4 break;
427 4 case LEFT_DOWN:
428 4 My_snake.direction=LEFT;
429 4 break;
430 4 default:
431 4 break;
432 4
433 4 }
434 3 return;
435 3
436 3 case GAME_OVER:
437 3 {
438 4 display_all_screen (WAITE_IN_PUT);
439 4 My_snake.Game_Mode=WAIT_FOR_USER_INPUT;
440 4 wr_lcd (comm,0x34);
441 4 wr_lcd (comm,0x30);
442 4 wr_lcd (comm,0x8E); //置AC为0
443 4 wr_lcd(dat,NO_Data[9-My_snake.Speed]);
444 4
445 4
446 4
447 4 }
448 3 return; //如果游戏结束了就什么也不做了
449 3
450 3 case WAIT_FOR_USER_INPUT:
451 3 switch (KEY_WORD)
452 3 {
453 4 case DOWN_DOWN:
454 4 {
455 5 if(My_snake.Speed<9)
456 5 {
457 6 My_snake.Speed++;
458 6 wr_lcd (comm,0x34);
459 6 wr_lcd (comm,0x30);
460 6 wr_lcd (comm,0x8E); //置AC为0
461 6 wr_lcd(dat,NO_Data[9-My_snake.Speed]);
462 6 }
463 5 }
464 4 break;
465 4 case UP_DOWN:
466 4 {
467 5 if(My_snake.Speed>0)
468 5 {
469 6 My_snake.Speed--;
470 6 wr_lcd (comm,0x34);
471 6 wr_lcd (comm,0x30);
472 6 wr_lcd (comm,0x8E); //置AC为0
473 6 wr_lcd(dat,NO_Data[9-My_snake.Speed]);
474 6 }
475 5 }
476 4 break;
477 4 case RIGHT_DOWN:
478 4
479 4 break;
480 4 case LEFT_DOWN:
481 4 Inicial_Game();
482 4 break;
483 4 default:
484 4 break;
485 4 }
486 3 return;
487 3
C51 COMPILER V7.20 SNAKE 12/23/2007 22:27:19 PAGE 9
488 3 break;//这里暂时还没有写好!
489 3 case GAME_WELCOME_SCREEN:
490 3 {
491 4 display_all_screen (WAITE_IN_PUT);
492 4 My_snake.Game_Mode=WAIT_FOR_USER_INPUT;
493 4 wr_lcd (comm,0x34);
494 4 wr_lcd (comm,0x30);
495 4 wr_lcd (comm,0x8E); //置AC为0
496 4 wr_lcd(dat,NO_Data[9-My_snake.Speed]);
497 4
498 4 }
499 3
500 3 break;
501 3
502 3 default:
503 3 return;
504 3
505 3 }
506 2 }
507 1
508 1
509 1 }
510 /*----------------------------这个是用来确定不是按下了相反位-----------*/
511 bit Press_Oppsite_Direction() /* -------这个是用来确定不是按下了相反位-------*/
512 {
513 1 switch(My_snake.direction)
514 1 {
515 2 case RIGHT:
516 2 if(My_snake.Snake_body[0][Y_POT]==My_snake.Snake_body[1][Y_POT]&&My_snake.Snake_body[0][X_POT]+1==My
-_snake.Snake_body[1][X_POT])
517 2 return 1;
518 2 break;
519 2 case LEFT:
520 2 if(My_snake.Snake_body[0][Y_POT]==My_snake.Snake_body[1][Y_POT]&&My_snake.Snake_body[0][X_POT]-1==My
-_snake.Snake_body[1][X_POT])
521 2 return 1;
522 2 break;
523 2 case UP:
524 2 if(My_snake.Snake_body[0][X_POT]==My_snake.Snake_body[1][X_POT]&&My_snake.Snake_body[0][Y_POT]-1==My
-_snake.Snake_body[1][Y_POT])
525 2 return 1;
526 2 break;
527 2 case DOWN:
528 2 if(My_snake.Snake_body[0][X_POT]==My_snake.Snake_body[1][X_POT]&&My_snake.Snake_body[0][Y_POT]+1==My
-_snake.Snake_body[1][Y_POT])
529 2 return 1;
530 2 break;
531 2 default:
532 2 return 0;
533 2 break;
534 2 }
535 1 return 0;
536 1 }
537 void One_Step()///这个函数里蛇走一步的
538 {
539 1 if(My_snake.Game_Mode==GAME_RUNING) //如果在游戏中的话!
540 1 {
541 2 switch (My_snake.direction)
542 2 {
543 3 case RIGHT:
544 3 {
545 4 if(Press_Oppsite_Direction())
C51 COMPILER V7.20 SNAKE 12/23/2007 22:27:19 PAGE 10
546 4 {
547 5 My_snake.direction=LEFT;
548 5 return ; //如果是按了相反方向那么就返回并把方向转过来
549 5 }
550 4 else if(Sure_No_Stock()) //看看有障碍物 么
551 4 {
552 5 Go_Ahead();
553 5 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -