2017-01-12 6 views
0

Я делаю игру в блэкджек и хочу показывать карты рядом друг с другом, когда игрок их рисует. У меня есть карты, сохраненные в виде строки в пределах объекта карты и строки выглядят вроде этого я не мог понять, как на самом деле положить его здесь:Выравнивание нескольких строк строки C# консольное приложение

public void CreateDeck() 
    { 
     myDeck[0] = new Card(1, "hearts", @" 
______________ 
| A   | 
|    | 
|    | 
|    | 
| HEARTS | 
|    | 
|    | 
|   A | 
|______________|", @" 
______________ 
|//////////////| 
|//////////////| 
|//////////////| 
|//////////////| 
|//////////////| 
|//////////////| 
|//////////////| 
|//////////////| 
|//////////////|"); 

Туз сердец в основном то, что я хотел для вывода. Я могу выводить карты, но каждый раз, когда я выводить вторую карту он переходит на новую строку, а не рядом с первой картой

Я хотел бы выход выглядеть так, чтобы отобразить игрок, и дилеры, собственного опыт

______________ ______________ 
| J   | | 10   | 
|    | |    | 
|    | |    | 
|    | |    | 
|  CLUBS | | HEARTS | 
|    | |    | 
|    | |    | 
|   J | |   10 | 
|______________| |______________| 
+3

Для консольного приложения вы можете использовать [Console.SetCursorPosition] (https://msdn.microsoft.com/en-us/library/system.console.setcursorposition (V = vs.110) .aspx) , но похоже, что приложение Windows с управлением сеткой будет намного проще. –

+0

Пожалуйста, поделитесь некоторым кодом, показывающим класс карты и как отображаются строки. – taquion

+0

Не знаете, что вы подразумеваете под: _output несколько карт ascii рядом друг с другом_? Тебе придется показать что-то, что нужно пройти. Что вы хотите, чтобы ваш результат выглядел и что вы пробовали, что не работает? – JohnG

ответ

0

Вы можете попробовать перерисовать весь набор карт по мере их нарисования. Держите карты в коллекции (скажем, с картами) с помощью метода вывода искусства (переопределяя общедоступную ToString здесь). Затем вам нужно разделить на возврат каретки и нарисовать строку за строкой, как показано ниже. Как и другие, вы можете сделать это гораздо проще (менее хакерским), чтобы сделать это в приложении Windows.

 var cardLines = cards.Select(x => 
     x.ToString().Split('\r').ToList().Select(y => y.Replace("\r", string.Empty).Replace("\n", string.Empty) 
     ).ToList()).ToList(); 
     var maximumCardHeight = cardLines.Max(x => x.Count); 
     for (var i = 0; i < maximumCardHeight - 1; i++) 
     { 
      cardLines.ForEach(x => 
      { 
       if (i < x.Count) 
        Console.Write(x[i]); 
      }); 
      Console.WriteLine(); 
     } 
+0

Это было действительно полезно! Одна из проблем, однако, верхняя часть второй карты - это одно пространство слева от того места, где оно должно быть. Любая идея, как это исправить? –

+0

Я думаю, что это может зависеть от вашего карточного искусства. Вы используете оператор строковой строки, за которым следует возврат каретки, который подается в расщепление. Попытайтесь избавиться от возврата каретки. – Sunny