2013-07-28 76 views
0

我刚刚在python中完成了我的食物填充算法。它运行在一个充满整数的N * N矩阵上。我想以某种方式将它运作起来。在控制台上它有可能以某种方式吗?我想到了在更新之间用wait()更新节点。在python中动画填充洪水

+1

您可以使用['colorconsole'](https://pypi.python.org/pypi/colorconsole)这将允许您做光标定位以及根据需要着色输出。 – martineau

回答

2

你可以使用这样的事情:

#! /usr/bin/python3 
import time 

m = [ [c for c in line] for line in '''............................ 
..XXXXXXXXXX...........XXX.. 
..X........X...........X.X.. 
..XXXXXX...X....XXXXXXXX.X.. 
.......X...X....X........X.. 
....XXXX...XXXXXX........X.. 
....X....................X.. 
....X.................XXXX.. 
....XXXXXXXXXXXXXXXXXXX.....'''.split ('\n') ] 

def flood (matrix, start): 
    maxX = len (matrix [0]) 
    maxY = len (matrix) 
    tbf = [start] 
    while tbf: 
     x, y = tbf [0] 
     tbf = tbf [1:] 
     if x < 0 or x >= maxX or y < 0 or y >= maxY: continue 
     if matrix [y] [x] == 'X': continue 
     matrix [y] [x] = 'X' 
     tbf += [ (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1) ] 
     print ('\x1b[0J\x1b[1;1H') #Clear screen and position cursor top left 
     for line in matrix: print (''.join (line)) 
     time.sleep (.2) 

#flood (m, (0, 0)) 
flood (m, (4, 2)) 

这应该支持ANSI转义序列任何控制台(CSI)上工作。您可以使用相同的CSI代码输出颜色(Wiki)。

+0

它没有按我期望的那样工作,它在每步之后打印整个地图,而不是更新原来打印的那个,不过,它的好处无论如何 – gen

+0

您的控制台是否支持ANSI?你使用哪个控制台? – Hyperboreus

+0

试试这个:在你的控制台上print('\ x1b [31; 1m这是红色')'。如果它支持ANSI,则应该打印为红色。 – Hyperboreus