如何将存储在数组中的特定字符串的输出颜色更改为Linux终端?

时间:2016-06-13 00:39:00

标签: python arrays

我正在用Python编写一个小RPG,我希望我的不同世界对象有不同的颜色。我曾尝试过探索colorama和一些类似的模块;但是,字符串总是打印成一个小盒子,里面有一些数字和字母,而不是,比方说,蓝色'〜'水瓦片的字符。

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

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或下面的任何答案或在另一个帖子中打印文本时,在一个单独的文件中只打印彩色文本,它的工作原理。但是,当我使用相同的代码更改charreplacetiles参数的颜色时,无论使用何种方法更改字符串文本的颜色,我都会得到这个奇数框图标。 / p>

这是一个截屏: enter image description here

2 个答案:

答案 0 :(得分:0)

您可以将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))

答案 1 :(得分:0)

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

import sys
from termcolor import colored, cprint

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