好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言编程模拟下雨by张田浩.doc

9页
  • 卖家[上传人]:M****1
  • 文档编号:397861985
  • 上传时间:2022-08-09
  • 文档格式:DOC
  • 文档大小:35KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 程序设计实习报告题目: 模拟下雨学院: 计算机与通信工程学院专业: 计算机科学与技术班级: 计算1402姓名: 张田浩学号:1407010220一、需求分析1、本程序要求模拟下雨过程,要有雨点落下并有雨点落地时的水圈效果2、雨滴在屏幕出现的位置是随机的,雨圈的位置要和雨线对应,并且雨圈的大小要是随机的来增强效果3、雨要一直下,不受程序员控制二、总体设计1.利用easyx把TC下的"graphics.h"函数导入到了VC6.0中来实现绘图功能,并且调用”initgraphics”函数初始化图形模式 600*480 ,2.雨滴和雨圈可以看作两个结构体,而且雨圈的结构体可以嵌套咋雨滴的结构体中3.程序主要分为五大模块(1)主函数 void main( )(2)雨点产生模块 struct drop *creatDrop(void),void recreatDrop(struct drop *p),void creatRain(void)(3)雨点下落模块 void updateRainLineData(struct rainDrop *p),void drawRainLine(struct rainDrop *p),void clearRainLine(struct rainDrop *p),void rainDropDown(struct rainDrop *p)(4)水纹生成模块 void updateRainCircleData(struct rainDrop *p),void drawRainCircle(struct rainDrop *p),void clearRainCircle(struct rainDrop *p) (5)控制模块 void rain(void),void clearAll(void) 我的任务:负责雨点产生和下落模块及最后的调试,编写实习报告。

      三、详细设计 1.雨圈的结构体 struct rainCircle 雨点落下造成的水圈 { int x; 雨圈的圆心坐标 int y; int r; 水圈的半径 int curR; 中间过程水圈的半径 int rainCircleStep; 水圈每次扩张的增量 };2.雨线的结构体 struct rainDrop { int startX; 雨点开始的X值 int startY; 雨点开始的Y值 int endY; 雨点结束的Y值 int curX; 雨点降落中的X值 int curY; 雨点降落中的Y值 int rainLineStep; 雨线每次的增量 int rainLineLength; 雨线的长度 int status; 表示下落过程是否完成 struct rainCircle water; 嵌套的雨圈结构体 struct rainDrop *next; 用于创建动态链表的指针 };3.动态链表的创建和释放struct rainDrop *head;struct rainDrop *p1,*p2; int i; p1=p2=creatDrop(); head=p1; for(i=0;inext=p2; p1=p2; }在creatDrop函数中用malloc()动态分配内存4.雨线和雨圈的绘制与清除Setcolor()设定颜色,line()画线。

      出现时用白色画,让其消失就在原位置画一条黑线5.三个if-else判断的核心函数(1)整个下雨的控制过程rain(){创建rainDrop类的指针p让它指向头指针;While(键盘没有输入){if(p指到表尾) p指向头指针;else{If(status==0) 控制下雨;else 控制形成雨圈;}延时;指针指向指向下一个;}(2)控制下雨rainDropDown(){If(当前的雨线的y坐标大于等于终点坐标){擦除上一条雨线; Status=0;}else{擦除上一条雨线;更新雨线坐标;画新雨线;}}(3)画雨圈思路和画雨线一样6.随机的实现 使用”time.h”下的”rand”函数进行随机,对雨点雨圈的初始坐标,雨圈的半径,雨圈的扩张速度,延时时间进行随机7.主函数实现过程(1)配置屏幕(2)创建链表(3)模拟下雨过程(4)下雨结束,清除链表8.使用的几个关键库函数initgraphics();kbhit();Sleep();四、编码源代码如下: #include #include #include #include #include #include struct rainDrop *head; void initgraphics(void) { int gmode,gdriver; gdriver=DETECT; initgraph(&gdriver,&gmode,""); }int n = 100; //雨的数目 struct rainCircle //雨点落下造成的水圈 { int x; int y; int r; int curR; int rainCircleStep; //水圈的顺序 }; struct rainDrop { int startX; //雨点开始的X值 int startY; //雨点开始的Y值 int endY; //雨点结束的Y值 int curX; //雨点降落中的X值 int curY; //雨点降落中的Y值 int rainColor; //雨点的颜色 int rainLineStep; //雨线的顺序 int rainLineLength; //雨线的长度 int status; struct rainCircle water; struct rainDrop *next; }; struct rainDrop *creatDrop(void) { struct rainDrop *p; p=(struct rainDrop *)malloc(sizeof(struct rainDrop)); //动态分配内存 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->rainLineLength=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); } void recreatDrop(struct rainDrop *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->rainLineLength=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; } 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) //控制起始雨点的Y值 { p->curY+=p->rainLineStep; p->startY=p->curY-p->rainLineLength; } void drawRainLine(struct rainDrop *p) //画雨线 { setcolor(WHITE); line(p->startX,p->startY,p->curX,p->curY); } void clearRainLine(struct rainDrop *p) //以黑色表示雨线消失 { setcolor(BLACK); line(p->startX,p->startY,p->curX,p->curY); } void updateRainCircleData(struct rainDrop *p) //控制水圈的大小 { p->water.curR+=p->water.rainCircleStep; } void drawRainCircle(struct rainDrop *p) //画雨降落后的水圈 { setcolor(WHITE); 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 rainDropDown(struct rainDrop *p) //控制雨的路径 { if(p->curY>=p->endY) { clearRainLine(p); p->status=1; } else { clearRainLine(p); updateRainLineData(p); drawRainLine(p)。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.