




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.石家庄经济学院 本科生课程设计报告书题 目 池塘夜降彩色雨系统 姓名 学号 学 院 信息工程学院 专业 计算机方向 指导教师 完成日期: 2012-07-04池塘夜降彩色雨系统1 需求分析设计一个程序,演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降, 滴滴入水有声,溅起圈圈微澜。 具体要求:(1) 雨点在空中的出现位置、雨点大小、降落过程的可见程度、入水位置、颜色、最大水圈等,都是随机确定的 ;(2) 多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上。可以适当调整控制雨点密度、大小、涟漪和状态变化的时间间隔等参数。该系统实现了池塘的夜晚,下起了五彩的雨点的自然现象。2 概要设计该系统旨在描绘一幅池塘夜雨的动态图,因此应该关注每一滴雨点:(1) 每个雨点的存在周期可分为三个阶段:从天而降、入水有声和入水涟漪,需要一个记录存储其相关参数、当前状态和下一状态的更新时刻。(2) 雨点下降的可见程度应是断断续续、依稀可见;入水涟漪应是由里至外逐渐扩大和消失的。(3) 每个雨点发生时,生成其记录,并预置下一个雨点的发生时间。(4) 用一个适当的结构管理当前存在的雨点,使系统能利用它按时更新每个雨点的状态,一旦有雨点的水圈全部消失,就从结构中删去。根据以上的分析,可以将整个系统的数据类型定义如下 ADT graphList 数据对象:D=ai | ai Charset , I = 1,2,3,n, n0数据关系:R1= | ai-1,aiD,ai-1startX=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-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(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-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;Void creatRain(void)/重复雨点的产生,使之连续不断Struct rainDrop *p1*p2;Int I;p1=p2=creatDrop();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) ; 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(LIGHTGRAY) ; 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-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 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);Void 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 rain(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(-Colorful Rain-n); printf(请用户输入雨滴数量:);/请用户输入雨滴数量 scanf(%d,&rainDropNumber); printf(请用户输入下雨的速度:);/输入下雨的速度 scanf(%d,&downSpeed);printf(请用户输入风速(-3,-2,-1,0,1,2,3):);/输入风力,负号向左,正号向右; scanf(%d,&w); rand(); initgraphics(); 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无法实现彩色雨的显示,通过老师的帮助,用switch-case的循环来调用graphics.h 文件中的16种颜色。后来在添加风效的时候,又出现了雨滴断断续续一条模糊的较宽的彩带而不是倾斜的雨点,原来是我只考虑了雨点的横向偏移而忘记了纵轴的变化,经过反复调试,终于成功的实现了美丽的“池塘夜雨”。2. 本程序采用带头结点的循环链表,仅需改变头尾两个指针即可。creatRain,drawRainLine和rainDropDown以及确定链表中第一个结点和之后一个结点的运算时间都是O(l),销毁雨点线路算法clearRainLine和销毁水圈算法clearRainCircle都是对每个元素调用一个O(1)的函数,因此都是O(n),也有简单的图表的应用,也有对链表的的应用,即双向循环链表的使用。3.实验做完了,但是并不完美,只是初步的完成了池塘夜雨的画面,而并未模拟出雨声,以及雷电等效果。如果衍生的话还能在雨与雪之间的转换,这些都是未曾做出来的效果。或许是实验小小的遗憾吧。但是实验做完了,也收获了不少东西,做出了想要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 60092-501:2025 EN Electrical installations in ships - Part 501: Special features - Electric propulsion plant
- 重庆自考薪酬管理课件
- 重庆知识教育培训中心课件
- 重庆教师知识培训课件
- 国际视野下门诊护理管理的创新实践与质量管理策略
- 老年人防晒知识培训课件
- 老年人痴呆症课件
- 老年人消防逃生知识培训课件
- 全国一等奖高中语文统编版必修上册《念奴娇赤壁怀古》 公开课课件
- 完形填空(过关训练)-2023学年七年级英语上学期(仁爱版)
- 双控体系管理制度汇编
- 灾害现场检伤分类
- 献唐学校及桂林路小学窗帘采购需求方案
- 装饰材料与构造
- GB/T 29781-2013电动汽车充电站通用要求
- 七年级上册劳技教案
- 公司企业接收证明
- 苏州大学医学部操作技能直接观察评估(DOPS)评分表
- 暂时进出口协议范本样本
- (烹饪)基本功教学教案
- 第11章-网络故障诊断及排除ppt课件(全)
评论
0/150
提交评论