我正在用Python 3做一个文字冒险游戏。有没有办法在每行之后不重复命令的情况下,为要打印的任何文字增加打字效果?
答案 0 :(得分:0)
假设“键入效果”是指消息应一次缓慢出现一个字符,则可以定义一个函数,该函数可循环使用给定消息并一次使用一个字符打印一个字符。之间等待一点。确保在每个字符之后time.sleep
使用缓冲区。
flush
如果您真的想将此值应用于游戏中的每个输出(我不建议这样做),您可以覆盖import time
def slow_print(msg):
for c in msg:
print(c, end="", flush=True)
time.sleep(0.1)
print()
slow_print("Hello World!")
函数,并保留对它的引用。原始print
函数在新的慢速print
函数中使用。
print
您也可以直接original_print = print
def slow_print(msg):
# same as above, but using original_print instead of print
print = slow_print
print("Hello World!")
,但是我建议将其定义为一个单独的函数,然后将其分配给def print(...)
。这样,您仍然可以将此选项设置为可选,因为这很可能在开始的几分钟后使播放器烦人。
答案 1 :(得分:0)
我假设您希望字符看起来像有人在键入它们,所以我假设是
导入模块
import os
import sys
import time
from colr import color
定义您的功能
def function_name(phrase,speed,r_value,g_value,b_value):
for char in phrase:
sys.stdout.write(color(char, fore=(r_value,g_value,b_value)))
sys.stdout.flush()
time.sleep(speed)
测试功能
function_name("Hello",0.05,0,255,0)
#prints the phrase "Hello" in green text
或者,您可以使用线程库编写该函数,如果需要的话,该函数将允许用户跳过键入效果。
import time, threading, os, sys, tty, termios
from colr import color
def slow_type_interrupt(phrase,speed,r_value,g_value,b_value):
done = False # this acts as the kill switch, using if statements, you can make certain button presses stop the message printing and outright display it
def type_out():
for char in phrase:
if done:
break
sys.stdout.write(color(char,fore=(r_value,g_value,b_value)))
sys.stdout.flush()
time.sleep(speed)
os.system('clear')
print(color(phrase,fore=(r_value,g_value,b_value)))
t = threading.Thread(target=type_out)
t.start()
def getkey():
ky = sys.stdin.fileno()
Ab = termios.tcgetattr(ky)
try:
tty.setraw(sys.stdin.fileno())
key = sys.stdin.read(1)
finally:
termios.tcsetattr(ky, termios.TCSADRAIN, Ab)
return key
while not done:
key_press = getkey()
if key_press == 'a': #You can replace a with whatever key you want to act as the "kill key"
done = True
os.system('clear')
print(color(phrase,fore=(r_value,g_value,b_value)))
slow_type_interrupt("Hello this is a test. Pressing 'a' will end this and immediatley display the message",.05,0,255,0)
正如我在代码注释中提到的,a可以替换为您想要的任何内容。我之所以使用这种特殊方法来获取按键,是因为它几乎可以在运行Python的任何工具上使用。我建议阅读其他一些检索键盘输入的方法。
希望我能帮助您:)