📄 russia.lst
字号:
293 2 sum=0;
294 2 for(j=1;j<11;j++)
295 2 {
296 3 sum+=gamespace[i][j];
297 3 }
C51 COMPILER V7.06 RUSSIA 10/17/2006 15:30:07 PAGE 6
298 2 if(sum==10) //发现第i行为满行
299 2 {
300 3 for(k=i;k>0;k--) //删除,i行之上下移
301 3 {
302 4 for(j=1;j<11;j++)
303 4 {
304 5 gamespace[k][j]=gamespace[k-1][j];
305 5 }
306 4 }
307 3 for(j=1;j<11;j++) //最高行补零
308 3 {
309 4 gamespace[0][j]=0;
310 4 }
311 3 score++; //得分
312 3 flag=1; //返回1
313 3 }
314 2 }
315 1 return(flag);
316 1 }
317
318
319
320 /*******************绘图函数*************/
321
322 void DrawWinPicture()
323 {
324 1 int i,j;
325 1 CS=0;
326 1 CmdWrite(CSRDIR_RIGHT);
327 1 for(i=0;i<240;i++){
328 2 Locatexy(0,i);
329 2 CmdWrite(MWRITE);
330 2 for(j=0;j<40;j++)
331 2 {
332 3 // DataWrite(WinBitmapDot[i*40+j]);
333 3 }
334 2 }
335 1 CS=1;
336 1 }
337
338 void DrawBeginPicture()
339 {
340 1 int i,j;
341 1 CS=0;
342 1 CmdWrite(CSRDIR_RIGHT);
343 1 for(i=0;i<240;i++){
344 2 Locatexy(0,i);
345 2 CmdWrite(MWRITE);
346 2 for(j=0;j<40;j++)
347 2 {
348 3 // DataWrite(BeginBitmapDot[i*40+j]);
349 3 }
350 2 }
351 1 CS=1;
352 1 }
353
354
355 /****************画主窗口方块****************/
356
357 void DrawBlockMain(unsigned char x,unsigned char y)
358 {
359 1 int i;
C51 COMPILER V7.06 RUSSIA 10/17/2006 15:30:07 PAGE 7
360 1 CS=0;
361 1 Locatexy(y+5,8+x*8);
362 1 if(gamespace[x][y]==1){
363 2 CmdWrite(CSRDIR_DOWN);
364 2 CmdWrite( MWRITE );
365 2 for(i=0;i<8;i++)
366 2 {
367 3 DataWrite(0xFF);
368 3 }
369 2 }
370 1 else{
371 2 CmdWrite(CSRDIR_DOWN);
372 2 CmdWrite( MWRITE );
373 2 for(i=0;i<8;i++)
374 2 {
375 3 DataWrite(0x00);
376 3 }
377 2 }
378 1 CS=1;
379 1 }
380
381 /******************显示下一图形***************/
382 void ShowNext()
383 {
384 1 CS=0;
385 1 for(i=0;i<4;i++)
386 1 {
387 2 for(j=0;j<4;j++)
388 2 {
389 3 Locatexy(j+22,48+i*8);
390 3 if(shape[nextshape_No].xy[i][j]==1)
391 3 {
392 4 CmdWrite(CSRDIR_DOWN);
393 4 CmdWrite( MWRITE );
394 4 for(k=0;k<8;k++)
395 4 {
396 5 DataWrite(0xFF);
397 5 }
398 4 }
399 3 else
400 3 {
401 4 CmdWrite(CSRDIR_DOWN);
402 4 CmdWrite( MWRITE );
403 4 for(k=0;k<8;k++)
404 4 {
405 5 DataWrite(0x00);
406 5 }
407 4 }
408 3 }
409 2 }
410 1 CS=1;
411 1 }
412 /**************画面显示******************/
413 void ShowMain()
414 {
415 1 unsigned char i,j;
416 1 for(i=4;i<24;i++){
417 2 for(j=1;j<11;j++){
418 3 DrawBlockMain(i,j);
419 3 }
420 2 }
421 1 }
C51 COMPILER V7.06 RUSSIA 10/17/2006 15:30:07 PAGE 8
422
423 void SetSpeed() //level=1~9,1最慢
424 {
425 1 unsigned char droptime;
426 1 droptime=(100-level*10)/2+5;
427 1 Mycounter=((counter+droptime)%65535);
428 1 }
429
430 void refresh() //根据分数调整速度.刷新得分,速度
431 {
432 1 level=(score/levelup)+1; //调整速度(得分已在clear中调整)
433 1 strFox10[0]= level+48; //送数
434 1 strFox9[0]= score/10+48;
435 1 strFox9[1]= score%10+48;
436 1 dprintf(23,125,strFox9); //显示
437 1 dprintf(24,175,strFox10);
438 1 }
439
440 void Game_INIT() //游戏初始化,界面,得分,难度..
441 {
442 1 unsigned char i,j;
443 1 levelup=0; //每次升级所需分数
444 1 level=0; //控制游戏速度 1~9
445 1 score=(level-1)*levelup; //游戏得分
446 1 ClearData(); //清屏
447 1 for(i=0;i<25;i++){ //主界面显示
448 2 for(j=0;j<12;j++){
449 3 gamespace[i][j]=1;
450 3 }
451 2 }
452 1 for(i=0;i<3;i++){
453 2 for(j=1;j<11;j++){
454 3 gamespace[i][j]=0;
455 3 }
456 2 }
457 1 for(i=4;i<24;i++){
458 2 for(j=1;j<11;j++){
459 3 gamespace[i][j]=0;
460 3 }
461 2 }
462 1
463 1 for(i=3;i<25;i++){
464 2 for(j=0;j<12;j++){
465 3 DrawBlockMain(i,j);
466 3 }
467 2 }
468 1
469 1 for(j=1;j<11;j++)
470 1 gamespace[3][j]=0;
471 1
472 1 ShowMain();
473 1 ShowNext();
474 1 refresh();
475 1 dprintf(20,100,strFox1); //分数
476 1 dprintf(20,150,strFox3); //难度
477 1 dprintf(0, 220,strFox4); //左移
478 1 dprintf(5, 220,strFox5); //下移
479 1 dprintf(10,220,strFox6); //右移
480 1 dprintf(15,220,strFox7); //变形
481 1 dprintf(30,220,strFox8); //重启
482 1 dprintf(20,32 ,strFox0); //下一形状
483 1 //主界面显示完成
C51 COMPILER V7.06 RUSSIA 10/17/2006 15:30:07 PAGE 9
484 1 CreateShape();
485 1 SetSpeed();
486 1 }
487
488 void MyRussia()
489 {
490 1 unsigned char beginshowend=0;
491 1 DrawBeginPicture(); //显示开始画面,按任意键结束
492 1 while(1)
493 1 {
494 2 if(CheckKeyF==1)
495 2 {
496 3 CheckKey();
497 3 CheckKeyF=0;
498 3 }
499 2 for(i=0;i<8;i++)
500 2 {
501 3 if(Key[i].pressed==1)
502 3 {
503 4 beginshowend=1;
504 4 Key[i].pressed=0;
505 4 }
506 3 }
507 2 if(beginshowend==1)
508 2 break;
509 2 }
510 1
511 1 Game_INIT();
512 1
513 1 while(1) //后台任务
514 1 {
515 2
516 2 if(CheckKeyF==1) //键盘检测
517 2 {
518 3 CheckKey();
519 3 CheckKeyF=0;
520 3 }
521 2
522 2 if(Myflag==1) //方块自动下落
523 2 {
524 3 if(Move_Down()==0) //方块到底->检测满行->产生新方块
525 3 {
526 4 if(ClearLine()==1) //检测满行
527 4 {
528 5 refresh();
529 5 }
530 4 if(CreateShape()==0) //不能产生新方块,GAME OVER
531 4 {
532 5 dprintf(20,200,strFox2);
533 5 }
534 4 else
535 4 {
536 5 ShowNext();
537 5 }
538 4 }
539 3 ShowMain();
540 3 SetSpeed();
541 3 Myflag=0;
542 3 }
543 2
544 2 if(Key[0].pressed==1) //方块左移
545 2 {
C51 COMPILER V7.06 RUSSIA 10/17/2006 15:30:07 PAGE 10
546 3 if(Move_Left()==1)
547 3 ShowMain();
548 3 Key[0].pressed=0;
549 3 }
550 2
551 2 if(Key[1].pressed==1) //方块下移
552 2 {
553 3 if(Move_Down()==1)
554 3 ShowMain();
555 3 Key[1].pressed=0;
556 3 }
557 2
558 2 if(Key[2].pressed==1) //方块右移
559 2 {
560 3 if(Move_Right()==1)
561 3 ShowMain();
562 3 Key[2].pressed=0;
563 3 }
564 2
565 2 if(Key[3].pressed==1) //方块变形
566 2 {
567 3 if(Turn_Round()==1)
568 3 ShowMain();
569 3 Key[3].pressed=0;
570 3 }
571 2
572 2 if(Key[6].pressed==1) //退出游戏
573 2 {
574 3 Key[6].pressed=0;
575 3 ClearData();
576 3 return;
577 3 }
578 2
579 2 if(Key[7].pressed==1) //游戏重启
580 2 {
581 3 Game_INIT();
582 3 Key[7].pressed=0;
583 3 }
584 2
585 2 if(score>=(9*levelup)) //通关
586 2 {
587 3 DrawWinPicture(); //通关画面
588 3 while(1);
589 3 }
590 2
591 2 }
592 1 }
593
C51 COMPILATION COMPLETE. 0 WARNING(S), 6 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -