_curses.error:add_wch()返回错误

时间:2016-06-06 01:48:53

标签: python curses roguelike

我有以下代码渲染我的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应该是重要的。

1 个答案:

答案 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)