Как мне изменить эту строку? - PullRequest
1 голос
/ 19 апреля 2011

Добрый день,

Я не знаю, как описать мою проблему (что больше похоже на вызов), но я сделаю все возможное.

Я работаю над текстомна основе игры и когда ваш персонаж движется, вы получаете информацию, такую ​​как имя комнаты и ниже, описание (в примере Lorem ipsum), которое представляет собой массив строк.Я хотел бы знать, как добавить символы к нему.Я на самом деле пытаюсь отобразить миникарту из символов ASCII.См. Пример кода второго блока.

From:

Room Name Here
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempus
orci diam. Curabitur hendrerit augue et lorem vulputate semper. Nullam
aliquam eleifend sapien nec bibendum. Donec accumsan leo eu orci
elementum semper in mollis metus. Ut ipsum diam, suscipit vel bibendum
non, congue eu nisi. Donec justo dolor, scelerisque nec fringilla nec,
aliquet sit amet elit. Morbi elementum pharetra odio, nec accumsan
velit lacinia quis.

[Exits: none]   [Doors: none]

Into:

Room Name Here
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis +-----+
tempus orci diam. Curabitur hendrerit augue et lorem vulputate  |  #  |
semper. Nullam aliquam eleifend sapien nec bibendum. Donec      |#-#-#|
accumsan leo eu orci elementum semper in mollis metus. Ut ipsum |  #  |
diam, suscipit vel bibendum non, congue eu nisi. Donec justo    +-----+
dolor, scelerisque nec fringilla nec, aliquet sit amet elit. Morbi
elementum pharetra odio, nec accumsan velit lacinia quis.

[Exits: none]   [Doors: none]

Сама игра сделана в VB.NET, но решение впсевдокод также приветствуется.

Кроме того, длина каждой строки приблизительно равна максимальной длине, которую она должна быть.

Спасибо, ребята!

Редактировать: Требуемый вывод должен быть массивом строк, потому что эти данные позже отправляются клиенту, подключенному с помощью сокетов.

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Если мы используем предположение, что длина вашей строки составляет 80 символов, ограничьте максимальную длину вашей текстовой строки до 70 символов.Если фактическая длина меньше 70, добавьте разницу в пробелах в начало данных карты, которые вы хотите добавить.Это также зависит от использования моноширинного шрифта.

Dim LineOfText As String = "This is a test text"
Dim LineOfMap As String = "+------+"
Dim newLine As String

newLine = LineOfText & LineOfMap.PadLeft(80 - LineOfText.Length)

edit: добавлены массивы, использован Courier New Font

Dim LineOfText(6) As String
Dim LineOfMap(4) As String

Public Sub CreateArray()

    LineOfMap(0) = "+-----+"
    LineOfMap(1) = "|  #  |"
    LineOfMap(2) = "|#-#-#|"
    LineOfMap(3) = "|  #  |"
    LineOfMap(4) = "+-----+"

    LineOfText(0) = "  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis tempus"
    LineOfText(1) = "orci diam. Curabitur hendrerit augue et lorem vulputate semper. Nullam"
    LineOfText(2) = "aliquam eleifend sapien nec bibendum. Donec accumsan leo eu orci"
    LineOfText(3) = "elementum semper in mollis metus. Ut ipsum diam, suscipit vel bibendum"
    LineOfText(4) = "non, congue eu nisi. Donec justo dolor, scelerisque nec fringilla nec,"
    LineOfText(5) = "aliquet sit amet elit. Morbi elementum pharetra odio, nec accumsan"
    LineOfText(6) = "velit lacinia quis."

    Dim x As Integer

    For x = 0 To 4
        LineOfText(x) = LineOfText(x) & LineOfMap(x).PadLeft(80 - LineOfText(x).Length) & vbCrLf
    Next
    For x = 0 To 6
        Label1.Text = Label1.Text & LineOfText(x)
    Next
End Sub

Edit: вы можете создать функцию и увеличить массив, есликоличество строк меньше 5, чтобы убедиться, что у вас есть место для карты.

Public Function CreateArray(text() As String, map() As String) as String()

    Dim x As Integer
    If text.Length < map.Length Then
        For x = 0 To map.Count - 1
            If x < text.Count - 1 Then
                text(x) = text(x) & map(x).PadLeft(80 - text(x).Length) & vbCrLf
            Else
                Array.Resize(text, text.Count + 1)
                text(x) = map(x).PadLeft(80) & vbCrLf
            End If

        Next
   Else
        For x = 0 To map.Count - 1
            text(x) = text(x) & map(x).PadLeft(80 - text(x).Length) & vbCrLf
        Next
   End If

   return text

End Sub
1 голос
/ 19 апреля 2011

Похоже, вы пытаетесь собрать содержимое окна в одну длинную строку?

IMO, вам лучше разделить окно консоли на логические области, то есть одну для текста, одну для карты комнаты, а область выходов / дверей может быть отдельной областью или одной.

Существуют escape-последовательности, которые вы можете отправить в окно терминала / консоли для изменения положения курсора, или есть библиотеки, которые могут сделать для вас подобные вещи, в частности [n] curses в Unix / Linux - ищите что-то подобное для Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...