资源简介
graphics.h的头文件,C++编写的模拟流体运动
代码片段和文件信息
///////////////////////////////////////////////////
// 程序名称:流体(Liquid)
// 编译环境:Visual C++ 6.0 / 2010,EasyX 20120404(beta)
// 原 作 品:http://spielzeugz.de/html5/liquid-particles.html (HTML5)
// 移植作者:krissi
// 最后修改:2012-4-5
//
#include
#include
#include
#define WIDTH 1024 // 屏幕宽
#define HEIGHT 576 // 屏幕高
#define NUM_MOVERS 600 // 小球数量
#define FRICTION 0.96f // 摩擦力
// 定义小球结构
struct Mover
{
COLORREF color; // 颜色
float x y; // 坐标
float vX vY; // 速度
};
// 定义全局变量
Mover movers[NUM_MOVERS]; // 小球数组
int mouseX mouseY; // 当前鼠标坐标
int mouseVX mouseVY; // 鼠标速度
int prevMouseX prevMouseY; // 上次鼠标坐标
bool isMouseDown; // 鼠标左键是否按下
DWORD* pBuffer; // 显存指针
// 初始化
void init()
{
// 初始化小球数组
for (int i = 0; i < NUM_MOVERS; i++)
{
movers[i].color = RGB(rand() % 256 rand() % 256 rand() % 256);
//坐标
movers[i].x = WIDTH * 0.5;
movers[i].y = HEIGHT * 0.5;
//速度
movers[i].vX = float(cos(float(i))) * (rand() % 34);
movers[i].vY = float(sin(float(i))) * (rand() % 34);
}
// 初始化鼠标变量,位于屏幕中央
mouseX = prevMouseX = WIDTH / 2;
mouseY = prevMouseY = HEIGHT / 2;
// 设置随机种子
srand((unsigned int)time(NULL));
// 获取显存指针
pBuffer = GetImageBuffer(NULL);
}
// 全屏变暗 50%
void darken()
{
for(int i = WIDTH * HEIGHT - 1; i >= 0; i--)
if (pBuffer[i] != 0)
pBuffer[i] = RGB(GetRValue(pBuffer[i]) >> 1 GetGValue(pBuffer[i]) >> 1 GetBValue(pBuffer[i]) >> 1);
}
// 绝对延时
void delay(DWORD ms)
{
static DWORD oldtime = GetTickCount();
while(GetTickCount() - oldtime < ms)
Sleep(1);
oldtime = GetTickCount();
}
// 绘制动画(一帧)
void run()
{
darken(); // 全屏变暗
mouseVX = mouseX - prevMouseX;
mouseVY = mouseY - prevMouseY;
prevMouseX = mouseX;
prevMouseY = mouseY;
float toDist = WIDTH * 0.86f;
float stirDist = WIDTH * 0.125f;
float blowDist = WIDTH * 0.5f;
for(int i = 0; i < NUM_MOVERS; i++)
{
float x = movers[i].x;
float y = movers[i].y;
float vX = movers[
- 上一篇:禁忌搜索算法30城市TSP问题C++源代码
- 下一篇:c++编写的十字路口交通灯程序
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- Qt画图工具源码(qgraphics draw)
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
评论
共有 条评论