0

我现在就说清楚这是家庭作业。我不希望得到完整的答案,但欢迎他们。

我被分配在 Visual Basic 中制作一个 15 字谜题。这是游戏外观的示例(这是我到目前为止所拥有的):

一个普通的 15 益智游戏。

我需要帮助的是检查和移动图像。当我单击您在右下角看到的 PictureBox 1 时,它应该检查其下方、旁边和上方的图像,以查看该位置的图像是否为 My.Resources.NONE。(NONE 是我导入的 png 图像)。如果相邻单元格为 NONE,则两个图像将相互交换。每个 PictureBox 在地址处都有一个 Handler,所有的图像都在一个二维的 PictureBox 数组(4x4)中。

我已经为它设置了一个这样的子,但不知道在里面放什么。有什么建议么?

Private Sub mypic_Click(ByVal sender As Object, ByVal e As EventArgs)

End Sub

更新:

我做了更多的研究并弄清楚了一些事情。这是我目前的做法:

 Private Sub mypic_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim x, y, w, z As Integer
    ClickedPicture = DirectCast(sender, PictureBox)
    x = ClickedPicture.Left
    y = ClickedPicture.Top
    If ClickedPicture(x + 1, y).Image = Nothing Then
        ClickedPicture(x + 1, y).Image = ClickedPicture(x, y).Image
        ClickedPicture(x, y).Image = My.Resources.NONE
    End If
End Sub

我现在遇到的问题是它说 ClickedPicture 不能被索引,因为它没有默认属性。这到底是什么意思?

4

1 回答 1

0

我建议将您的显示与您的逻辑分开。不要移动图片框,只需更改它们显示的图像。使用整数 0 - 15 创建一个 4X4 数组。整数可以指示从图像数组中显示哪张图片。令索引 0 为空方格。然后,当您需要“移动”一个时,只需交换数组中的值。在表单的 OnPaint 方法中,循环遍历 4x4 数组并将 pictureBox Image 属性设置为正确的图像。

您可以在语言规范的第 9.7.3 节中找到有关 VB 的默认属性的信息:

9.7.3 Default Properties
A property that specifies the modifier Default is called a default property. Any type 
that allows properties may have a default property, including interfaces. The default 
property may be referenced without having to qualify the instance with the name of the 
property. 

我认为 ClickedPicture 是一个 PictureBox。您正在尝试使用数组表示法调用它:ClickedPicture(x + 1, y) 但由于它不是数组,因此它会尝试查看是否存在可以获取索引的 Default 属性并且没有。

于 2013-04-25T15:01:57.423 回答