用VB来“下雪”

Author: EastWood Date: 2001年 22期

?牐犗嘈糯蠹叶訢irectX一定不会陌生吧,目前,市面上很多3D游戏都支持DirectX。这段程序虽然简单,也可以不用这种方式就可达到同样的效果,但其主要目的是向大家介绍DirectX的编程技术,让大家初步了解DirectX的编程方式,起到一个抛砖引玉的作用。
  ?牐犠罱杂肰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简体中文版通过。??