用VB来“下雪”
?牐犠罱杂肰B编写DirectX7.0游戏很感兴趣。上次看到一个游戏中下雪的情形,于是自己做了这么一个下雪的小程序。其实原理很简单,就是在一个黑色Form上随机出现一些白点作为雪花,然后控制它们下移,循环执行就模拟出这么一幅下雪的情景了。好,下面就跟我来实践一下吧!
?牐?1.新建一个工程文件,点击菜单“工程/引用”选项,在“Object Library”列表中会有一项:DirectX 7.0 For Visual Basic Type Library 列表项,这个就是DirectX7.0 VB类库,选中该项,再选“ok”按钮,就可以将库加入工程文件中。
?牐?2.点击菜单“工程/添加”模块项,弹出的窗体中选中“模块”项,再选“打开”按钮,添加了Module1,双击它加入如下代码:
?牐燚eclare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long '调用API函数控制鼠标
?牐燩ublic Const spi_screensaverrunning = 97
?牐燚eclare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ?煟˙yVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long '调用API函数来禁用/使用“Ctrl+Alt+Del”组合键,这样可以作成屏保程序。
?牐犚尤胝庑┐肟梢源蚩猇B自带的“API文本查看器”程序,找到ShowCursor和SystemParametersInfo函数,然后复制过来,粘贴就可以了。
?牐?3.把Form1的BackColor属性设为黑色。双击添加下面这些代码:
?牐燚im Xiaxue(1000,2),Sumu As Long
?牐燚im DX As New DirectX7
?牐牐Ы?立一个DirectX7对象
?牐燚im DDraw As DirectDraw7
?牐牐Ы?立DirectDraw对象
?牐燩rivate Sub Form_Load()?煟?
?牐燭emp = ShowCursor(0)??
?牐牐б厥蟊?
?牐燬et DDraw = DX.DirectDrawCreate("")??
?牐燚Draw.SetCooperativeLevel Me.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN '全屏显示
?牐燙all SystemParametersInfo?煟╯pi_screensaverrunning,True, ByVal 1&,0)?? '禁用“Ctrl+Alt+Del”组合键
?牐燜orm1.Show
?牐燚oEvents
?牐燫andomize
?牐燬umu = 400
?牐燜or J = 1 To Sumu
?牐燲iaxue(J,0) = Int(Rnd*Form1.Width)??
?牐燲iaxue(J,1) = Int(Rnd*Form1.Height)??
?牐燲iaxue(J,2) = 15 +(Rnd*5)??
?牐燦ext J
?牐燚o While Not (DoEvents = 0)??
?牐燜or LS = 1 To 10
?牐燜or I = 1 To Sumu
?牐燨ldX = Xiaxue(I,0):OldY = Xiaxue(I,1)??
?牐燲iaxue(I,0)= Xiaxue(I,0)+ Xiaxue(I,2)??
?牐營f Xiaxue(I,0)> Form1.Height Then
?牐燲iaxue(I,0) = 0: Xiaxue(I,2)= 15 +(Rnd*20)??
?牐燲iaxue(I,0) = Int(Rnd*Form1.Width)??
?牐燨ldX = 0:OldY = 0
?牐燛nd If
?牐燙oloury = 8*(Xiaxue(I,2)- 10): Coloury = 60 + Coloury
?牐燩Set (OldX,OldY),QBColor(0)??
?牐燩Set (Xiaxue(I,0), Xiaxue(I,0)), RGB(Coloury,Coloury,Coloury)??
?牐燦ext I
?牐燦ext LS
?牐燣oop
?牐燛nd
?牐燛nd Sub
?牐燩rivate Sub Form_KeyPress(KeyAscii As Integer)??
?牐營f KeyAscii = 27 Then
?牐牐О碋SC键退出程序
?牐燭emp = ShowCursor(1)??
?牐牐?显示鼠标
?牐燙all SystemParametersInfo(spi_screensaverrunning,False,ByVal,1&,0)??
?牐牐Щ指词褂谩癈trl+Alt+Del”组合键
?牐燯nload Me
?牐燛nd
?牐燛nd If
?牐燛nd Sub
?牐牥碏5运行看看效果怎么样。哈哈,还真看到了一种久违的下雪情景。以上程序在Windows 98 VB5.0简体中文版通过。??