我已经实施了生命游戏。
我无法解决的是如何打印shell中单元格数组的每次迭代。我想让输出显示为动画。
这是我的阵列打印代码
def print_board board
wipe_screen
board.each_with_index do |row,y|
row.each_with_index do |cell,x|
print cell == 1 ? '*' : ' '
end
print "\n"
end
end
这是wipe_screen
方法:
def wipe_screen
Board_Height.each do |_|
# print "\r"
# $stdout.write "\e[A\e[2K"
end
end
你可以在注释掉的位中看到我已经尝试过的东西。
如何在shell中实现动画输出?
编辑:
请允许我用一个例子来澄清。
它只是打印出生命游戏周期的每次迭代):
* * * * ** **
*** * ** * * * **
** **** * * **** *
** * ** * ** **
* * ** * *****
***** * **** *
***** * * ** * *
* ** *** * ** ****
* ** * ** ***** *
** * * * *****
* ** *
** **** *** *
*** * *** *
* ** *****
** *****
** *
** ****
** * * *
**** * *****
* ****
* ** *
* **** *** *
*** * *** *
** *****
** ***
** ***
*** * **
* * ****
***** ** ****
* ****
* ** *
**** *** *
** * *** *
** ***
** ***
** ***
*** * **
* * **
***** *** **
* ****
** *
**** *** *
** * * *
** ***
** ***
** ***
*** ** *
* * *
***** **** *
* ****
而我想要的是:
* * * * ** **
*** * ** * * * **
** **** * * **** *
** * ** * ** **
* * ** * *****
***** * **** *
***** * * ** * *
* ** *** * ** ****
* ** * ** ***** *
** * * * *****
然后,当它迭代生命周期的游戏时,取而代之的是:
* ****
** *
**** *** *
** * * *
** ***
** ***
** ***
*** ** *
* * *
***** **** *
* ****
编辑:
生命游戏gist
答案 0 :(得分:2)
对于动画效果,请勿擦除屏幕,而是将光标返回原位。至少在bash和tcsh中,你可以用
来实现print "\033[0;0H]"
然后继续并覆盖更新的单元格内容。
使用页面末尾的STDOUT.flush
清空输出缓冲区。