資源簡介
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? {
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? 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? {
float?x??=?movers[i].x;
float?y??=?movers[i].y;
float?vX?=?movers[
- 上一篇:禁忌搜索算法30城市TSP問題C++源代碼
- 下一篇:c++編寫的十字路口交通燈程序
評論
共有 條評論