cmd游戏机;减少闪烁

2024-09-25 10:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在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()

Tags: 代码inimport游戏fortimeoswindows
3条回答

你可以:

rows_full=row_count+2
print("\033[F"*rows_full)

#print the screen again

缺点是您不能覆盖控制台的最顶端,并且必须知道已经打印了多少行。但是在处理固定行的ASCII图形游戏时,知道行数应该很简单。它也不是一个CLS,它只是把你推向顶端。在

哦,解释!它使用ANSI转义序列F,该序列移动到上面的行。它会打印很多次,这会把你放到屏幕的顶部。另外,您必须在行数中添加2,否则最上面的行将重复。在

PS:如果有人知道如何使这个方法到达控制台的顶部,我将给您一些cookies。在

你所能做的是有限度的,但是把所有的东西都收集到一个大字符串中,然后在屏幕清除之间打印一次,这比在一个循环中使用多个小打印要好。运行以下代码,看看程序的后半部分比前半部分运行得好多少:

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)

编辑:您可以将这些想法与@gingerplus的优秀思想结合起来,以避免cls。诀窍是打印大量的退格。在

首先编写您自己的cls版本:

^{pr2}$

第一次它被称为零,它只是清除屏幕。在

以下函数将字符数组以一次大打印的方式推送到命令窗口,并返回打印的字符数(因为这是重新定位光标所需的退格数):

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)

当上述代码运行时,显示变化平稳,几乎没有闪烁。在

如果你清除并重写屏幕,任何与windows控制台有关的操作都会闪烁,除非你发现了一些非常先进的东西,否则我认为你无法消除闪烁

我唯一的建议是把清理限制在实际发生变化的时候。在

或者使用tkinter文本框代替cmd。如果您想使用这个想法,我可以帮助您,尽管我主要使用tkinter for Python3.4

希望这有帮助!在

相关问题 更多 >