if(tempbt.bp[1][j]&&zxp[tempbt.y+2][tempbt.x+j]||zxp[tempbt.y+3][tempbt.x+2]) return 1; break; case 7: case 16: if(20==tempbt.y||zxp[tempbt.y+3][tempbt.x+2]||tempbt.bp[0][1]&& zxp[tempbt.y+1][tempbt.x+1]||tempbt.bp[1][3]&&zxp[tempbt.y+2][tempbt.x+3]) return 1; break; case 13: if(20==tempbt.y||zxp[tempbt.y+3][tempbt.x+1]||zxp[tempbt.y+1][tempbt.x+2]) return 1; break; case 17: if(20==tempbt.y||zxp[tempbt.y+2][tempbt.x+1]||zxp[tempbt.y+3][tempbt.x+2]|| zxp[tempbt.y+2][tempbt.x+3]) return 1; break; } return 0; /*没有到底部且没有遇到障碍物*/ } int judgedel(void) { int i,j,count=0; for(i=tempbt.y;i 31 if(delline[i]) { for(j=0;j<10;j++) { zxp[tempbt.y+i][j]=0; zxpcolor[tempbt.y+i][j]=DELLCOLOR; } } } return; } void ash_down(void) { int i,j,n; for(n=0;n<4;n++) if(delline[n]) { for(i=tempbt.y+n;i>3;i--) for(j=0;j<10;j++) { zxp[i][j]=zxp[i-1][j]; zxpcolor[i][j]=zxpcolor[i-1][j]; } } return; } void amark(int *pdnum) { switch(*pdnum) { case 1: point+=100; break; case 2: point+=300; break; case 3: point+=600; break; case 4: point+=1000; break; /*每次消行越多,平均每行给的分越高*/ } *pdnum=0; /*用完后值零,为下次再用做好准备*/ 32 return; } int judgegm(void) { int j; for(j=0;j<10;j++) if(zxp[3][j]) /*如果游戏窗口第一行有方块说明游戏结束*/ return 1; return 0; } int gamedead(void) { char *dar[2]={\ char wich,ch; initdcard(); /*初始化游戏结束时的界面*/ wich=0; dchoosecard(0,DSIGNCOLOR,DCCOLOR2,dar[0]); /*刚进入界面时,指向第一 个选项(to menu)*/ while(1) { ch=getch(); switch(ch) { case 'D': case 'd': case 77: if(1!=wich) /*条件满足,表示可以向右选*/ { dchoosecard(0,DCCOLOR1,DCCOLOR2,dar[0]); /*首先把左边的选项回复为未选中*/ dchoosecard(1,DSIGNCOLOR,DCCOLOR2,dar[1]); /*然后把右边的选项标记为 选中*/ wich=1; } break; case 'A': case 'a': case 75: if(0!=wich) /*条件满足,表示可以向左选*/ { dchoosecard(1,DCCOLOR1,DCCOLOR2,dar[1]); /*首先把右边的选项回复为未选中*/ dchoosecard(0,DSIGNCOLOR,DCCOLOR2,dar[0]); /*然后把左边的选项标记为 选中*/ 33 wich=0; } break; case 13: return wich; } } } void initdcard(void) { char gradear[20],pointar[20],lnumar[20]; char *dar[2]={\ setbkcolor(LIGHTGRAY); setcolor(DCOLOR); setfillstyle(1,DCOLOR); line(169,89,469,89); line(169,389,469,389); line(119,139,119,339); line(519,139,519,339); pieslice(169,139,90,180,50); pieslice(469,139,0,90,50); pieslice(469,339,0,360,50); pieslice(169,339,180,270,50); floodfill(319,239,DCOLOR); /*画出游戏结束时的窗口*/ setcolor(OGCOLOR); settextstyle(1,0,6); outtextxy(177,122,\ /*提示游戏结束*/ sprintf(gradear,\ sprintf(lnumar,\ sprintf(pointar,\ setcolor(DGLPCOLOR); settextstyle(1,0,3); outtextxy(177,200,gradear); outtextxy(177,240,lnumar); outtextxy(177,280,pointar); /*显示游戏结束时的成绩*/ dchoosecard(0,DCCOLOR1,DCCOLOR2,dar[0]); dchoosecard(1,DCCOLOR1,DCCOLOR2,dar[1]); /*画出游戏结束时的两个选项*/ return; } void dchoosecard(int i,int color1,int color2,char *ar) { setcolor(color1); setfillstyle(1,color1); bar(187+i*204,332,247+i*204,362); 34 pieslice(187+i*204,347,90,270,15); pieslice(247+i*204,347,0,360,15); setcolor(color2); settextstyle(2,0,6); outtextxy(186+i*209,337,ar); } void saveran(void) { if(getrlistdata()) /*getrlistdata()返回1说明读取信息失败*/ return; insertrldata(); /*把本次游戏信息按顺序插入到排行榜*/ tofile(); /*将排行数据写到文件里*/ return; } void insertrldata(void) { int i,j; for(i=0;i<10;i++) { if(point>rl[i].rpoint) /*分数越高排名越靠前*/ break; else if(point==rl[i].rpoint) { if(lnum 35