科技行者

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

知识库

知识库 安全导航

至顶网软件频道基础软件VB实战进阶之拼图游戏

VB实战进阶之拼图游戏

  • 扫一扫
    分享文章到微信

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

本文以一个拼图益智小游戏的原形为实例,介绍VB编程的一些技巧。

作者:段炼 来源:soft6 2008年5月14日

关键字: 游戏 拼图 VB vb.net Windows

  • 评论
  • 分享微博
  • 分享邮件
许多VB初学者都有这样的感觉,VB基本概念的学习很容易入门,但实际编程时却常常感到无从着手。因此,从实例学编程,对提高初学者的水平,是十分有益的。

  本文以一个拼图益智小游戏的原形为实例,介绍VB编程的一些技巧。

游戏介绍:

  这是一个简单的益智拼图游戏。如图一所示,窗体上有顺序排列有九张图片,图片1-8显示数字1-8,第九张为空白图片。点击“开局”按钮后,程序随机排列九张图片(如图二),游戏者单击与空白图片相邻的图片可以交换该图片与空白图片的位置。游戏者需要开动脑筋,移动并重新排列九张图片的位置,直至恢复出开局前所示的排列顺序为赢。

(图一)

(图二)

准备工作:

用Photoshop或其它图像处理软件制作九个图像文件P1.jpg,P2.jpg……P9.jpg,除一张为空白外,图片上依次显示1-8个数字。

程序编写:

1、新建一Project,在Form1上放置CommandButton类型的控件Command1,将Caption属性设置为“开局”。

2、在窗体中放置一PictureBox控件,Name为Picture1。在该控件有焦点时,从Edit菜单中选择Copy。然后,再从Edit菜单中,选择Paste。这时,VB会显示一个对话框,确认是否要创建一个控件数组,显示Yes以确认该动作。此时控件被赋予的索引值为1。此前画的第一个PictureBox控件的索引值为0。重复此过程放置其余七个控件数组成员。

将PictureBox1(0)—PictureBox1(8)的Picture属性依次设为P1.jpg、P2.jpg……P9.jpg。

技巧提示: 用控件数组增加控件比单纯将多个同类型的控件加到窗体上占用更少的资源。如果想让几个控件共享代码,控件数组也很有用。每个新的数组元素的索引值都对应于该元素加入控件数组时的顺序。当控件以这种方式加入时,大多数直观的属性(如高度、宽度和颜色)都被从控件数组的第一个控件中复制到新控件中。

  显然,在程序中我们需要记录这样一些数据:每次移动某一图片后所有图片的排列顺序、本次被点击的图片位置、空白图片的位置、移动次数等。因此,在程序声明部份定义:

Option Explicit

Dim ImageID(8) As Integer ’记录图片排列顺序的数组

Dim Position As Integer ’被点击的图片位置

Dim XPosition As Integer ’空图片的位置

Dim MoveTimes As Integer ’记录移动次数

Dim CalPosition As Integer ’用于计算位置

Dim Started As Boolean

Dim Win As Boolean

Dim pic(8) As Picture

双击Form1,加入代码:

Private Sub Form_Load()

Dim i As Integer

For i = 0 To 8

Set pic(i) = Picture1(i).Picture

Next

End Sub

技巧提示:将位图、图标、元文件、增强元文件、GIF 和 JPEG 等各类图像赋值给具有 Picture 属性的对象,可以用 Picture 对象来操纵它们。


 

[下一页]


 

“开局” 按钮被点击后,要随机重排九张图片的位置。双击“开局”按钮,加入代码:

Private Sub Command1_Click()

Dim i As Integer

Dim Temp(8) As Integer

Dim ChosenNumber As Integer

For i = 0 To 8

Temp(i) = i

Next

Randomize (Timer)

For i = 8 To 0 Step -1

ChosenNumber = Int(i * Rnd)

ImageID(8 - i) = Temp(ChosenNumber)

Temp(ChosenNumber) = Temp(i)

Next

For i = 0 To 8

Picture1(i).Picture = pic(ImageID(i))

If ImageID(i) = 8 Then XPosition = i

Next

Started = True

MoveTimes = 0

End Sub

技巧提示:本段的核心是无重复随机数列的产生。这一技巧在编程中十分有用:比如说纸牌游戏中的洗牌过程、图像处理中图像的淡化、软件中常用到的每日一帖等都可用到此技巧。

最后,是游戏中对图片点击事件的处理:根据游戏者点击的位置判断是否要重画图片,是否已经成功重排所有图片:

Private Sub Picture1_Click(Index As Integer)

Dim i As Integer

Dim Response As Integer

Position = Index

If Started = False Then Exit Sub

If ((Position <> 0) And (Position <> 3) And (Position <> 6)) Then

CalPosition = Position - 1

If (CalPosition = XPosition) Then CVale

End If

If ((Position <> 2) And (Position <> 5) And (Position <> 8)) Then


 

[下一页]


 

CalPosition = Position + 1

If (CalPosition = XPosition) Then CVale

End If

If (Position >= 3) Then

CalPosition = Position - 3

If (CalPosition = XPosition) Then CVale

End If

If (Position <= 5) Then

CalPosition = Position + 3

If (CalPosition = XPosition) Then CVale

End If

Win = True

For i = 0 To 7

If (ImageID(i) <> i) Then Win = False

If Win = False Then Exit For

Next

If (Win = True) Then

MsgBox "恭喜恭喜!你很聪明。" & vbCrLf & "(共移动" & MoveTimes & "次)", vbOKOnly, "恭喜!"

Started = False

End If

End Sub

在程序声明部分加入代码:

Sub CVale()

Picture1(CalPosition).Picture = Picture1(Position).Picture

ImageID(CalPosition) = ImageID(Position)

Picture1(Position).Picture = pic(8)

ImageID(Position) = 8

XPosition = Position

MoveTimes = MoveTimes + 1

End Sub

Cvalue过程重新排列图片,并记录新的图片排列顺序。

技巧提示:这是程序的核心部分。但是其原理却是非常简单的:单击图片后,程序根据被点击PictureBox对象的位置和空白图片的位置,判断、交换图片的位置,然后将新的位置记录到ImageID数组中。根据ImageID数组中记录的顺序即可判断游戏者是否取得成功。

至此,我们已经可以按F5键运行这个程序来试试自己的聪明才智究竟如何了。

当然,我们这里介绍的只是这个益智小游戏的原型。有兴趣的网友,只需简单改动,就可将其变为一个N X M (N,M 不小于3)图片的形式。如果再加上点“英雄榜”之类的功能,就能DIY出一个象模象样的小游戏了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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