科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件利用Visual Basic开发飞船着陆游戏

利用Visual Basic开发飞船着陆游戏

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

VB不是一个常用的游戏开发工具,不过只要巧妙地运用API知识,就可以做所有的事情。

作者:刘涛 来源:天极网 2007年10月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
二、获取随机数

  微软提供的Rnd函数将返回一个在(0,1)之间的随机数,然而,在我们得到一个随机数之前,建议先发出一个"Randomize Timer"命令,timer函数返回午夜0点以来时间所经历过的秒数,Randomize命令设置了一个随机数产生器的种子,不要研究其背后的深邃的原理,只要明白这个命令可以使我们每一次都可以得到一个不同的随机数就可以了。这也意味着每次星星的图案都不一样。为了进一步说明上面的意思,可以试着使用一个实际的数字代替’Timer’,然后研究一下星星的图案,可以发现每次运行程序星星的图案都是一样的。

  让我们现在试着绘制包含一些星星的图案。首先开始一个新的工程,在窗体上分别放置一个图片框和一个命令按钮,在按钮的click事件中添加以下代码:

Private Sub Command1_Click()
 Randomize Timer
 Picture1.ScaleMode = vbPixels
 For starx = 0 To Picture1.ScaleWidth
  For stary = 0 To Picture1.ScaleHeight
   If Rnd < 0.005 Then
    SetPixelV Picture1.hdc, starx, stary, vbYellow
   End If
  Next
 Next
End Sub

  运行你的程序,然后单击命令按钮,你将看到一个可爱的星星图案!

  现在,我们需要做的最后一件事是为我们的飞船着陆准备一个平面,我们仍将坚持使用VB标准函数,而不使用任何API函数。这个函数的名字是Line,考虑到我们想要画的是一个方框,所以使用它看上去就有点奇怪,但不要介意,微软的开发人员已经重新对它进行了设计。
这个函数的具体用法是:

object.Line [Step] (x1, y1)-[Step] (x2, y2), [color], [B[F]]

  它看上去很复杂,但可以认为它仅画一根从点(x1,y1)到 (x2,y2),且具有颜色的直线,如果声明了"B",将画一个方框,而不是一个直线,如果额外说明了"F",这个方框将被填充。

  我们的星空将仅仅是一个令人生厌的平面,但是你可以添加一些额外的功能,代码如下:

Picture1.Line (0, Picture1.ScaleHeight - 30)- (Picture1.ScaleWidth, Picture1.ScaleHeight), _
vbWhite, BF

  虽然结果不是很壮观,但是可以添加到你的星空代码当中,如果你喜欢看到它们。

  由于我们要使用定时器来绘制和移动飞船,因此,通过适当的方式来改变飞船的速度将非常明智。在VB中没有检测是否有某一个键被按下的命令,所以我们必须依靠API函数:GetAsyncKeyState,如果规定的键没有按下,这个函数将返回0,否则将返回一个非零值。该函数声明如下:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_DOWN = &H28

  对于这个函数的vKey参数,代表某一个按键的数值将传递给它,这个数值被称为"虚拟键盘码",键盘上的每一个键,包括左右方向键,"ctrls"和"alts"键都有一个"虚拟键盘码"。我们将使用向下的方向键作为飞船的推进器

  下面是摘录的一个小片段代码:

If GetAsyncKeyState(VK_DOWN) <> 0 Then
 ’ Do thrust stuff
 Beep
End If

  尽管上述代码不长,但它给出了一个基本思路。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章