I have the following code rendering the display for my roguelike game. It includes rendering the map.
for y in range(self.height):
for x in range(self.width):
wall = self.map.lookup(x,y).blocked
self.main.addch(y, x, "#")
self.main.addch(y, x, ".")
for thing in self.things:
That's expected behavior. Python uses ncurses, which does this because other implementations do this.
In the manual page for
mvwaddchroutines put the character
chinto the given window at its current window position, which is then advanced. They are analogous to
putcharin stdio(3). If the advance is at the right margin:
The cursor automatically wraps to the beginning of the next line.
At the bottom of the current scrolling region, and if
scrollokis enabled, the scrolling region is scrolled up one line.
scrollokis not enabled, writing a character at the lower right margin succeeds. However, an error is returned because it is not possible to wrap to a new line
Python's curses binding has
scrollok. To add characters without scrolling, you would call it with a "false" parameter, e.g.,
If you do not want to scroll, you can use a try/catch block, like this:
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)