Я пытаюсь написать игру Конвея о жизни на Visual Basic, но, похоже, есть проблема с кодом, который подсчитывает количество живых окружающих клеток. Код показан ниже:
Module Module1
Dim ScreenHeight As Integer = 30
Dim ScreenWidth As Integer = 30
Dim Field(ScreenWidth - 1, ScreenHeight - 1) As Boolean
Dim FieldBuffer(ScreenWidth - 1, ScreenHeight - 1) As Boolean
Sub Main()
Console.SetWindowSize(ScreenWidth, ScreenHeight)
Field(10, 9) = True
Field(10, 10) = True
Field(10, 11) = True
While True
Dim x = 0
While (x < ScreenWidth)
Dim y = 0
While (y < ScreenHeight)
Console.SetCursorPosition(x, y)
If ((x <> 0 And x <> ScreenWidth - 1) And (y <> 0 And y <> ScreenWidth - 1)) Then
Dim count = Field(x + 1, y) + Field(x - 1, y) + Field(x, y + 1) + Field(x, y - 1) _
+ Field(x + 1, y + 1) + Field(x - 1, y - 1) + Field(x - 1, y + 1) + Field(x + 1, y - 1)
count = count * -1
If (Field(x, y) = True) Then
If (count < 2) Then
FieldBuffer(x, y) = False
End If
If (count > 3) Then
FieldBuffer(x, y) = False
End If
If (count = 3 Or count = 2) Then
FieldBuffer(x, y) = True
End If
Console.BackgroundColor = ConsoleColor.Blue
Else
If (count = 3) Then
FieldBuffer(x, y) = True
End If
Console.BackgroundColor = ConsoleColor.Black
End If
Console.Write(count)
Else
Console.BackgroundColor = ConsoleColor.Red
Console.Write("X")
End If
y += 1
End While
x += 1
End While
Console.ReadKey()
Field = FieldBuffer
End While
End Sub
End Module
Код, который получает значения окружающих ячеек:
Dim count = Field(x + 1, y) + Field(x - 1, y) + Field(x, y + 1) + Field(x, y - 1) _
+ Field(x + 1, y + 1) + Field(x - 1, y - 1) + Field(x - 1, y + 1) + Field(x + 1, y - 1)
count = count * -1
Для первой итерации программы он возвращает правильные значения для структуры ячеек в массиве Field. Но на второй итерации после применения правил возвращаются не правильные значения, которые должны быть: 12321 11211 12321
Правила применяются к массиву правильно, потому что после первой итерации отображаемая структура является правильной. Эта ошибка также появлялась при наличии «Если (Поле (x, y) = true), то Count + = 1» для каждой позиции, окружающей ячейку.
Любая помощь будет оценена по достоинству, так как эта ошибка сводит меня с ума уже около 2 недель.