📄 snake.lst
字号:
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 + -