如何使用“像素”打印文本

时间:2018-03-20 21:32:21

标签: c# object ascii

我正在使用带有表面商店的健身追踪器 - 其中一些表面使用除简单文本之外的其他元素打印当前时间。 几个月前,我试图在“编码游戏”中击败挑战,你必须在ascii艺术中打印动态文本 - 我没有设法做到这一点:(

我假设基本技术应该是相同的,但我不能考虑如何做到这一点。愿任何人告诉我如何打印,例如使用点/方块的当前时间?

我的最后一种方法是为每个可能的字符定义一个二维数组,按位定义哪个点应该是活动的还是非活动的。但是,由于这是非常艰苦的工作,我很快就放弃了。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

实际上,你是在正确的轨道上。这是一种方法 - 使用位掩码的每个字符的2D数组。或者更好 - 一张完整的ASCII图片。需要预先做一些工作,但不是那么多 - 你可以在一两天内完成。您还可以简化输入。像这样:

Dictionary<char, string[]> = {
  {'A', new string[] {
      " AAAA ",
      "AA  AA",
      "AAAAAA",
      "AA  AA",
      "AA  AA"
  }},
  // etc. for all characters in your "ASCII font"
}

另一种方法是为您的角色定义某种“矢量格式”,将其缩放到您需要的大小,然后使用某种使用字符-|/\.的算法转换为ASCII概括。这要困难得多,你仍然需要单独描述每一个角色。但它看起来更漂亮。

或者看看这个答案:https://stackoverflow.com/a/7239064/41360 - 它实际上使用了一个位掩码。是的,可能需要几天的时间才能做到正确。比上面的字符串方法更难,但如果空间不足(如某些嵌入式硬件),也会更紧凑。

再有就是Figlet - 手中的软件已经一路定义了自己的字体格式,更不用说某种实际上合并中的人物先进的文本渲染引擎。疯狂的狗屎。

但是无论你使用什么方法,某个地方的人都需要单独设计每个字母并以某种格式存储设计(从而产生“字体”)。最有可能是你。没有办法解决它。

程序员可能会懒惰并使用技巧让他们的生活更轻松 - 但有时候努力工作根本不可避免。当它到来时,你就是这样做的。在一天结束时,结果是重要的,而不是如何获得(好吧,只要它的道德/合法当然)。