【问题标题】:Aligning multiple line strings c# console app对齐多行字符串 c# 控制台应用程序
【发布时间】:2017-05-28 03:13:18
【问题描述】:

我正在制作二十一点游戏,并希望在玩家抽牌时将牌并排展示。我将卡片保存为卡片对象中的字符串,字符串看起来像这样我无法弄清楚如何将它实际放入这里:

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

红桃A基本上就是我想要输出的。我可以输出卡片,但每次输出第二张卡片时,它都会换行而不是第一张卡片旁边

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

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

【问题讨论】:

  • 对于控制台应用,您可以使用Console.SetCursorPosition,但似乎带有网格控件的 Windows 应用会容易得多。
  • 请分享一些显示 Card 类和字符串显示方式的代码
  • 不懂你的意思:并排输出多张ascii卡?你将不得不展示一些可以通过的东西。你希望你的输出看起来像什么,你尝试过哪些不起作用?
  • 无法通过问题说出您想要什么,但可能是 string.Format("{0,10}", cardString); 使字符串宽 10 个字符(或任意多个字符)并右对齐。

标签: c# console-application vertical-alignment


【解决方案1】:

您可以尝试在抽出整组卡片时重新绘制它们。将卡片保存在一个集合中(比如说卡片),并使用一种方法来输出艺术作品(在此处覆盖公共 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();
        }

【讨论】:

  • 这真的很有帮助,谢谢!但是有一个问题,第二张卡的顶部距离它应该在的位置左一个空间。知道如何解决这个问题吗?
  • 我认为这可能取决于您的卡片艺术。您使用的是文字字符串运算符,后跟一个回车符,该回车符被输入到拆分中。尝试去掉回车。
猜你喜欢
  • 2015-11-21
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2023-01-03
  • 1970-01-01
相关资源
最近更新 更多