【问题标题】:Character with inverted colors?反转颜色的字符?
【发布时间】:2018-04-16 04:12:22
【问题描述】:

我正在制作一个跳棋游戏(用于娱乐目的)。 我正在使用 C。我正在考虑用以下方式绘制电路板:

  • ASCII 219(全正方形)█
  • ASCII(空格)''

但我想用字母(否定喜欢)保持完整的背景。

我已经搜索了为here 等字符着色的方法,但它在 Windows 中不起作用(至少不适用于我......),我想要一个简单的解决方案。

有人有想法吗?有没有像“负O”这样的“东西”?


临时解决方法:

为了保持它的通用性,我将把它全部保留为 ASCII 和 ASCII 艺术。并且只使用“白色”方块。由于它只是跳棋,我只会使用一种正方形。对于国际象棋,情况会有所不同......如果出现更好的解决方案,我会改变答案。

【问题讨论】:

  • 取决于您使用的终端。
  • 没有 ASCII 219 这样的东西。
  • @TheophileDano 这不是 ASCII,而是代码页 437。即使您链接的页面也是如此。
  • 如果您想跨终端类型/仿真进行移植,建议使用 libncurses 之类的抽象层(例如,参见 attron()A_REVERSE)。但是,不能保证 所有 终端都支持反转字符。
  • 我很失望还没有人提到ESC [ 7 m。它是反向的转义码,它可以在不支持颜色的终端上工作,并且当终端的默认颜色不是你所期望的时,它也会做正确的事情。

标签: c


【解决方案1】:

我会使用 ANSI 转义码。所有现代终端都支持它们。

例子:

#include <stdio.h>
#include <string.h>

#define ANSI_COLOR1 "\33[38;5;0;48;5;255m"
#define ANSI_COLOR2 "\33[38;5;255;48;5;0m"
#define ANSI_RESET  "\33[m"

int main(int argc, char const *argv[])
{
    printf(ANSI_COLOR1 "XXX" ANSI_RESET);
    printf(ANSI_COLOR2 "XXX" ANSI_RESET "\n");

    return 0;
}

输出:

【讨论】:

  • 当然,也可以使用ncurses,而不仅仅是颜色。
【解决方案2】:

正如其他人所建议的那样,我可能会尝试让 ANSI 颜色代码正常工作。但是,如果这变得很困难,您总是可以使用 ASCII 艺术作为备用计划。

可能是这样的:

+-------+-------+-------+-------+-------+-------+-------+-------+
|-------|       |-------|       |-------|       |-------|       |
|-------|       |-------|       |-------|       |-------|       |
|-------|       |-------|       |-------|       |-------|       |
+-------+-------+-------+-------+-------+-------+-------+-------+
|  o8o  |--o8o--|  o8o  |--o8o--|  .:.  |--.:.--|  .:.  |--.:.--|
| 88888 |-88888-| 8 K 8 |-8 K 8-| ::::: |-:::::-| : K : |-: K :-|
|  *8*  |--*8*--|  *8*  |--*8*--|  ':'  |--':'--|  ':'  |--':'--|
+-------+-------+-------+-------+-------+-------+-------+-------+

【讨论】:

  • 这是我最后的手段... :)
【解决方案3】:

转义码在 MS-DOS 终端上不起作用,因此您可能需要使用跨平台着色库,例如 this。但是,由于您正在制作游戏,并且愿意拥有图像库依赖项,因此您可能希望使用以下内容:https://github.com/rossy/img2xterm

【讨论】:

  • 提到的库也不支持 MS-DOS 颜色。此外,如果你为非 Windows 目标编译它,it will use ANSI escape codes.
  • 这就是重点,在 Windows 上使用 SetConsoleTextAttribute,不在 Windows 上时使用转义码。
  • MS-Dos 不是 Windows!
  • 但它是一个 MS-DOS 仿真终端,不是吗?
  • I had a closer look at this topic。您是对的:Windows 控制台在 Windows 10 之前缺乏 ANSI 代码支持,因此对于 Windows 10 之前的 Windows 控制台,您应该使用您提到的功能。
猜你喜欢
  • 2011-06-08
  • 2012-03-30
  • 2013-06-03
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
相关资源
最近更新 更多