我正在 Windows 控制台上用 python 编写一个 arcanoid 游戏,令我困扰的是在“显示”循环的每次迭代后令人讨厌的闪烁。有谁知道如何减少它?这是代码的一部分:
#-*- 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()
最佳答案
你能做的是有限的,但将所有内容收集到一个大字符串中,然后在屏幕清除之间打印一次,这比在一个循环中打印一些小的打印要好。运行下面的代码,看看程序的后半部分比前半部分运行得好多少:
import time, os, random
def display1(chars):
os.system('cls')
for row in chars:
print(''.join(row))
def display2(chars):
os.system('cls')
print('\n'.join(''.join(row) for row in chars))
chars = []
for i in range(40):
chars.append(["-"]*40)
for i in range(100):
r = random.randint(0,39)
c = random.randint(0,39)
chars[r][c] = "X"
time.sleep(0.1)
display1(chars)
os.system('cls')
time.sleep(1)
chars = []
for i in range(40):
chars.append(["-"]*40)
for i in range(100):
r = random.randint(0,39)
c = random.randint(0,39)
chars[r][c] = "X"
time.sleep(0.1)
display2(chars)
关于编辑:您可以将这些想法与@GingerPlusPlus 的优秀想法结合起来以避免cls
。诀窍是打印大量退格键。
首先 -- 编写您自己的 cls
版本:
def cls(n = 0):
if n == 0:
os.system('cls')
else:
print('\b'*n)
第一次调用它时——将它传递给零,它就清除屏幕。
以下函数将一个字符数组推送到一个大打印的命令窗口,并返回打印的字符数(因为这是重新定位光标所需的退格数):
def display(chars):
s = '\n'.join(''.join(row) for row in chars)
print(s)
return len(s)
这样使用:
chars = []
for i in range(40):
chars.append(["-"]*40)
for i in range(100):
n = 0
r = random.randint(0,39)
c = random.randint(0,39)
chars[r][c] = "X"
time.sleep(0.1)
cls(n)
n = display(chars)
当上面的代码运行时,显示变化平滑,几乎没有闪烁。
关于python - cmd控制台游戏;减少眨眼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34828142/