池塘夜降彩色雨代码数据结构课程设计.docx

上传人:b****2 文档编号:18964440 上传时间:2023-04-24 格式:DOCX 页数:21 大小:17.48KB
下载 相关 举报
池塘夜降彩色雨代码数据结构课程设计.docx_第1页
第1页 / 共21页
池塘夜降彩色雨代码数据结构课程设计.docx_第2页
第2页 / 共21页
池塘夜降彩色雨代码数据结构课程设计.docx_第3页
第3页 / 共21页
池塘夜降彩色雨代码数据结构课程设计.docx_第4页
第4页 / 共21页
池塘夜降彩色雨代码数据结构课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

池塘夜降彩色雨代码数据结构课程设计.docx

《池塘夜降彩色雨代码数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《池塘夜降彩色雨代码数据结构课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

池塘夜降彩色雨代码数据结构课程设计.docx

池塘夜降彩色雨代码数据结构课程设计

/**********包涵到头文件*********/

#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);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1