流星雨的设计
功能说明:程序模拟一组流星飞向地面的情景。地面用多行#来表示,流星用大写字母不表示。程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。
C语言程序源代码:
#include #include #include #include int main() { void load(char liuxin[25][80],char ground[5][80],int heng[10],int lie[10]); void echo(char out[25][80],int lie[10],int color[10]); void make(char out[25][80],char liuxin[25][80],char mark[10],int lie[10],int heng[10],int color[10],int speed[10],int exist[10]); void fall(char out[25][80],char liuxin[25][80],int speed[10],char ground[5][80],int exist[10],int heng[10],int lie[10]); void panduan(char ground[5][80]); void con(char out[25][80],char liuxin[25][80],char ground[5][80]); int exist_or(char liuxin[25][80]); char out[25][80],liuxin[25][80],ground[5][80],mark[10]; int exist[10],lie[10],heng[10],color[10],speed[10]; load(liuxin,ground,heng,lie); srand((int)time(0)); con(out,liuxin,ground); echo(out,lie,color); while(1) { make(out,liuxin,mark,lie,heng,color,speed,exist);//产生一组10个不同颜色不同字母不同下落速度的流星雨 while(1) { con(out,liuxin,ground); echo(out,lie,color); panduan(ground); Sleep(1); fall(out,liuxin,speed,ground,exist,heng,lie); if(exist_or(liuxin)==0) break; } } return 0; } void load(char liuxin[25][80],char ground[5][80],int heng[10],int lie[10]) //初始化流行数组和地面 { int i1,i2; for(i1=0;i1<25;i1++) for(i2=0;i2<80;i2++) liuxin[i1][i2]=' '; for(i1=0;i1<5;i1++) for(i2=0;i2<80;i2++) ground[i1][i2]='#'; for(i1=0;i1<10;i1++) { heng[i1]=0; lie[i1]=i1; } } void echo(char out[25][80],int lie[10],int color[10]) //将out数组输出到屏幕上 { int i1,i2,i3=0; COORD coord; coord.X=0; coord.Y=0; SetConsoleCursorPosition( coord ); GetStdHandle( STD_OUTPUT_HANDLE ), for(i1=0;i1<25;i1++) { i3=0; for(i2=0;i2<80;i2++) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY); if(i2==lie[i3]) { if(out[i1][i2]!=' ' && out[i1][i2]!='#') switch(color[i3]) { case 0: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);break; case 1: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);break; case 2: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);break; } i3+=1; } printf(\"%c\ } } } void make(char out[25][80],char liuxin[25][80],char heng[10],int color[10],int speed[10],int exist[10]) { int i1,i2,t,change,base=1; lie[10],int mark[10],int for(i1=0;i1<10;i1++) { heng[i1]=0; mark[i1]=(abs(rand())%26+65); color[i1]=abs(rand())%3; while(1) { base=0; t=(abs(rand())%80); for(i2=0;i2<10;i2++) if(t==lie[i2]) base=1; if(base==0) break; } lie[i1]=t; speed[i1]=(abs(rand())%4)+1; liuxin[0][lie[i1]]=mark[i1]; exist[i1]=1; } for(i1=0;i1<10;i1++) for(i2=0;i2<9;i2++) { if(lie[i2]>lie[i2+1]) { change=lie[i2]; lie[i2]=lie[i2+1]; lie[i2+1]=change; } } } void fall(char out[25][80],char liuxin[25][80],int ground[5][80],int exist[10],int heng[10],int lie[10]) { int i1,i2; for(i1=0;i1<10;i1++) { if(exist[i1]==1) { for(i2=1;i2<=speed[i1];i2++) speed[10],char { liuxin[heng[i1]+1][lie[i1]]=liuxin[heng[i1]][lie[i1]]; liuxin[heng[i1]][lie[i1]]=' '; heng[i1]+=1; if(heng[i1]>=20) { if(ground[heng[i1]-20][lie[i1]]=='#') { liuxin[heng[i1]][lie[i1]]=' '; ground[heng[i1]-20][lie[i1]]=' '; exist[i1]=0; break; } } } } } } int exist_or(char liuxin[25][80]) //判断是否还有流星,如果没有就开始新的make函数 { int i1,i2,t=0; for(i1=0;i1<25;i1++) for(i2=0;i2<80;i2++) { if(liuxin[i1][i2]!=' ') { t=1; break; } } return t; } void panduan(char ground[5][80]) //判断最后一行是否有空格 { int i,a=0; for(i=0;i<80;i++) { if(ground[4][i]==' ') getchar(); } } void con(char out[25][80],char liuxin[25][80],char ground[5][80]) //将流行数组与地面数组整合到out数组中 { int i1,i2; for(i1=0;i1<25;i1++) for(i2=0;i2<80;i2++) out[i1][i2]=liuxin[i1][i2]; for(i1=20;i1<25;i1++) for(i2=0;i2<80;i2++) if(ground[i1-20][i2]=='#') out[i1][i2]=ground[i1-20][i2]; } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务