【发布时间】:2022-01-06 08:09:34
【问题描述】:
我正在创建一个控制台游戏,它需要用户按键。
我在隐藏字母时遇到了麻烦,这些字母仅仅因为用户按下了一个按钮而散布在屏幕上。
它不适用于getpass 之类的模块,我已经尝试了各种 ANSI 代码来尝试隐藏文本。背景也充满了文本字符和符号,因此停止只是一个完整的 ANSI 字符消失。我也不想每帧都调用os.system("clear"),因为即使每秒调用一次也会导致终端出错。
我想知道的是,是否有一种方法可以在没有所述键出现在控制台上的情况下捕捉按键
这是我正在使用的板子类,里面的draw()方法是我一直将它绘制到终端的方式:
class board:
def __init__(self,length):
import random
self.random=random
self.characters=[" ","░","▒","▓","█"]
self.length=length
self.dithering=False
self.board=[[self.random.choice(self.characters) for y in range(self.length)] for x in range(self.length)]
def draw(self,colour=None):
if colour==None:
colour=RGB(0,1,0)
for x in range(len(self.board)):
for y in range(len(self.board)):
if self.board[y][x]==None:
continue
f=1
if self.dithering==True:
f=self.random.random()+0.5 # faintness
print(f"\u001b[{y};{x*2+1}H\x1b[38;2;{int(colour.r*f)};{int(colour.g*f)};{int(colour.b*f)}m{str(self.board[y][x])*2}",end="")
print("\x1b[0m")
def redecorate(self,characters=None):
if characters==None:
characters=self.characters
self.board=[[self.random.choice(characters) for y in range(self.length)] for x in range(self.length)]
def empty(self):
self.board=[[None for y in range(self.length)] for x in range(self.length)]
class RGB:
def __init__(self,r,g,b):
self.r=r*255
self.g=g*255
self.b=b*255
【问题讨论】:
-
我不明白你的问题。你想捕捉用户的按键而不显示它们吗?请让你的问题更容易理解。
-
@UltraStudioLTD 对不起,混乱。是的,我想捕捉按键而不显示它们。