基于C语言的池塘夜降彩色雨设计
资源下载地址:https://download.csdn.net/download/sheziqiong/85897617
资源下载地址:https://download.csdn.net/download/sheziqiong/85897617
一、题目
[问题描述]
设计一个程序,演示美丽的“池塘夜雨”景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜。
[基本要求]
(1)雨点的空中出现位置、降落过程的可见程度、入水位置、颜色、最大水圈等等,都是随机确定的;
(2)多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上。
二、开发环境
硬件:PC机
软件:Microsoft Visual Studio 2010
三、题目需求分析
根据题目可知需要设计一个程序,程序运行后,有美丽的池塘夜晚景象,天空飘着彩色的雨,落在池塘时有涟漪产生。而雨点的空中出现位置、入水位置、颜色、最大水圈等等,都是随机确定的。画面中有按钮可以控制雨点数,雨点速度等参数,为了能在画出雨点下落的同时能响应窗口的控件的事件,则需要使用新的线程来画下落的雨点。下落的雨点数可以增减,则需要使用双向的链表来保存雨点的各种状态信息(坐标、大小、角度、涟漪半径等)。每次生成雨点,都在指定的范围内随机出相应的数据,然后每次画完一帧雨点,自增雨点的坐标值或涟漪半径。
四、概要设计
1、数据类型的定义
//雨点类型定义
typedef struct
{COLORREF color;//雨点颜色int x,y;//初始坐标int len;//雨点大小float angle;//雨点角度int speed;//落下速度int thick;//雨点粗细int radius;//涟漪半径
}droplet;//雨点类型//雨的双向链表定义
struct dropletchain
{droplet *data;//数据域struct dropletchain *pre,*next;//指针域
};
2、主程序的流程
3、各模块之间的调用关系
五、详细设计
主程序和其他模块的伪码算法
static UINT onThread(LPVOID wParam):线程函数
强制转换wParam为当前窗口实例的指针->绘图方法。
void initDroplet(droplet *droplet):初始化雨点
随机雨点各个参数
void doThread()
获取画布
while(1)
画背景->读取链表->判断雨点是否到达底部并画雨点或涟漪->自增雨点的坐标或涟漪的半径->sleep延迟
afx_msg void OnBnClickedButton1():退出按钮的实现
afx_msg void OnBnClickedButton2():暂停按钮
afx_msg void OnDeltaposSpin(NMHDR *pNMHDR, LRESULT *pResult):雨点数控制按钮
if 增加雨点数在链表尾部添加雨点->把尾部指针指向新结点->初始化新的雨点
elseif 雨点数剩下一滴弹出窗口警告else删除尾部指向的结点->把尾部指针指向前一个结点
afx_msg void OnReleasedcaptureSlider(NMHDR *pNMHDR, LRESULT *pResult):雨点速度滑动条
修改窗口成员变量延迟时间的值
六、调试分析
1、调试过程遇到的问题及解决
1.1 问题:雨点的涟漪使用画圆弧的方法画出来时会带有一根奇怪的线。
解决方法:通过画圆圈的方法画出来,但是却是实心的圆,然后还需要设置内画笔为NULL才可以画空心的圆。
1.2 问题: 雨点下落及产生涟漪时,经常会跑到画布之外的地方。
解决方法:在产生的涟漪自增其半径后,计算下次绘制涟漪时最大的范围是否会超过画布的范围,若超过了则重新“生成”雨点。
1.3 问题:静态线程内不能操作窗口。
解决方法:使用适配的方法,把窗口的实例指针传到线程中然后通过新的线程来执行原来实例中的绘图方法即可。
1.4 问题:初始雨点太少,雨点太短太粗不好看,颜色也太少,还有背景颜色不协调等。
解决方法:修改初始雨点数,雨点线条长度,在电脑的画图里调配颜色再找到比较合适的颜色,修改到最终差不多看着比较协调了。
2、经验和体会
由于vs没有TC中的graphics.h这个图形库,上网查了下,可以使用C++的MFC完成图形的绘制及实现题目要求的下雨的景象,由于没接触过MFC,因而由此简单了解了其使用方法及一些简单的按钮实现功能。经过这个课程设计,大致了解windows的消息处理机制,visual studio的Debug使用。
七、用户使用说明
1、 运行程序,可以看到程序的界面如图所示:
2、 点击雨点数上边的按钮,可以增加雨点数
3、 点击雨点数下边的按钮,可以减少雨点数,当雨点数为1时,出现提示,不能继续减少。
4、 雨点速度滑动条可以控制雨下落的速度,向右则变快,向左则变慢
5、 点击暂停按钮,则整个画面暂停,按钮名称变为“恢复”
6、 点击恢复按钮,则画面开始继续下雨,按钮名称变为“暂停”
7、 点击退出按钮,则退出程序,需重新运行程序才能开始下雨
资源下载地址:https://download.csdn.net/download/sheziqiong/85897617
资源下载地址:https://download.csdn.net/download/sheziqiong/85897617
基于C语言的池塘夜降彩色雨设计相关推荐
- C语言——池塘夜降彩色雨
池塘夜降彩色雨 设计一个程序,演示美丽的"池塘夜雨"景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜. (1)雨点的空中出现位置.降落过程的可见程度.入水位置.颜 ...
- 池塘夜降彩虹雨C语言数据结构实验(免积分下载+超详细注释)
实验题目 设计一个程序,演示美丽的"池塘夜雨"景色:色彩缤纷的雨点飘飘洒洒地从天而降,滴滴入水有声,溅起圈圈微澜. 操作环境和条件 VS2017,easyX图形库 代码 #incl ...
- c语言六位抢答器课程设计,基于c语言单片机8位竞赛抢答器设计课程设计.docx
基于c语言单片机8位竞赛抢答器设计课程设计 课程设计报告课程名称:单片机课程设计报告题目:8位竞赛抢答器的设计学生姓名:所在学院:信息科学与工程学院专业班级:学生学号:指导教师:2013 年12月25 ...
- c语言点餐系统毕业设计任务书,毕业设计(论文)-基于c语言的智能点餐系统的设计与实现.doc...
综合实践(论文) 题 目 基于C语言的智能点餐系统的设计与实现 学 院 通信与电子工程学院 专业班级 学生姓名 指导教师 成 绩 2013年 月 日 continually developing an ...
- 基于VHDL语言的8路彩灯控制器的设计_kaic
摘 要 伴随着我国电子科学技术的发展,彩灯越来越多地被融入到现代生活中的各式各样的景观中,彩灯作为一种装饰生活的观赏工具,不仅满足了人们视觉上的享受和娱乐,同时受关注的还有彩灯的花式花样.创意.节能 ...
- 基于C语言的贪吃蛇游戏开发与设计
文章目录 前言 一.背景知识 二.实验分析和理解 三.头文件 四.设计流程 五.流程图 六.算法设计 (1)相关变量 (2)创建链表 (3)随机出现食物并记录食物出现的坐标 (4)绘制初始界面和游戏地 ...
- python收集数据程序_基于Python语言的互联网数据收集软件的设计
软件建立所需的工具及其版本 编写环境与 IDE Python3.5.2 Windows10 PyCharm 2016.3 Sublime Text3 第三方库与版本号 Requests 2.12.1 ...
- c语言编写excel程序,基于C语言的Excel核价程序的设计与实现
Excel是财务工作的常用工具,但是对于复杂的函数操作,对于一些不熟悉计算机编程知识的财务人员是一件比较头疼的事情.笔者结合C语言对Excel文件的OLE操作函数,开发出的应用程序简单易用,解决了财务 ...
- 基于C语言的局域网飞鸽传书软件设计与实现
摘 要 网络通讯在当今已经不算新鲜事物,但大多数网络通讯都需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源.遭遇到网络攻击.传播的病毒.破坏防御系统 ...
最新文章
- python画折线图详解-利用python画出折线图
- TP5 实现微信支付和支付宝支付
- 图解Hadoop hdfs 管理元数据的机制
- 定义一个1 1=11 用c语言什么输出来,问题 A: C语言11.1(示例代码)
- c语言判断字符串是不是回文_LeetCode 热题 HOT 100 5. 最长回文子串
- c语言枚举法求满射函数,实变函数论讲义
- python java go 区别 一句话概括
- MYSQL入门(一)
- Mysql授权root账户允许远程连接访问
- tomcat热部署(springboot项目)
- 计算机视觉教程1-3:图解透视几何原理(灭点、灭线)
- Systrace 解析
- 小程序优购商城项目总结
- 一个人的隔空喊话(于2012-08-12nbsp;0…
- cv2.imread默认情况下读取的是彩色图片
- 昆虫大战电子计算机软件,风雨的昆虫大战AI双图版
- 春节感悟 - 快递延误的售后问题
- Chart.js使用及ajax获取数据
- 我为什么要学习Linux?
- 人际关系不仅要“存”,更要“激活”!