gpt4 book ai didi

Python Curses addstr() 未按下按键时出错

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:25 27 4
gpt4 key购买 nike

我正在重新创建this使用curses 库在python 中进行终端游戏。只要未按下某个键,stdscr.addstr() 就会返回错误。

这似乎是因为光标在这些帧期间离开屏幕(在右下角),但我根本不明白它为什么移动。我正在打印的 Canvas 始终具有相同的大小(它完全由渲染 Apple 或 Basket 对象时被替换的空格组成)。我尝试减小 Canvas 大小,但光标仍然到达那个角落。我还尝试设置curses.leaveok(True),光标似乎在跟随篮子,但我的日志记录证明它仍然会去那个角落。

使用curses的文件:

import random
import time
import curses

from apple_season.basket import Basket
from apple_season.apple import Apple
from apple_season.coords import Canvas

def main(stdscr):

curses.curs_set(1) # so i can see where the cursor is
dims = [curses.COLS - 1, curses.LINES - 1] # pylint: disable=no-member

stdscr.nodelay(True)
stdscr.leaveok(True)
key=""
stdscr.clear()

canvas = Canvas(*dims)

basket = Basket(canvas)

apples = []
i = 0

def finished_apples():
if len(apples) <= 100:
return False
else:
for apple in apples:
if not apple.has_fallen:
return False
return True

while not finished_apples():

if len(apples) <= 100: # don't make more if there are already 100
# decide whether or not to create new apple (1/100 chance per frame)
num = random.randint(0, 100)
if num == 25:
apples.append(Apple(canvas))

try:
key = stdscr.getkey()
stdscr.clear()

# pick up keyboard inputs
# quit option
if str(key) == "q":
break

# right arrow
elif str(key) == "KEY_RIGHT":
basket.move('right')

# left arrow
elif str(key) == "KEY_LEFT":
basket.move('left')

except Exception:
pass

# render objects - alters canvas to display them
for apple in apples:
if apple.has_fallen:
apple.render()
else:
if '.0' not in str(i / 2): # check if i is even (drop every other frame)
apple.fall()
apple.render()

basket.render()

try:
stdscr.addstr(canvas.display)

except Exception:
pass

stdscr.refresh()
i += 1
time.sleep(0.01)

if __name__ == "__main__":
curses.wrapper(main)

(上面的代码运行良好,但当 stdscr.addstr(canvas.display) 不起作用时,即没有按下任何键时,它不会执行任何操作)

有趣的是,当只有篮子或苹果时,这种情况不会发生。

要查看所有代码:https://github.com/lol-cubes/Terminal-Apple-Season/tree/soErrorCode .

最佳答案

我将 stdscr.clear() 放在 try 和 except block 中,这样代码仅在按下某个键时才执行,因此由于我试图一次显示多个帧而导致终端溢出。

关于Python Curses addstr() 未按下按键时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com