池塘夜降彩色雨系统_第1页
池塘夜降彩色雨系统_第2页
池塘夜降彩色雨系统_第3页
池塘夜降彩色雨系统_第4页
池塘夜降彩色雨系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、石家庄经济学院 本科生课程设计报告书题 目 池塘夜降彩色雨系统 姓名 学号 学 院 信息工程学院 专业 计算机方向 指导教师 完成日期: 2012-07-04池塘夜降彩色雨系统1 需求分析设计一个程序,演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降, 滴滴入水有声,溅起圈圈微澜。 具体要求:(1) 雨点在空中的出现位置、雨点大小、降落过程的可见程度、入水位置、颜色、最大水圈等,都是随机确定的 ;(2) 多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上。可以适当调整控制雨点密度、大小、涟漪和状态变化的时间间隔等参数。该系统实现了池塘的夜晚,下起了五彩的雨点的自然现象。2 概要

2、设计该系统旨在描绘一幅池塘夜雨的动态图,因此应该关注每一滴雨点:(1) 每个雨点的存在周期可分为三个阶段:从天而降、入水有声和入水涟漪,需要一个记录存储其相关参数、当前状态和下一状态的更新时刻。(2) 雨点下降的可见程度应是断断续续、依稀可见;入水涟漪应是由里至外逐渐扩大和消失的。(3) 每个雨点发生时,生成其记录,并预置下一个雨点的发生时间。(4) 用一个适当的结构管理当前存在的雨点,使系统能利用它按时更新每个雨点的状态,一旦有雨点的水圈全部消失,就从结构中删去。根据以上的分析,可以将整个系统的数据类型定义如下 ADT graphList 数据对象:D=ai | ai Charset , I

3、 = 1,2,3,···,n, n0数据关系:R1=<ai-1,ai> | ai-1,aiD,ai-1<ai, I =2,···,n基本操作: initgraphics(void)操作结果;图形模式的初始化rainDrop *creatDrop(void)操作结果;构造雨点drawRainLine(struct rainDrop *p)初始条件:雨点已经产生操作结果;画雨点下落路线creatRain(void) 初始条件:雨点已经产生操作结果;产生雨连续下落的效果setwinddirection(struct rai

4、nDrop *p)初始条件:雨点已经开始下落操作结果:风向的设置(无风,东风,西风updateRainLineData(struct rainDrop *p)初始条件:雨点已经产生操作结果;雨点的下落过程更改updateRainCircleData and floatradius(struct rainDrop *p)初始条件:雨点已经出现且落在湖面上操作结果;水圈涟漪的设计rainDropDown(struct rainDrop *p)初始条件:雨点下落到湖面操作结果;使雨点在落到湖面上消失drawRainCircle(struct rainDrop *p)初始条件: 水圈涟漪已存在操作结果

5、;水圈涟漪的画出clearRainLine(struct rainDrop *p)初始条件:雨点已经出现且已经画出了一段痕迹操作结果;清除雨点的滑落路线 clearRainCircle(struct rainDrop *p)初始条件:水圈涟漪已存在操作结果;清除水圈涟漪clearAll(void)操作结果:清除所有ADT graphList程序的主要模块包括四个部分:(1) 主函数void(main)(2) 设定雨滴大小creatDrop(void) struct rainDrop *p rainLineLength(struct rainDrop *p)(3) 风向的设置 setWindDi

6、rection(struct rainDrop *p)(4) 结束 end各大模块的调用关系:主程序 雨滴的设置3 详细设计Struct rainCircle/定义水圈的相关数据/横坐标、纵坐标、路线步骤、水圈半径int x;/横坐标int y;/纵坐标int cutR;/水圈初始半径int r;/水圈变化后的半径int rainCircleStep;/水圈产生的步骤Struct raindrop/定义雨点下落的过程的数据int startX;/开始的横坐标int startY;/开始的纵坐标int endY;/结束的纵坐标int curX;/每个雨点消失的横坐标int curY;/ 每个雨点

7、消失的纵坐标int rainColor;/雨点的的颜色int rainLineStep;/雨点下落的路径int rainLineLength;/雨点的长度int status;/判断是否到达湖面struct rainCircle water;/产生涟漪struct raindrop *next;/指向下一颗雨点Void initgraphics(void) /图形函数的初始化int gmodegdiver;gdriver=DETECT;initgraph(&gdriver,&gmode,”D:TC”)/其中gdriver和gmode分别表示图形驱动器和模式,“D:TC”是指的图

8、形驱动程序所在的目录路径Struct raindrop *creatDrop(void)/雨点开始产生时的随机设置Struct raindrop *p;P=(struct raindrop *)molloc(LEN);p->startX=rand()%640;/随机产生的位置Xp->startY=rand()%430;/随机产生的位置Yp->endY=430+rand()%50;/结束坐标p->curX= p->startX;/每个雨点消失的横坐标p->curY= p->startY;/每个雨点消失的纵坐标p->rainLineStep=8:/共

9、分8个步骤p->rainColor=rand()%15+1;/彩色的随机产生p->rainLineLenth=rand()%10+10;/雨点大小的随即产生p->status=0;p->water.x= p->startX;p->water.y= p->startY;/随机产生的涟漪的位置p->water.r=p->rand()%45;/随机产生涟漪的半径p->water.curR=rand()%3;/涟漪消失的半径p->water.rainCircleStep=rand()%3+1;p->next=NULL;return

10、(p);Void recreat atDrop(struct raindrop *p)/重复产生雨点p->startX=rand()%640;/随机产生的位置Xp->startY=rand()%430;/随机产生的位置Yp->endY=430+rand()%50;/结束坐标p->curX= p->startX;/每个雨点消失的横坐标p->curY= p->startY;/每个雨点消失的纵坐标p->rainLineStep=8:/共分8个步骤p->rainColor=rand()%15+1;/彩色的随机产生p->rainLineLent

11、h=rand()%10+10;/雨点大小的随即产生p->status=0;p->water.x= p->startX;p->water.y= p->startY;/随机产生的涟漪的位置p->water.r=p->rand()%45;/随机产生涟漪的半径p->water.curR=rand()%3;/涟漪消失的半径p->water.rainCircleStep=rand()%3+1;Void creatRain(void)/重复雨点的产生,使之连续不断Struct rainDrop *p1*p2;Int I;p1=p2=creatDrop()

12、;head=p1;for(i=0;inext=p2;)p1=p2;Void updateRainLineData(struct rainDrop *p)/每次下落雨点的数目If(p->rainLineStep%5=0)p->rainLineStep+;p->curY+= p->rainLineStep;p->startY=p->curY- p->rainLineLength;Void drawRainLine(struct rainDrop *p)/雨点下落的轨迹switch(p->rainColor) case 0: setcolor(RED)

13、 ; break ;case 1: setcolor(GREEN) ; break; case 2: setcolor(BLUE) ; break; case 3: setcolor(CYAN) ; break; case 4: setcolor(MAGENTA) ;break; case 5: setcolor(BROWN) ; break; case 6: setcolor(LIGHTRED) ;break; case 7: setcolor(LIGHTMAGENTA) ; break; case 8: setcolor(WHITE) ;break; case 9: setcolor(LI

14、GHTGRAY) ; break; case 10: setcolor(DARKGRAY) ; break; case 11: setcolor(LIGHTBLUE) ; break; case 12: setcolor(LIGHTGREEN) ; break; case 13: setcolor(LIGHTCYAN) ; break; case 14: setcolor(YELLOW) ;break; system("pause"); setlinestyle(0,0,1);line(p->startX,p->startY,p->curX+w,p->

15、;curY+5); /w表示终点坐标相对初始点产生的偏移,使之产生风的效果void clearRainLine(struct rainDrop *p)/清除雨点的轨迹setcolor(BLACK);line(p->startX,p->startY,p->curX+w,p->cueY+5); Void rainDropDown(struct rainDrop *p)/构造雨点的下落效果/如果发生坐标大于结束坐标,雨点的下落效果产生;If(p->curY>=p->endY)clearRainLine(p);p->status=1;elseclear

16、RainLine(p);/清除原来雨点的轨迹updateRainLineData(p);/产生新雨点的线路drawRainLine(p);/画出新路线Void updateRainCircleData(struct rainDrop *p) /涟漪的消失半径p->water.curR+=p->water.rainCircleStep;Void drawRainCircle(struct rainDrop *p) /画出涟漪setcolor(p->rainColor);circle(p->water.x,p->water.y,p->water.curR);Vo

17、id clearRainCircle(struct rainDrop *p) /清除涟漪setcolor(BLACK);circle(p->water.x,p->water.y,p->water.curR);Void fallToWater(struct rainDrop *p) /落水动画if(p->water.curR>=p->water.r)clearRainCircle(p);recreatDrop(p);elseclearRainCircle(p);updateRainCircleData(p);drawRainCircle(p);Void rai

18、n(void) /下雨动画struct rainDrop *p;p=head;while(!kbhit()if(p=NUll)p=head;elseif(p->bottom=0)rainDropDown(p);elsefallToWater(p);dalay(downDelay);p=p->next;Void clearAll(void) /清除所有;struct rainDrop *p*pf;p=head;while(p!=NUll)pf=p;p=p->next;free(pf);closegraph(); /关闭图像主函数void main()printf("-

19、Colorful Rain-n"); printf("请用户输入雨滴数量:");/请用户输入雨滴数量 scanf("%d",&rainDropNumber); printf("请用户输入下雨的速度:");/输入下雨的速度 scanf("%d",&downSpeed);printf("请用户输入风速(-3,-2,-1,0,1,2,3):");/输入风力,负号向左,正号向右; scanf("%d",&w); rand(); initgraphic

20、s(); setbkcolor(BLACK);/设置背景为黑色 setfillstyle(BLUE); /画出池塘并将其填充为 蓝色 bar(0, 390, 640, 480); creatRain(); rain(); clearAll();开始输入雨点数量输入雨速输入风向画出雨点路径会出夜幕和池塘产生雨点清除雨点路径画出水圈关闭图形是否继续清除水圈结束否是4 编码调试输入界面:雨滴数目;雨下落速度;风向以及大小输入:雨量:0 速度:0 风力:0输入:雨量:50 速度:0 风力:0 输入:雨量:50 速度:1 风力:3输入:雨量:150 速度:0 风力:-3输入:雨量:500 速度:0 风力:-35 设计体会1. 本次课程设计是模拟夜幕之中的池塘降落五彩雨滴的动态过程。在开始选择这个题目的时候基本是凭着名字吸引,但是通过书本、网络明白了本实验旨在演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降, 滴滴入水有声,溅起圈圈微澜。调试过程中:一开始就在VC中编程,但是VC中没有graphics.h 文件,通过上网搜索终于解决了。但是之后又遇到了VC无法实现彩色雨的显示,通过老师的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论