对齐多个线串c#console app

时间:2017-01-12 21:01:12

标签: c# console-application vertical-alignment

我正在进行二十一点游戏,并希望在玩家吸引他们时将卡片显示在彼此旁边。我将卡片保存为卡片对象中的字符串,字符串看起来有点像这样我无法弄清楚如何将它放在这里:

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

心灵的王牌基本上是我想要输出的。我可以输出卡片,但每次输出第二张卡片时都会转到新行,而不是第一张卡片旁边

我希望输出看起来像显示玩家和经销商的手

 ______________   ______________  
| J            | | 10           |
|              | |              |
|              | |              |
|              | |              |
|     CLUBS    | |    HEARTS    |
|              | |              | 
|              | |              |
|            J | |           10 |
|______________| |______________|

1 个答案:

答案 0 :(得分:0)

您可以尝试在绘制时重新绘制整套卡片。将卡片保存在一个集合中(让我们说卡片)用一种输出艺术的方法(在这里覆盖公共ToString)然后你需要通过回车分割并逐行绘制,如下所示。正如其他人所建议的那样,你会发现在Windows应用程序中执行此操作会更容易(更少hacky)。

       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();
        }