在不清除屏幕的情况下,将2d级别打印到屏幕,有效

时间:2012-04-21 22:10:32

标签: python 2d ascii

好吧,我正在使用Python开发一个项目,这是我的第一个REAL Python项目。现在,我的问题:图形。我认为简约的方式将是Dwarf Fortress风格的图形,每个瓷砖都是一个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'。 Helpature?

编辑 - '问题不是颜色,而是印刷。基本上,我怎么打印它所以我不需要清除屏幕,如何打印,只需更改它,或者其他什么。

2 个答案:

答案 0 :(得分:3)

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

文档说明“ curses库保留两个数据结构,一个表示当前的物理屏幕内容,一个虚拟屏幕表示所需的下一个状态.doupdate()地面更新物理屏幕以匹配虚拟屏幕。“这似乎正是你想要的。您只需将您想要的任何内容绘制到虚拟屏幕中,一旦准备就绪,您可以调用curses.doupdate()功能来更新物理屏幕以匹配虚拟屏幕。

答案 1 :(得分:0)

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

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

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