我有以下代码渲染我的roguelike游戏的显示。它包括渲染地图。
def render_all(self):
for y in range(self.height):
for x in range(self.width):
wall = self.map.lookup(x,y).blocked
if wall:
self.main.addch(y, x, "#")
else:
self.main.addch(y, x, ".")
for thing in self.things:
draw_thing(thing)
每次都出错。我认为这是因为它离开了屏幕,但是高度和宽度变量来自self.main.getmaxyx(),所以它不应该这样做,对吧?我错过了什么?在Ubuntu 14.04中运行的Python 3.4.3应该是重要的。
答案 0 :(得分:2)
这是预期的行为。 Python使用ncurses,这样做是因为其他实现都是这样做的。
addch
addch
:
waddch
,mvaddch
,mvwaddch
和 {{1} } 例程放了 字符ch
进入当前窗口的给定窗口 位置,然后提前。它们类似于 stdio中的putchar
(3)。如果预付款位于合适的边缘:
光标自动换行到开头 下一行。
在当前滚动区域的底部,如果 启用
scrollok
,滚动滚动区域 一行。如果未启用
scrollok
,请在该处填写字符 右下边缘成功。但是,错误是 返回,因为无法换行到新的 线
Python的curses绑定有manual page。要在不滚动的情况下添加字符,可以使用“false”参数调用它,例如
self.main.scrollok(0)
如果您不想滚动,可以使用try / catch块,如下所示:
import curses
def main(win):
for y in range(curses.LINES):
for x in range(curses.COLS):
try:
win.addch(y, x, ord('.'))
except (curses.error):
pass
curses.napms(1)
win.refresh()
ch = win.getch()
curses.wrapper(main)