簡體   English   中英

_curses.error:add_wch()返回錯誤

[英]_curses.error: add_wch() returned an error

我有以下代碼渲染我的無賴類游戲的顯示。 它包括渲染地圖。

  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應該很重要。

這是預期的行為。 Python使用ncurses,這樣做是因為其他實現也這樣做。

addch手冊頁中:

addchwaddchmvaddchmvwaddch例程將字符ch放入給定窗口的當前窗口位置,然后將其前進。 它們類似於stdio(3)中的putchar 如果預付款處於正確的邊距:

  • 光標會自動換行到下一行的開頭。

  • 在當前滾動區域的底部,如果啟用了scrollok ,則滾動區域將向上滾動一行。

  • 如果未啟用scrollok則成功寫入右下角的字符。 但是, 由於無法換行而返回錯誤

Python的curses綁定具有scrollok 要添加字符而不滾動,您可以使用“ 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM