如何用borlandc++编写的流星雨C语言程序?(要用random函数)我百度的都看不懂啊~

如题所述

用 vc6编译:
1、建立Win32工程;
2、新建w32.cpp文件;
3、复制下列代码,然后编译,执行。

#include <Windows.h>
#include <math.h>
#include <time.h>
#include <stdio.h>
#define WND_CLASS TEXT("Win32NIGHT")
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE,LPSTR,int){
WNDCLASSEX wc={sizeof(WNDCLASSEX),CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW,WndProc,0,0,hInst, 0L, 0, \
(HBRUSH)(COLOR_BTNTEXT+1), 0L,WND_CLASS,0L};
wc.hCursor=LoadCursor(0,IDC_ARROW); // lest it is shown slow
RegisterClassEx(&wc);
DWORD sty = WS_VISIBLE| WS_OVERLAPPED | WS_CAPTION |WS_SIZEBOX | WS_SYSMENU|WS_MAXIMIZEBOX|WS_MINIMIZEBOX; //
HWND hWnd=CreateWindowEx(0, WND_CLASS, "Globe", sty, 100,10, 800, 600, 0,0,hInst,0);
MSG msg={0,0};
while(GetMessage(&msg,0,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnregisterClass(WND_CLASS,hInst);
return msg.wParam;
}
float Rnd() { float r=(float)rand()/RAND_MAX; return r; } // 0...1
class CMeteor{
public:
int x,y,vx,vy; // position, velocity
int size;
int life, Life; // life, life limit
public:
CMeteor(){x=50*Rnd(); y=200*Rnd(); vx=20+10*Rnd(); vy=5+10*Rnd(); size=4+4*Rnd(); life=0; Life=30+5*Rnd(); };
virtual ~CMeteor(){};
void move(HDC hdc){ SetPixel(hdc,x,y,0); SetPixel(hdc,x+1,y,0); SetPixel(hdc,x,y+1,0); SetPixel(hdc,x+1,y+1,0); SetPixel(hdc,x+1,y+2,0);
x+=vx; y+=vy; life++; if(life>Life){ life=0; x=50*Rnd(); y=200*Rnd(); return;}
SetPixel(hdc,x,y,0xFFFFFF); SetPixel(hdc,x+1,y,0xFFFFFF); SetPixel(hdc,x,y+1,0xFFFFFF); SetPixel(hdc,x+1,y+1,0xFFFFFF); SetPixel(hdc,x+1,y+2,0xFFFFFF);
} // move;
}; // CMeteor
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ){
static CMeteor met[10]; static bool bPause;
switch(msg){

case WM_CREATE:{ srand( (unsigned)time( NULL ) );
SetTimer(hWnd, 0x1, 10,0L); // 24帧/s, 1000/24 ~=42. 1000/40=25帧.
}break;

case WM_DESTROY: KillTimer(hWnd,0x1); PostQuitMessage(0); break;
case WM_TIMER:{ if(bPause) break;
HDC hdc=GetDC(hWnd);
for(int i=0; i<10;i++){
if(met[i].life<=met[i].Life) met[i].move(hdc);
}
ReleaseDC(hWnd,hdc);
}break; // WM_TIMER

case WM_KEYDOWN:{
switch(wParam){
case 'T':{ bPause=!bPause; }break;
}}break; // WM_KEYDOWN
default: break;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
温馨提示:答案为网友推荐,仅供参考
相似回答