0

我正在尝试在 vb 中重新创建游戏 2048,并且我正在努力弄清楚如何让数组中的值一起滑动。

在我完成全部任务之前,我正在尝试在一个单维数组中执行此操作

例如,如果我有一个数组

[0,2,0,4]

我需要弄清楚如何逐步遍历每个数字,检查其后面是否有 0,以便数组变为

[2,4,0,0]

但我正在努力弄清楚如何检查数组中数字后面的所有值

我现在只是在尝试向左滑动功能,这样我就可以慢慢来,有没有人知道我怎么能做到这一点?

4

3 回答 3

1

您可以使用 LINQ 执行此操作:

Dim a = {0, 2, 0, 4}
a = a.Where(Function(x) x <> 0).Concat(a.Where(Function(x) x = 0)).ToArray()

Console.WriteLine(String.Join(",", a)) ' outputs 2,4,0,0

第一个Where获取所有非零元素。将Concat结果与(所有零元素)连接起来,从而保持数据的长度,.ToArray()并将结果转换回数组。

于 2017-01-02T20:43:20.147 回答
1

For Each仅循环数组的旧经典。

Dim previousRow As Integer() = { 0, 2, 0, 4 }
Dim newRow As Integer() = { 0, 0, 0, 0 }

Dim newRowIndex As Integer = 0
For Each previousValue In previousRow 
    If previousValue = 0 Then Continue For

    newRow(newRowIndex) = previousValue
    newRowIndex += 1
Next

将返回{ 2, 4, 0, 0 }

于 2017-01-02T20:39:24.843 回答
0

伪代码:

dim arr1, arr2,

foreach [value in array]
    if ( value is not 0 ) 
    then add to arr1
    else add to arr2

concat arr1, arr2
于 2017-01-04T12:48:05.610 回答