版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、需求分析1.本程序将演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜。2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”后,由用户在键盘上输入演示程序中需要的参数,即可执行程序。3.程序的执行命令包括:1)设置雨点数量(数量越多密度越大)2)设置雨点下落速度二、概要设计
为实现以上程序,应以有序链表存储雨点,需要一个图形抽象数据类型。1.图形抽象数据类型定义如下:ADTgraphicList{数据对象:D={ai|ai∈CharSet,i=1,2,……,n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,ai-1<ai,i=1,2,……,n}基本操作:initgraphics(void)操作结果:图形模式的初始化。rainDrop*creatDrop(void)操作结果:构造雨点。creatRain(void)初始条件:雨点已存在。操作条件:使雨点产生持续下落的效果。drawRainLine(structrainDrop*p)
初始条件:雨点已存在。
操作结果;画雨点下落路线。updateRainLineData(structrainDrop*p)
初始条件:雨点已经出现。操作结果:更新雨点下落路线。clearRainLine(structrainDrop*p)初始条件:雨点已经出现并画出一段下落路线。操作结果:清除雨点下落路线。drawRainCircle(structrainDrop*p)初始条件:涟漪已产生。操作结果:画出涟漪。updateRainCircleData(structrainDrop*p)初始条件:涟漪已产生。操作结果:更新涟漪状态。clearRainCircle(structrainDrop*p)初始条件:涟漪已产生。操作结果:清除涟漪。rainDropDown(structrainDrop*p)初始条件:雨点已经落到湖面。操作结果:雨点消失。clearAll(void)操作结果:清除所有。}ADTgraphicList2.本程序包括四个模块:1)主程序模块:voidmain(){输入数据;图形模式初始化;构造雨点;雨点下落;清除雨点;}2)图形单元模块——实现图形的抽象数据类型;3)涟漪单元模块——定义涟漪的结构;4)雨滴单元模块——定义雨滴的结构;各模块之间的调用关系如下:主程序模块图形单元模块雨滴结构单元模块涟漪结构单元模块三、详细设计#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows.h>#include<graphics.h>//需要在VC6.0中添加graphics.h头文件#include<time.h>#defineLENsizeof(structrainDrop)#pragmacomment(lib,"Winmm.lib")intrainDropNumber=60;intdownSpeed=20;structrainDrop*head;structrainCircle//定义水圈的相关参数{ intx;//横坐标 inty;//纵坐标 intr;//水圈变化半径 intcurR;//水圈初始半径 intrainCircleStep;//水圈产生步骤};structrainDrop//定义雨点下落过程的参数{ intstartX;//初始横坐标 intstartY;//初始纵坐标 intendY;//结束横坐标 intcurX;//结束纵坐标 intcurY;//消失时的纵坐标 intrainColor;//雨滴颜色 intrainLineStep;//雨滴路径步骤 intrainLineLength;//雨滴下落长度 intstatus;//是否落到池塘 structrainCirclewater;//构造涟漪 structrainDrop*next;//构造指向下一个雨点的指针};voidinitgraphics(void)//图形模式的初始化{ intgmode,gdriver; gdriver=DETECT; initgraph(&gdriver,&gmode,"");}structrainDrop*creatDrop(void)//随机产生雨滴{ structrainDrop*p; p=(structrainDrop*)malloc(LEN); p->startX=rand()%640;//随机产生初始横坐标 p->startY=rand()%430;//随机产生初始纵坐标 p->endY=430+rand()%50;//随机产生结束纵坐标 p->curX=p->startX; p->curY=p->startY; p->rainLineStep=8;//过程共分为8个步骤 p->rainColor=rand()%15+1;//随机产生雨滴颜色 p->rainLineLength=rand()%10+10;//随机产生雨滴长度 p->status=0; p->water.x=p->startX; p->water.y=p->endY; p->water.r=rand()%40;//随机产生涟漪半径 p->water.curR=rand()%2;//随机产生涟漪初始半径 p->water.rainCircleStep=rand()%2+1;//随机产生涟漪变化步骤 p->next=NULL; return(p);}voidrecreatDrop(structrainDrop*p)//重复产生雨点(步骤同上){ p->startX=rand()%640; p->startY=rand()%430; p->endY=430+rand()%50; p->curX=p->startX; p->curY=p->startY; p->rainLineStep=8; p->rainColor=rand()%15+1; p->rainLineLength=rand()%10+10; p->status=0; p->water.x=p->startX; p->water.y=p->endY; p->water.r=rand()%40; p->water.curR=rand()%2; p->water.rainCircleStep=rand()%2+1;}voidcreatRain(void)//不间断产生雨点{ structrainDrop*p1,*p2; inti; p1=p2=creatDrop(); head=p1; for(i=0;i<rainDropNumber;i++) { p2=creatDrop(); p1->next=p2; p1=p2; }}voidupdateRainLineData(structrainDrop*p){//每个雨点的下落步骤 if(p->rainLineStep%5==0) p->rainLineStep++; p->curY+=p->rainLineStep; p->startY=p->curY-p->rainLineLength;}voiddrawRainLine(structrainDrop*p){//画出雨点下落轨迹 setcolor(p->rainColor); line(p->startX,p->startY,p->curX,p->curY);}voidclearRainLine(structrainDrop*p){//清除雨点轨迹 setcolor(BLACK); line(p->startX,p->startY,p->curX,p->curY);}voidrainDropDown(structrainDrop*p){//如果初始坐标大于结束坐标,则雨滴下落 if(p->curY>=p->endY) { clearRainLine(p); p->status=1; } else { clearRainLine(p);//清除旧雨点轨迹 updateRainLineData(p);更新雨点新的轨迹 drawRainLine(p);画出轨迹 }}voidupdateRainCircleData(structrainDrop*p){ p->water.curR+=p->water.rainCircleStep;}voiddrawRainCircle(structrainDrop*p){//画出涟漪 setcolor(p->rainColor); circle(p->water.x,p->water.y,p->water.curR);}voidclearRainCircle(structrainDrop*p){//清除涟漪 setcolor(BLACK); circle(p->water.x,p->water.y,p->water.curR);}voidfallToWater(structrainDrop*p){//落到水里的效果 if(p->water.curR>=p->water.r) { clearRainCircle(p); recreatDrop(p); } else { clearRainCircle(p); updateRainCircleData(p); drawRainCircle(p); }}voidrain(void){//下雨动画 structrainDrop*p; p=head; while(!kbhit()) { if(p==NULL) p=head; else { if(p->status==0) rainDropDown(p); else fallToWater(p); } Sleep(downSpeed); p=p->next; }}voidclearAll(void){//清除所有 structrainDrop*p,*pf; p=head; while(p!=NULL) { pf=p; p=p->next; free(pf); } closegraph();//关闭图像}voidmain(){ printf("InputrainDropNumber:"); scanf("%d",&rainDropNumber);//输入雨滴数量 printf("Inputdownspeed:"); scanf("%d",&downSpeed);//输入下落速度 srand((unsigned)time(NULL)); creatRain(); rain(); clearAll(); return;}函数的调用关系图反映了演示程序的层次结构:mainCreatrainrainclearAllcreatDroprainDropDownfallToWaterclearRainLineupdateRainLineDatadrawRainLineclearRainCirclerecreatDropupdateR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国射频美容仪行业营销态势与竞争前景预测报告
- 临床医学西医学诊断学考试试题库及答案
- 危货快递运输安全防护体系
- 千年榫卯:传统木构工艺的智慧传承与现代新生
- 某化工厂产品运输管理
- 某塑料厂原料配比规定
- 机械制造厂质量检验办法
- 11个问题中了5个就该考虑CRM了
- 电力系统稳态分析教学资料 02例2-4
- 机场工程作业指导书
- 2026年辽宁省沈阳市铁西区中考数学一模试卷(含答案)
- 2025年陕西艺术职业学院招聘笔试真题
- 2026年保密工作知识考试题库及答案
- 2026年甘肃省陇南市宕昌县人民法院招聘聘用制司法辅助人员考试参考试题及答案解析
- 涉密地理信息保密制度
- 初中语文中考非连续性文本信息筛选与辨析(选择题)知识清单
- 中国商飞在线测评题
- 海外工程财务制度
- 人工智能教育模式在初中历史教学中的应用与实践教学研究课题报告
- 69-集团战略管理体系设计方案:构建高效执行力与行业领先战略管理能力的全面规划与实施指南
- DB4205∕T 89-2021 小流域暴雨洪水经验公式法洪峰流量计算规范
评论
0/150
提交评论