我正在windows控制台上用python编写一个神秘的游戏,困扰我的是每次迭代“displaying”循环后都会有烦人的闪烁。有人知道怎么减少吗?这是代码的一部分:
#-*- coding: UTF-8 -*-
import time
import os
clear = lambda: os.system('cls')
def gra():
koniec='0'
while koniec!='1':
for i in range(4):
for j in range(10):
print '[___]',
print '\n',
for i in range(10):
print '\n'
for i in range(10):
print ' ',
print '~~~~~~~~~~'
time.sleep(0.1)
clear()
gra()
你可以:
缺点是您不能覆盖控制台的最顶端,并且必须知道已经打印了多少行。但是在处理固定行的ASCII图形游戏时,知道行数应该很简单。它也不是一个
CLS
,它只是把你推向顶端。在哦,解释!它使用ANSI转义序列
F
,该序列移动到上面的行。它会打印很多次,这会把你放到屏幕的顶部。另外,您必须在行数中添加2,否则最上面的行将重复。在PS:如果有人知道如何使这个方法到达控制台的顶部,我将给您一些cookies。在
你所能做的是有限度的,但是把所有的东西都收集到一个大字符串中,然后在屏幕清除之间打印一次,这比在一个循环中使用多个小打印要好。运行以下代码,看看程序的后半部分比前半部分运行得好多少:
编辑:您可以将这些想法与@gingerplus的优秀思想结合起来,以避免
cls
。诀窍是打印大量的退格。在首先编写您自己的
^{pr2}$cls
版本:第一次它被称为零,它只是清除屏幕。在
以下函数将字符数组以一次大打印的方式推送到命令窗口,并返回打印的字符数(因为这是重新定位光标所需的退格数):
这样使用:
当上述代码运行时,显示变化平稳,几乎没有闪烁。在
如果你清除并重写屏幕,任何与windows控制台有关的操作都会闪烁,除非你发现了一些非常先进的东西,否则我认为你无法消除闪烁
我唯一的建议是把清理限制在实际发生变化的时候。在
或者使用tkinter文本框代替cmd。如果您想使用这个想法,我可以帮助您,尽管我主要使用tkinter for Python3.4
希望这有帮助!在
相关问题 更多 >
编程相关推荐