📄 snake.lst
字号:
352 4 KeyCoding[k]|= 0x80;
353 4 while(P3_2==1); //等待高电平结束
354 4 }
355 3 }
356 2 //比较地址码和地址反码,不同解码错误退出
357 2 if (KeyCoding[0]!=~KeyCoding[1]&&KeyCoding[2]!=~KeyCoding[3])
358 2 {
359 3 EA = 1; //开外中断
360 3 return;
361 3 }
362 2 }
363 1 //按键判断也可以放到这里
364 1 Sound(); //解码成功声音提示.
365 1 EA = 1; //开外中断
C51 COMPILER V8.08 SNAKE 06/20/2007 12:20:21 PAGE 7
366 1 }
367 /*---------------------------------------------------------
368 函数:Timer0()
369 说明:定时器0溢出中断
370 ---------------------------------------------------------*/
371 Timer0() interrupt 1
372 {
373 1 uchar head,i;
374 1 TH0 = 0xB1; //定时10mS
375 1 TL0 = 0xE0;
376 1 counter++; //计数器加1
377 1 if (counter ==50) //50*10mS(0.5秒)执行一次
378 1 {
379 2 counter = 0; //计数器清0
380 2 if (SnakeLong<20)
381 2 {
382 3 PlacedFood(); //放置食物
383 3 head = SnakeCoor();//读取蛇头当前位置
384 3 switch (MoveDirection)//判断蛇的移动方向
385 3 {//在移动时不能向相反的方向移动.
386 4 case 1: //向上移动-16
387 4 if (Map[head-16]==0) //蛇头前面是空
388 4 {
389 5 Map[head-16] = 4;//蛇头新位置
390 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
391 5 for (i=SnakeLong;i>0;i--)
392 5 {
393 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
394 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
395 6 }
396 5 Snake[0] = head-16;//存蛇头新位置
397 5 }
398 4 else if (Map[head-16]==2)//蛇头前面是食物
399 4 {
400 5 FoodFlag = 0;//食物标志位清0
401 5 SnakeLong +=1;
402 5 Map[head-16] = 4;//蛇头新位置
403 5 for (i=SnakeLong;i>0;i--)
404 5 {
405 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
406 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
407 6 }
408 5 Snake[0] = head-16;//存蛇头新位置
409 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
410 5 }
411 4 else if (Map[head-16]==1||Map[head-16]==3)//蛇头前面是墙和蛇身
412 4 {
413 5 GameOver = 1;//游戏结束
414 5 }
415 4 break;
416 4 case 2: //向下移动+16
417 4 if (Map[head+16]==0) //蛇头前面是空
418 4 {
419 5 Map[head+16] = 4;//蛇头新位置
420 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
421 5 for (i=SnakeLong;i>0;i--)
422 5 {
423 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
424 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
425 6 }
426 5 Snake[0] = head+16;//存蛇头新位置
427 5 }
C51 COMPILER V8.08 SNAKE 06/20/2007 12:20:21 PAGE 8
428 4 else if (Map[head+16]==2)//蛇头前面是食物
429 4 {
430 5 FoodFlag = 0;//食物标志位清0
431 5 SnakeLong +=1;
432 5 Map[head+16] = 4;//蛇头新位置
433 5 for (i=SnakeLong;i>0;i--)
434 5 {
435 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
436 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
437 6 }
438 5 Snake[0] = head+16;//存蛇头新位置
439 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
440 5 }
441 4 else if (Map[head+16]==1||Map[head+16]==3)//蛇头前面是墙和蛇身
442 4 {
443 5 GameOver = 1;//游戏结束
444 5 }
445 4 break;
446 4 case 3: //向左移动-1
447 4 if (Map[head-1]==0) //蛇头前面是空
448 4 {
449 5 Map[head-1] = 4;//蛇头新位置
450 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
451 5 for (i=SnakeLong;i>0;i--)
452 5 {
453 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
454 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
455 6 }
456 5 Snake[0] = head-1;//存蛇头新位置
457 5 }
458 4 else if (Map[head-1]==2)//蛇头前面是食物
459 4 {
460 5 FoodFlag = 0;//食物标志位清0
461 5 SnakeLong +=1;
462 5 Map[head-1] = 4;//蛇头新位置
463 5 for (i=SnakeLong;i>0;i--)
464 5 {
465 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
466 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
467 6 }
468 5 Snake[0] = head-1;//存蛇头新位置
469 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
470 5 }
471 4 else if (Map[head-1]==1||Map[head-1]==3)//蛇头前面是墙和蛇身
472 4 {
473 5 GameOver = 1;//游戏结束
474 5 }
475 4 break;
476 4 case 4: //向右移动+1
477 4 if (Map[head+1]==0) //蛇头前面是空
478 4 {
479 5 Map[head+1] = 4;//蛇头新位置
480 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
481 5 for (i=SnakeLong;i>0;i--)
482 5 {
483 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
484 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
485 6 }
486 5 Snake[0] = head+1;//存蛇头新位置
487 5 }
488 4 else if (Map[head+1]==2)//蛇头前面是食物
489 4 {
C51 COMPILER V8.08 SNAKE 06/20/2007 12:20:21 PAGE 9
490 5 FoodFlag = 0;//食物标志位清0
491 5 SnakeLong +=1;
492 5 Map[head+1] = 4;//蛇头新位置
493 5 for (i=SnakeLong;i>0;i--)
494 5 {
495 6 Snake[i]=Snake[i-1];//将(蛇身长度-1)的坐标给蛇尾
496 6 Map[Snake[i-1]]=3;//刷新地图上的蛇身
497 6 }
498 5 Snake[0] = head+1;//存蛇头新位置
499 5 Map[Snake[SnakeLong]]=0;//将蛇尾清0
500 5 }
501 4 else if (Map[head+1]==1||Map[head+1]==3)//蛇头前面是墙和蛇身
502 4 {
503 5 GameOver = 1;//游戏结束
504 5 }
505 4 break;
506 4 }
507 3 MapCreate(); //生成地图
508 3 GameDisplay(GDRAM);//地图刷新显示
509 3 }
510 2 else//SnakeLong >=20 就过关
511 2 {
512 3 TR0=0;
513 3 }
514 2 }
515 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1857 ----
CONSTANT SIZE = 424 ----
XDATA SIZE = 1177 ----
PDATA SIZE = ---- ----
DATA SIZE = 4 8
IDATA SIZE = ---- ----
BIT SIZE = 8 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -