所以我找到了一些格式化2048 Game Board的代码,这样当一个数字超过1个数字时,它看起来就不会显得凌乱:
52
运行此代码可使内容更清晰,并更改nlist的值以查看格式如何工作。所以无论如何,在我完成游戏后,我想添加颜色以使游戏在终端中更易于理解,所以我将代码编辑如下:
nlist = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 128, 2, 2, 16, 16]
widths = [max(len(str(nlist[row * 4 + col])) for row in range(4)) + 2 for col in range(4)]
width = sum(widths) + 5
count = 0
for i in range(16):
print('|{:^{width}}'.format(nlist[i], width=widths[i % 4]), end = '')
count += 1
if count == 4:
print("|\n" + '-' * width)
count = 0
print("")
但是现在格式全部搞砸了,我的面板看起来又丑了。有没有一种方法可以更改此代码,使它看起来像第一个代码,但带有颜色(现在几乎所有颜色出于时间考虑都是相同的。稍后我将对其进行更改)。另外,有没有更简单的方法将颜色放入条件语句中?
编辑:
这是指向没有正确格式的颜色的文件的链接:2048 that works(no colors)
这是指向颜色格式不正确的文件的链接:2048 that does not work(colors)
我运行代码的屏幕快照:Screen shot of messed up format
答案 0 :(得分:3)
您的颜色编码混乱有两个原因。
1)您没有为0定义颜色编码,因此在代码中零与其他数字之间始终存在很大的格式差异。
2)您的宽度函数没有随颜色函数变化,但实际上,彩色输出的字符串长度比没有颜色的字符串长度大得多。因此,我建议您使用常数,例如22或更大的代码。 或者,您可以更改
widths = [max(len(str(nlist[row * 4 + col])) for row in range(4)) + 2 for col in range(4)]
到
widths = [max(len(str(nlist[row * 4 + col]))+21 for row in range(4)) + 2 for col in range(4)]
为简化if结构,建议您使用字典查找所需的颜色:
WHITE_COLOR = "#ffffff"
BACKGROUND_COLOR_GAME = "#92877d"
BACKGROUND_COLOR_CELL_EMPTY = "#9e948a"
BACKGROUND_COLOR_DICT = { 2:"#eee4da", 4:"#ede0c8", 8:"#f2b179", 16:"#f59563", \
32:"#f67c5f", 64:"#f65e3b", 128:"#edcf72", 256:"#edcc61", \
512:"#edc850", 1024:"#edc53f", 2048:"#edc22e" }
CELL_COLOR_DICT = { 2:"#776e65", 4:"#776e65", 8:"#f9f6f2", 16:"#f9f6f2", \
32:"#f9f6f2", 64:"#f9f6f2", 128:"#f9f6f2", 256:"#f9f6f2", \
512:"#f9f6f2", 1024:"#f9f6f2", 2048:"#f9f6f2" }
FONT = ("Verdana", 40, "bold")
SCORE_FONT=("Verdana", 20, "bold")
对于您的代码,您可以使其像
nlist = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 128, 2, 2, 16, 16]
color_dict = {0:' \033[1;37;106m0\033[0m ',
2:' \033[1;37;106m2\033[0m ',4:' \033[1;37;104m4\033[0m ',
8:' \033[1;37;106m8\033[0m ',16:' \033[1;37;106m16\033[0m ',
32:' \033[1;37;106m32\033[0m ',64:' \033[1;37;106m64\033[0m ',
128:' \033[1;37;106m128\033[0m ',256:' \033[1;37;106m256\033[0m ',
512:' \033[1;37;106m512\033[0m ',1024:' \033[1;37;106m1024\033[0m ',
2048:' \033[1;37;106m2048\033[0m ',4096:' \033[1;37;106m4096\033[0m '}
count = 0
for i in range(16):
print('|{:^{width}}'.format(color_dict[nlist[i]], width=22), end = '') #This line is modified.
count += 1
if count == 4:
print("|\n" + '-')
count = 0
答案 1 :(得分:0)
将colored
模块中的termcolor
用于颜色
from termcolor import colored
nlist = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 128, 2, 2, 16, 16]
color = {n:'cyan' for n in nlist}
color[4] = 'red'
widths = [max(len(str(nlist[row * 4 + col])) for row in range(4)) + 16 for col in range(4)]
width = sum(widths) + 5
count = 0
for i in range(16):
print('|{:^{width}}'.format(colored(nlist[i], 'white', 'on_'+color[nlist[i]]), width=widths[i % 4]), end = '')
count += 1
if count == 4:
print("|\n" + '-' * width)
count = 0
print("")
输出 我确实看到了以下颜色的输出
| 2 | 4 | 8 | 16 |
------------------------------------------------------------------------------------
| 32 | 64 | 128 | 256 |
------------------------------------------------------------------------------------
| 512 | 1024 | 2048 | 4096 |
------------------------------------------------------------------------------------
| 128 | 2 | 2 | 16 |
------------------------------------------------------------------------------------