0

好吧,我正在用 Python 做一个项目,这是我的第一个真正的 Python 项目。现在,我的问题:图形。我认为最简单的方法是矮人堡垒风格的图形,每个图块都是一个 ASCII 颜色字母。现在,我有办法做到这一点,但我认为它不会很有效。这是我的代码:

import os
import time
import random
clear = lambda: os.system('clear')

g = '\033[32m' + '# '
t = '\033[31m' + '^ '
l = [g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g]

def level():
    i = 0
    while i < 1000:
        print l[0] + l[1] + l[2] + l[3] + l[4] + l[5]
        print l[6] + l[7] + l[8] + l[9] + l[10] + l[11]
        print l[12] + l[13] + l[14] + l[15] + l[16] + l[17]
        print l[18] + l[19] + l[20] + l[21] + l[22] + l[23]
        print l[24] + l[25] + l[26] + l[27] + l[28] + l[29]
        print l[30] + l[31] + l[32] + l[33] + l[34] + l[35]
        i += 1

        for b in l:
            ch = round(random.random())
            if ch:
                l[l.index(b)] = g
            else:
                l[l.index(b)] = t       
        clear()
level()

我从堆栈溢出的某个地方得到了清晰的东西,但它不应该在 Windows 上工作,考虑到在 Windows 上的 clear 命令是“clr”,而在 Mac 和 Linux 上,它是“clear”。帮助?

编辑-'问题不在于颜色,而在于印刷。基本上,我怎样才能打印它,这样我就不必清除屏幕,我怎样才能打印它,然后改变它,或者什么。

4

2 回答 2

3

据我所知,所有这种基于 ASCII 的终端图形操作通常都是使用Curses 库完成的,所以我建议你尝试一下。

文档指出“ curses 库保留两个数据结构,一个代表当前物理屏幕内容,一个虚拟屏幕代表所需的下一个状态。doupdate() 地面更新物理屏幕以匹配虚拟屏幕。 ”这似乎是正是你想要的。您只需在虚拟屏幕中绘制您想要的任何内容,一旦您准备好,您就调用curses.doupdate()更新物理屏幕以匹配虚拟屏幕的函数。

于 2012-04-21T22:22:44.827 回答
0

ANSI Escape 代码在 Windows 上不起作用,除非您安装一些工具来启用它。

由于您使用的是 Python,因此我在 SO 找到了您的解决方案(问题Print in terminal with colours using Python?

转到 colorama:http://pypi.python.org/pypi/colorama。只需安装它(非常简单),您就可以开始使用了。

于 2012-04-21T22:19:16.403 回答