Я пытаюсь начать игру на консоли, содержащей массив символов 20 на 40. Все символы "-" представляют фон по умолчанию для игрового поля, кроме символа "@", который представляет игрока в игре. Позиция игрока сохраняется в целочисленном массиве.
Пользователь может нажимать клавиши со стрелками для перемещения символа @. Я установил цикл для считывания нажатия клавиш, и после проверки того, что персонаж игрока не переместится за пределы массива, если он будет двигаться в этом направлении, он сначала устанавливает позицию курсора в положение, где находится игрок, и заменяет «@» на «-», обновляет позицию игрока, затем устанавливает курсор в новую позицию и записывает в «@».
По какой-то причине, когда я перемещаю персонажа вниз, влево или вверх (но не вправо), он удаляет символ «-», который был справа от предыдущей позиции игрока, например:
После отладки ошибка возникает сразу после cki = Console.ReadKey, поэтому что-то в действии нажатия клавиши - удаление символа, но я не могу понять, почему он это делает или как помешать этому. Кто-нибудь может предложить решение?
Вот код для цикла:
Dim cki As ConsoleKeyInfo
Console.CursorVisible = False
While True
'Reads keypress - **deleted character occurs after this line**
cki = Console.ReadKey
Select Case cki.Key
Case ConsoleKey.UpArrow
If playerPos(0) - 1 >= 0 Then
'Deletes playerChar, replaces it with boardChar
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(boardChar)
board(playerPos(0), playerPos(1)) = boardChar
'Changes player position along the vertical axis (-1)
playerPos(0) -= 1
'Rewrites the playerChar in the new position
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(playerChar)
board(playerPos(0), playerPos(1)) = playerChar
End If
Case ConsoleKey.DownArrow
If playerPos(0) + 1 < board.GetLength(0) Then
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(boardChar)
board(playerPos(0), playerPos(1)) = boardChar
'Changes player position along the vertical axis (+1)
playerPos(0) += 1
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(playerChar)
board(playerPos(0), playerPos(1)) = playerChar
End If
Case ConsoleKey.LeftArrow
If playerPos(1) - 1 >= 0 Then
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(boardChar)
board(playerPos(0), playerPos(1)) = boardChar
'Changes player position along the horizontal axis (-1)
playerPos(1) -= 1
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(playerChar)
board(playerPos(0), playerPos(1)) = playerChar
End If
Case ConsoleKey.RightArrow
If playerPos(1) + 1 < board.GetLength(1) Then
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(boardChar)
board(playerPos(0), playerPos(1)) = boardChar
'Changes player position along the vertical axis (+1)
playerPos(1) += 1
Console.SetCursorPosition(playerPos(1), playerPos(0))
Console.Write(playerChar)
board(playerPos(0), playerPos(1)) = playerChar
End If
End Select
End While