C语言程序设计今天下雨了吗,C语言编程模拟下雨by张田浩.doc

实用文档

标准

程序设计实习报告

题目: 模拟下雨

学院: 计算机与通信工程学院

专业: 计算机科学与技术

班级: 计算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.主

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值