2013-07-28 114 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