gpt4 book ai didi

vb.net - 基于网格的拼图棋盘游戏方 block 移除算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:35:04 25 4
gpt4 key购买 nike

Grid http://www.imagechicken.com/uploads/1264550987064245200.png

我有一个由一维整数数组表示的“samegame”网格。 0 到 63 表示 8x8 网格。

规则是两个或更多个相同颜色的方 block 可以通过点击它们来移除。 block 然后从上面滑下来。如果一列是空列,则其他列从侧面移入。

当有人点击底行的绿色 block 时,列应该从两侧滑入。黑线左侧的列向右滑动,黑线右侧的列向左滑动。所以在这种情况下,只有最右边的两列应该在移除绿色 block 后从右边滑到黑线。

我遇到的问题是设计一个合适的算法来在删除后进行折叠。

我目前的做法是从左到右测试每一列,看它是否为空。如果它是空的,那么我将任何列向左(如果在黑线的左侧)或向右(如果在黑线的右侧)滑动到空白列上,然后在我滑动的方向上重复此操作。

问题是,当第二个空列滑过第一个空列时,当两列为空时,这种方法会失败,然后例程从下一列继续进行,而不是将所有内容都打乱。

我想知道是否有比我正在采用的方法更简单的方法?

Public Sub CollapseEmptyColumns()

For x = 0 + 1 To 7 - 1
Dim EmptyColumn As Boolean = True
For y = 0 To 7

Dim BlockIndex As Integer = y * 8 + x
If Blocks(BlockIndex).BlockColor <> eBlockColor.None Then
EmptyColumn = False
Exit For
End If

Next

If EmptyColumn = True Then

If x < 4 Then ' less than 4 then slide from left

SlideColumns(x - 1, 0, 1)

Else ' greater or equal to 4 slide from right

SlideColumns(x + 1, 7, -1)

End If


End If

Next

End Sub

Private Sub SlideColumns(ByVal First As Integer, ByVal Last As Integer, ByVal Direction As Integer)

For x = First To Last Step -Direction

For y = 0 To 7

Blocks(y * 8 + (x + Direction)).BlockColor = Blocks(y * 8 + x).BlockColor
Blocks(y * 8 + x).BlockColor = eBlockColor.None

Next

Next

End Sub

最佳答案

从左到右检查前三列,然后从右到左检查最后三列:

Private Function EmptyColumn(x As Integer) As Boolean
For y As Integer = 0 To 7
If Blocks(y * 8 + x).BlockColor <> eBlockColor.None Then
Return False
End If
Next
Return True
End Function

Public Sub CollapseEmptyColumns()
For x = 1 To 3
If EmptyColumn(x) Then
SlideColumns(x - 1, 0, 1)
End If
Next
For x = 6 to 4 Step -1
If EmptyColumn(x) Then
SlideColumns(x + 1, 7, -1)
End If
Next
End Sub

关于vb.net - 基于网格的拼图棋盘游戏方 block 移除算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com