我正在创建一个应该在命令行上运行的游戏。游戏使用文本作为画布上的一个元素(软件将文本打印成矩形,当文本改变时,图像也会改变)。我创建了一个小纸条来测试它是如何工作的
import os
# function for printing out the game display grid
def printgrid(input):
for i in range(len(input)):
for j in range(len(input[0]):
print(input[i][j], end='')
print('') # newline after each row
grid = [['#' for x in range(10)] for x in range(10)]
while (True):
# refresh the screen and reprint
os.system('clear')
printgrid(grid)
不幸的是,代码似乎打印网格太慢,导致在打印过程中出现明显的滚动效果,这将使游戏无法玩。你知道吗
有没有更快的方法用python打印文本?
造成这种滚动效果的原因可能只是因为我没有对这段代码设置任何帧速率上限,而它只是在计算机监视器刷新时显示当前输出?
假设您使用的是类Unix操作系统(Linux或Mac),那么最好的方法就是使用curses(https://docs.python.org/3/howto/curses.html)。然而,这可能是一个很大的努力,并可能是过度杀伤力为您所做的。你知道吗
如果你选择走简单的路线,那么你应该推迟重新粉刷。现在你在把所有的东西都放到屏幕上之后马上就会清空,这会给你带来麻烦。相反,你可以这样做:
这将做什么是离开屏幕上的文字更长的时间,然后重新绘制,这将使它更容易看到。充分利用你的睡眠时间,找出最适合你的应用程序的。你知道吗
由于Python 3.3 print()支持关键字参数“flush”(see documentation):
打印到控制台通常很慢,因为大多数语言倾向于等到消息显示后再继续。你现在的方法有很多方法可以解决这个问题。你知道吗
如果您通过
sys.stdout
使用文件API,您可以根据需要write()
多次调用,并在屏幕准备好打印时调用flush()
。您还可以尝试尽可能少地调用write()
,也许可以在内存中构建字符串并将其整体输出。你知道吗不过,帧速率上限是绝对必要的。控制台不是一个快速的接口,它不能做高帧速率。实施一个上限,玩数字。你知道吗
简而言之:
write()
flush()
另一种方法是使用
ncurses
,它肯定会使游戏加速。使用它,您可以只更新需要重新渲染的屏幕部分,而不是重新打印整个屏幕。你知道吗相关问题 更多 >
编程相关推荐