池塘夜降彩色雨代码数据结构课程设计.docx
- 文档编号:15492127
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:21
- 大小:17.48KB
池塘夜降彩色雨代码数据结构课程设计.docx
《池塘夜降彩色雨代码数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《池塘夜降彩色雨代码数据结构课程设计.docx(21页珍藏版)》请在冰点文库上搜索。
池塘夜降彩色雨代码数据结构课程设计
/**********包涵到头文件*********/
#include
#include
#include
#include
#include
#include
#include
/**********宏定义*********/
/*********键盘控制键盘扫描码**********/
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
#defineL_SHEFT0x01
#defineSPACE0x3920
#defineLOWERF0x2166
#defineUPPERF0x2146
#defineLOWERA0x1e61
#defineUPPERA0x1e41
#defineLOWERQ0x1071
#defineUPPERQ0x1051
#defineENTER0x1c0d
#defineONE0x4f31
#defineTWO0x5032
#defineTHREE0x5133
#defineFOUR0x4b34
#defineFIVE0x4c35
#defineSIX0x4d36
#defineSEVEN0x4737
#defineEIGHT0x4838
#defineNINE0x4939
#defineO0x5230
#definePLUS0x4e2b
#defineJIAN0x4a2d
/**********全局变量*********/
intrain_Num;
intrain_v;
intrain_wind;
intrain_len;
intkey;
intbig;
intm;
intcurx;
intcury;
intthunder[6][2]={{10,20},{-10,0},{10,20},{-25,-25},{15,0},{0,-15}};
/**********定义结构*************/
structrainDrop*head;
/*********雨滴雨圈雷电数据结构体链表**********/
structrainDrop
{
intstartX,curX,startY,curY;
intflag;
intendX;
intendY;
intrainColor;
intstatus;
intflagR;
intcurR;
intthunderX1,thunderX2,thunderY1,thunderY2;
inta,b;
structrainDrop*next;
};
/*********初始化画布**********/
/*********参数void**********/
/*********return无**********/
voidinitgraphics(void)
{
intgmode,gdriver;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");
}
/*********创建初始化头结点**********/
/*********返回指针p**********/
structrainDrop*creatDrop(void)
{
structrainDrop*p;
p=(structrainDrop*)malloc(sizeof(structrainDrop));
p->startX=random(640);
p->startY=random(430);
p->flag=430+rand()%50;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->rainColor=random(15);
p->status=0;
p->flagR=random(10);
p->curR=random
(2);
p->thunderX1=random(300);
p->thunderY1=random(20);
p->next=NULL;
return(p);
}
/*********重新生成链表数据**********/
voidrecreatDrop(structrainDrop*p)
{
p->startX=random(640);
p->startY=random(430);
p->flag=430+rand()%50;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->rainColor=random(15);
p->status=0;
p->flagR=random(10);
p->curR=random(3);
}
/*********创建整个链表**********/
voidcreatRain(void)
{
structrainDrop*p1,*p2;/*定义两个指针*/
inti;
p1=p2=creatDrop();
head=p1;/*赋值头指针*/
for(i=0;i { p2=creatDrop(); p1->next=p2; p1=p2; } } /*********生成下一个雨滴的坐标位置**********/ voidupdateRainLineData(structrainDrop*p) { if(big==2)/*加速为2个雨滴距离下落*/ { p->startX=p->curX; p->startY=p->curY; p->curX=p->startX-(rain_wind*5); p->curY=p->startY+rain_len; p->startX=p->curX; p->startY=p->curY; p->curX=p->startX-(rain_wind*5); p->curY=p->startY+rain_len; p->startX=p->curX; p->startY=p->curY; } if(big==1)/*加速为一个雨滴的距离下落*/ { p->startX=p->curX; p->startY=p->curY; p->curX=p->startX-(rain_wind*5); p->curY=p->startY+rain_len; p->startX=p->curX; p->startY=p->curY; } else/*正常速度下落*/ { p->startX=p->curX; p->startY=p->curY; } p->curX=p->startX-(rain_wind*5); p->curY=p->startY+rain_len; } /********雨雪选择函数***********/ selectWinter() { m=1; } selectSumm() { m=6; } /********分屏函数***********/ splitScreen(structrainDrop*p) { curx=p->curX/200; cury=p->curY/110; switch(curx) { case0: switch(cury) { case0: case1: selectSumm();break; case2: selectWinter();break; case3: selectSumm();break; }break; case1: switch(cury) { case0: case1: selectWinter();break; case2: selectSumm();break; case3: selectWinter();break; }break; case2: switch(cury) { case0: case1: selectSumm();break; case2: selectWinter();break; case3: selectSumm();break; }break; case3: switch(cury) { case0: case1: selectWinter();break; case2: selectSumm();break; case3: selectWinter();break; }break; } } /********画出彩色雨滴***********/ voiddrawRainLine(structrainDrop*p,intm) { setcolor(p->rainColor);/*将雨滴赋予颜色*/ if(m>=3&&m<=11)/*月份*/ line(p->startX,p->startY,p->curX,p->curY);/*画雨滴*/ else/*雪*/ { setcolor(WHITE); setfillpattern(2,WHITE); sector(p->curX,p->curY,0,360,5,4); } } /********清除上一滴的雨滴***********/ voidclearRainLine(structrainDrop*p,intm) { setcolor(BLACK);/*将雨滴赋予黑色*/ if(m>=3&&m<=11) line(p->startX,p->startY,p->curX,p->curY); else { setfillpattern(2,BLACK); sector(p->curX,p->curY,0,360,5,4); } } /********雨滴入数的声音***********/ getsound() { intfreq; for(freq=300;freq<5000;freq+=50) { sound(freq); delay(400); } nosound(); } /*********雷电声音**********/ thunderesound() { intfreq; for(freq=1000;freq<2000;freq+=50) { sound(freq); delay(5000); } nosound(); } /*********下雨**********/ voidrainDropDown(structrainDrop*p,intm) { if(p->curY>=p->flag) { clearRainLine(p,m); p->status=1; getsound(); } else { clearRainLine(p,m); updateRainLineData(p); drawRainLine(p,m); } } /********雨圈生长变大***********/ voidupdateRainCircleData(structrainDrop*p) { p->curR+=1; } /*********画出雨圈**********/ voiddrawRainCircle(structrainDrop*p) { setcolor(p->rainColor); ellipse(p->curX,p->curY,0,360,10+p->curR*3,p->curR); } /*******清理雨圈************/ voidclearRainCircle(structrainDrop*p) { setcolor(BLACK); setfillpattern(2,BLUE); sector(p->curX,p->curY,0,360,10+p->curR*3,p->curR); } /*******入水水圈生成结束重新刷新雨点************/ voidfallToWater(structrainDrop*p) { if(p->curR>=p->flagR) { clearRainCircle(p); recreatDrop(p); } else { clearRainCircle(p); updateRainCircleData(p); drawRainCircle(p); } } /********画出雷电***********/ intdrawthurder(structrainDrop*p) { inti,j,k,x,y; setbkcolor(BLACK); p->thunderX1=random(300); p->thunderY1=random(20); setcolor(WHITE); for(k=0;k<2;k++) { x=random(100); y=random(100); p->thunderX1+=x; p->thunderY1+=y; p->a=p->thunderX1; p->b=p->thunderY1; for(i=0;i<6;i++) for(j=0;j<2;j++) { setfillpattern(0,WHITE); p->thunderX2=p->thunderX1-thunder[i][j]; j++; p->thunderY2=p->thunderY1+thunder[i][j]; line(p->thunderX1,p->thunderY1,p->thunderX2,p->thunderY2); p->thunderX1=p->thunderX2;p->thunderY1=p->thunderY2; } floodfill(p->a-3,p->b+12,WHITE); setfillpattern(0,0); bar(p->a-20,p->b-10,p->a+40,p->b+40); } } /*******函数实现释放链表收起画布***********/ voidrainfree(void) { charmark; structrainDrop*p,*q; p=head; while(p! =NULL) { q=p; p=p->next; free(q); } closegraph(); } /********键盘控制***********/ keyboardCon(structrainDrop*p) { key=bioskey(0); if(key==LEFT) rain_wind+=1; if(key==TWO) { m=1; } if(key==RIGHT) rain_wind-=1; if(key==DOWN) { rain_len-=1; } if(key==UP) rain_len+=1; if(key==SPACE) { rainfree(); exit(0); } if(key==PLUS&&big<2) big+=1; if(key==JIAN) big-=1; if(key==ONE) { splitScreen(p); } if(key==THREE) m=6; } /********软件介绍信息***********/ output() { outtextxy(100,10,"Pondnightrainfallcolor---thankyou! "); outtextxy(500,400,"09060641"); } /********河水***********/ river() { setfillpattern(0,BLUE); bar(0,440,640,500); } /********下雨***********/ voidrain(intm) { structrainDrop*p; p=head; while(! (key==ESC)) { keyboardCon(p); while(! kbhit()) { if(p==NULL) p=head; else { if(p->status==0) rainDropDown(p,m); else fallToWater(p); } delay(rain_v); output(); if(key==ENTER) { drawthurder(p); drawthurder(p); thunderesound(); } key=NULL; p=p->next; } } } /********软件开始简介***********/ voidIntroduction() { printf("******************************\n"); printf("******************************\n"); printf("Pondnightrainfallcolor! \n"); printf("\tclass: 09060641\n"); printf("******************************\n"); printf("******************************\n"); } /*********过滤函数*************/ filter() { inti; i=0; while(i>=6) { if(rain_Num<0&&rain_Num>50) { printf("error\nNotePleaseenterlessthanfiftygreaterthanzero\nrain_num: "); scanf("%d",&rain_Num); } else i+=1; if(rain_v<0&&rain_v>10) { printf("error\nNotePleaseenterlessthanfiftygreaterthanzero\nrain_v: "); scanf("%d",&rain_v); } else i+=1; if(rain_len<0&&rain_len>50) { printf("error\nNotePleaseenterlessthantengreaterthanzero\nrain_len: "); scanf("%d",&rain_len); } else i+=1; if(rain_wind<0&&rain_wind>10) { printf("error\nNotePleaseenterlessthantengreaterthanzero\nrain_wind: "); scanf("%d",&rain_wind); } else i+=1; if(m<0&&m>10) { printf("error\nNotePleaseenterlessthan12greaterthanzero\nmonth: "); scanf("%d",&m); } else i+=1; } } /********全局变量的输入及其判定***********/ voidinput() { printf("rain_num: \nNotePleaseenterlessthanfiftygreaterthanzero"); scanf("%d",&rain_Num); printf("rain_v: \nNotePleaseenterlessthanfiftygreaterthanzero"); scanf("%d",&rain_v); printf("rain_wind: \nNotePleaseenterlessthantengreaterthanzero"); scanf("%d",&rain_wind); printf("rain_length: \nNotePleaseenterlessthanfiftygreaterthanzero"); scanf("%d",&rain_len); printf("themonthoftheyear: \nNotePleaseenterlessthan12greaterthan1"); scanf("%d",&m); filter(); big=1; } /********程序入口主函数**********/ main() { Introduction(); input(); initgraphics(); creatRain(); river(); rain(m); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 池塘 彩色 代码 数据结构 课程设计