【问题标题】:How to change the output color of a specific string, stored within an array, to Linux terminal?如何将存储在数组中的特定字符串的输出颜色更改为 Linux 终端?
【发布时间】:2016-06-13 00:38:59
【问题描述】:

我正在用 Python 编写一个小型 RPG,我希望我的不同世界对象具有不同的颜色。我尝试过探索 colorama 和一些类似的模块;但是,字符串总是打印为一个小盒子,里面有一些数字和字母,而不是,比如说,水砖的蓝色“~”字符。

我使用如下所示的变量创建我的世界数组:

worldArray = [[' ' for i in range(10)] for i in range(10)]

然后我通过几个不同的函数向其中添加世界对象,以构建一个随机的世界环境,如下所示:

def replacetiles(self, grid, row, a, b, char, count):
        while count:
            aShift = 2
            row_col_dict = {row: (a, b)}
            for row in row_col_dict.keys():
                startPos, endPos = row_col_dict[row]

                for i in range(startPos, endPos):
                    grid[row][i] = char
                    
            row -= 1
            if aShift == 0:
                a += random.randint(1, 2)
            
            if count < 3:
                b -= (b / 2)
            
            b += random.randint(0, 1)
            aShift -=1
            count -= 1

这当然都存储在一个类对象中。这个函数是我通过调用replacetiles(gamemap, 9, 0, 5, '~', 3) 在世界中创建随机海洋的方法,这将用'~' 替换一些索引。

如何更改游戏地图中'~' 的输出颜色?

编辑:我的问题似乎比列出的其他线程更具体。我遇到的问题是,当我通过 colorama 或下面或其他线程中的任何答案打印文本时,在一个单独的文件中只需打印彩色文本,它就可以工作。但是,当我使用相同的代码更改 replacetiles 中的 char 参数的颜色时,我得到了这个奇怪的框图标,无论我使用什么方法来更改字符串文本的颜色。

这是一个屏幕截图:

【问题讨论】:

标签: python arrays


【解决方案1】:

您可以使用这个名为 termcolor 的包,而不是对值进行硬编码。

import sys
from termcolor import colored, cprint

text = colored('Hello, World!', 'red', attrs=['reverse', 'blink'])
print(text)
cprint('Hello, World!', 'green', 'on_red')

【讨论】:

  • 还返回奇怪的框图标。如果我在它自己的文件中运行它,我会得到突出显示的红色文本。但是,如果我尝试将类似的代码附加到我的函数中以更改 '~' 蓝色,我会看到框图标。知道为什么会这样吗?
  • 你用的是什么终端仿真?
  • 我使用标准终端全新安装了最新版本的 Linux Mint。我在主帖中添加了一个屏幕截图以进行澄清。
  • 这是一个编码问题,你很可能试图打印一个 unicode 字符,但你的终端不支持它。尝试使用 docs.python.org/3/library/… 对字符串或单个字符进行编码。
  • 没有结果。我的代码现在是:grid[row][i] = char.encode('utf-8', 'strict') 这是正确的吗? char 参数是:colored('w', 'blue', attrs=['reverse', 'blink']) 我还将 '~' 符号更改为 'w',以查看是否出于某种原因会有所作为。
【解决方案2】:

您可以将 ASCII 转义码添加到您添加到 worldArray 的字符串中。要使水变蓝,只需将grid[row][i] = char 替换为grid[row][i] = "\033[34m" + char + "\033[0m"

有关更多颜色代码,请参阅: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

然后您可以使用以下方式打印您的世界:

print('\n'.join(' '.join(row) for row in worldArray))

【讨论】:

  • 这似乎不起作用。仍然返回奇怪的盒子东西。
  • 你能粘贴你看到的吗?
  • 在我的主帖中添加了屏幕截图。
  • 另外,你实际上是如何打印你的世界的?
  • print '\n'.join(' '.join(*zip(*row)) for row in gamemap) 用于整个地图。
猜你喜欢
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2017-03-27
  • 1970-01-01
  • 2019-03-12
  • 2014-09-28
相关资源
最近更新 更多