python - cmd控制台游戏;减少眨眼

标签 python

我正在 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/

相关文章:

python - 如果某行包含 pandas 中的某个值,则删除该行

python - macOS Sierra/Python2.7.13 URLError : <urlopen error EOF occurred in violation of protocol (_ssl. c:661)>

python - 使用 flask-sqlalchemy 查询数据库中现有的 mysql 表

python - 如何将图片作为值添加到 Tkinter Treeview 中?

python - python 3 上的 docopt 仅打印帮助屏幕并且不执行该功能

python - 如何使用 Flask 将二维数组中的表格从 Python 渲染为 HTML?

python - 什么是半径 x 的圆中整数坐标的更快解决方案

python - python 中的素数生成器返回多个复合 Material 而不是素数

python - 在 Matplotlib 中更改网格间隔并指定刻度标签

python - 我可以在 Scikit-learn 中使用任何特征选择方法来完成像 KMeans 这样的聚类任务吗?