⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snake.lst

📁 这是我大学4年来做过的竞赛以及老师的科研项目所积累下来的c51源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 214   1              serial_uart8;
 215   1              REN_1=1;
 216   1              serial_baud_9600;
 217   1              TI_1=1;
 218   1              Level=8;
 219   1              fputstr("#");
 220   1              clrscr();
 221   1              for(i=L_SHEET;i<=R_SHEET;i+=2)
 222   1              {
 223   2                      put_block(i,T_SHEET);
 224   2                      put_block(i,B_SHEET);
 225   2              }
 226   1              for(i=T_SHEET+1;i<B_SHEET;i++)
 227   1              {
 228   2                      put_block(L_SHEET,i);
 229   2                      put_block(R_SHEET,i);
 230   2              }
 231   1              fputstr("$");
 232   1              gotoxy(L_SHEET,1);fputstr("#Cupidity snake version 1.00                               $");
 233   1              gotoxy(L_SHEET,2);fputstr("High Score:");
 234   1              gotoxy(L_SHEET,3);fputstr("Score     :");
 235   1              gotoxy(L_SHEET+30,2);fputstr("Tuched:");
 236   1              gotoxy(L_SHEET+30,3);fputstr("Level :");
 237   1              gotoxy(L_SHEET,24);
 238   1              fputstr("Option| Level &UP/DOW&N");
 239   1          snake[0].x=0;
 240   1              init_snake();
 241   1              flash_data();
C51 COMPILER V8.01   SNAKE                                                                 07/30/2008 23:29:10 PAGE 5   

 242   1              GameStart=0;
 243   1              GameOver=0;
 244   1              EA=1;
 245   1      }
 246          //-----------------------------------------------------------------------------------
 247          void    init_snake(void)
 248          {
 249   1              unsigned char i;
 250   1              
 251   1             i=0;
 252   1              while(snake[i].x!=0)
 253   1              {
 254   2                      hide_block(snake[i].x,snake[i].y);
 255   2                      i++;
 256   2              }
 257   1              for(i=0;i<7;i++)
 258   1              {
 259   2                      snake[i].x=L_SHEET+20;
 260   2                      snake[i].y=T_SHEET+4+i;
 261   2              }
 262   1              snake[7].x=0;
 263   1              direct=LEFT;
 264   1              for(i=0;snake[i].x!=0;i++)
 265   1                      put_block(snake[i].x,snake[i].y);
 266   1              SnakeLen=7;
 267   1              
 268   1      
 269   1      }
 270          //-----------------------------------------------------------------------------------
 271          void    put_bug(void)
 272          {
 273   1              data int i,ch;
 274   1      re_find:
 275   1              do{
 276   2                      ch =rand()%76;
 277   2             }while((ch<=L_SHEET || ch>=R_SHEET)|| 0==(ch&0x01));
 278   1             bug_x=ch;
 279   1             do{
 280   2                      ch =rand()%24;
 281   2             }while(ch<=T_SHEET || ch>=B_SHEET);
 282   1              for(i=0;snake[i].x!=0;i++)
 283   1              {
 284   2                      if(ch==snake[i].y && bug_x==snake[i].x)
 285   2                              goto re_find;
 286   2              }
 287   1             bug_y=ch;
 288   1             put_block(bug_x,bug_y);
 289   1      }
 290          //-----------------------------------------------------------------------------------
 291          bit     flash_snake(unsigned char dir1)
 292          {
 293   1              data    unsigned char x0,y0,i,j;
 294   1      
 295   1      
 296   1              if(dir1==1) dir1=direct;
 297   1              else
 298   1              {
 299   2                      if(direct == ~dir1)     dir1=direct;
 300   2                      else    direct=dir1;
 301   2                      
 302   2              }
 303   1              switch(dir1)
C51 COMPILER V8.01   SNAKE                                                                 07/30/2008 23:29:10 PAGE 6   

 304   1              {
 305   2              case UP:
 306   2                      y0=snake[0].y-1;
 307   2                      x0=snake[0].x;
 308   2                      break;
 309   2              case DOWN:
 310   2                      y0=snake[0].y+1;
 311   2                      x0=snake[0].x;
 312   2                      break;
 313   2              case LEFT:
 314   2                      x0=snake[0].x-2;
 315   2                      y0=snake[0].y;
 316   2                      break;
 317   2              case RIGHT:
 318   2                      x0=snake[0].x+2;
 319   2                      y0=snake[0].y;
 320   2                      break;
 321   2              }
 322   1              if(     (y0<=T_SHEET)|| (y0>=B_SHEET)|| (x0<=L_SHEET)||(x0>=R_SHEET))return(0);
 323   1                      
 324   1              for(i=0;snake[i].x!=0;i++)
 325   1              {
 326   2                      if(x0==snake[i].x && y0==snake[i].y) return(0);
 327   2              }
 328   1              hide_block(x0,y0);
 329   1              put_block(x0,y0);
 330   1              hide_block(snake[i-1].x,snake[i-1].y);
 331   1              if(bug_x==x0 && bug_y==y0)
 332   1              {
 333   2                      SnakeLen++;
 334   2                      GameScore +=(SnakeLen*5 + Level*3);
 335   2                      if((SnakeLen%15)==0 && Level<16) Level++;
 336   2                      snake[i].x=snake[i-1].x;
 337   2                      snake[i].y=snake[i-1].y;
 338   2                      snake[i+1].x=0;
 339   2                      i++;
 340   2                      
 341   2                      for(j=0;snake[j].x!=0;j++)
 342   2                      {
 343   3                              hide_block(snake[j].x,snake[j].y);
 344   3                              put_block(snake[j].x,snake[j].y);
 345   3                              delay(0x200);
 346   3                      }
 347   2                      put_bug();
 348   2              }
 349   1      
 350   1              while(--i)      snake[i]=snake[i-1];
 351   1              snake[0].x=x0;
 352   1              snake[0].y=y0;
 353   1              flashed=1;
 354   1              return(1);
 355   1      }
 356          //-----------------------------------------------------------------------------------
 357          void    put_block(char x,char y)
 358          {
 359   1              gotoxy(x,y);
 360   1              fputstr("▓");
 361   1              delay(100);
 362   1      }
 363          //-----------------------------------------------------------------------------------
 364          void    hide_block(char x,char y)
 365          {
C51 COMPILER V8.01   SNAKE                                                                 07/30/2008 23:29:10 PAGE 7   

 366   1              gotoxy(x,y);
 367   1              fputstr("  ");
 368   1      }
 369          //-----------------------------------------------------------------------------------
 370          bit     kbhit(void)
 371          {
 372   1              return(RI_1);
 373   1      }
 374          //-----------------------------------------------------------------------------------
 375          void    putstr(char xdata*str)
 376          {
 377   1              while(*str)
 378   1              {
 379   2                      putch(*str++);
 380   2              }
 381   1      }
 382          //-----------------------------------------------------------------------------------
 383          void    flash_data(void)
 384          {
 385   1              gotoxy(L_SHEET+sizeof("High Score: "),2);
 386   1              sprintf(print_buf,"%-10ld",HighScore);putstr(print_buf);
 387   1              gotoxy(L_SHEET+sizeof("High Score: "),3);
 388   1              sprintf(print_buf,"%-10ld",GameScore);putstr(print_buf);
 389   1              gotoxy(L_SHEET+30+sizeof("Tuched: "),2);
 390   1              sprintf(print_buf,"%3d",SnakeLen);putstr(print_buf);
 391   1              gotoxy(L_SHEET+30+sizeof("Tuched: "),3);
 392   1              sprintf(print_buf,"%3d",(int)(char)Level);putstr(print_buf);
 393   1      
 394   1      }
 395          //-----------------------------------------------------------------------------------
 396          void    type_kbd(char code *str)
 397          {
 398   1              data int ch,i=0;
 399   1              
 400   1              type_flag=1;
 401   1              flashed=1;
 402   1              while( (ch=str[i]) !=0)
 403   1              {
 404   2                      if(kbhit()) break;
 405   2                      if(TimerEnd)
 406   2                      {
 407   3                              TimerEnd=0;
 408   3                              putch(ch);
 409   3                              if(ch=='\n') fputstr("\r    ");
 410   3                              i++;
 411   3                      }
 412   2                      clr_wchdog();
 413   2              }
 414   1              type_flag=0;
 415   1      }
 416          //-----------------------------------------------------------------------------------
 417          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2056    ----
   CONSTANT SIZE    =    289    ----
   XDATA SIZE       =    826    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      20
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7       1
C51 COMPILER V8.01   SNAKE                                                                 07/30/2008 23:29:10 PAGE 8   

END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -