实用文档
标准
程序设计实习报告
题目: 模拟下雨
学院: 计算机与通信工程学院
专业: 计算机科学与技术
班级: 计算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;i
{
p2=creatDrop();
p1->next=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.主