Advertisement
DrMGC

Untitled

Dec 22nd, 2020
947
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.99 KB | None | 0 0
  1. import curses
  2.  
  3.  
  4. world_config = '''
  5.        ######
  6. ##########
  7. #######                  000000...
  8.   !!!!!*****      qqqqq0000000000.......
  9.   !!!!*******qqqqqqqqqq    0000....
  10. %%%%%     *******qqqqq
  11. %%         zzzwwwwwwww
  12.  %        zzzzwwww
  13.            zzzz
  14.             zz
  15.              z
  16. '''.split('\n')[1:-1]
  17.  
  18.  
  19. class World:
  20.     def __init__(self, tiles, sea=' '):
  21.         self._map = tiles
  22.         self.provinces = set(''.join(tiles))
  23.         self.provinces.remove(' ')
  24.         self.height = len(tiles)
  25.         self.width = max(map(len, tiles))
  26.  
  27.     def at(self, y, x):
  28.         return self.provinces[y][x]
  29.  
  30.     @property
  31.     def map(self): return self._map
  32.  
  33.  
  34. class Realm:
  35.     def __init__(self, sym, idx=-1):
  36.         self._sym = sym
  37.         self._id = ord(sym) if idx < 0 else idx
  38.  
  39.     @property
  40.     def id(self): return self._id
  41.  
  42.     @property
  43.     def sym(self): return self._sym
  44.  
  45.  
  46. def main():
  47.     scr = curses.initscr()
  48.  
  49.     w = curses.newwin(0, 0)
  50.  
  51.     world = World(world_config)
  52.  
  53.     input_key = None
  54.     curx, cury = 0, 5
  55.     status_bar_msg = ''
  56.  
  57.     def draw():
  58.         w.move(0, 0)
  59.         for y, l in enumerate(world.map):
  60.             for x, c in enumerate(l):
  61.                 w.addch(c)
  62.             w.move(y + 1, 0)
  63.  
  64.     def draw_hud():
  65.         wmaxy, wmaxx = w.getmaxyx()
  66.         hudy, hudx = wmaxy - 2, 0
  67.  
  68.         w.move(hudy - 1, hudx)
  69.         w.addstr('─' * wmaxx)
  70.  
  71.         w.move(hudy + 1, hudx)
  72.         w.addstr(f'{cury=};{curx=};{input_key=}')
  73.  
  74.         w.move(hudy, hudx + 2)
  75.         w.addstr(status_bar_msg)
  76.  
  77.     draw()
  78.     draw_hud()
  79.     w.refresh()
  80.     w.move(cury, curx)
  81.  
  82.     running = True
  83.     while running:
  84.         try:
  85.             input_key = w.getkey()
  86.             if input_key == 'h':
  87.                 curx -= 1
  88.             elif input_key == 'l':
  89.                 curx += 1
  90.             elif input_key == 'j':
  91.                 cury += 1
  92.             elif input_key == 'k':
  93.                 cury -= 1
  94.             elif input_key == 'q':
  95.                 running = False
  96.             else:
  97.                 status_bar_msg = 'Неизвестная клавиша'
  98.  
  99.             draw()
  100.             draw_hud()
  101.             w.refresh()
  102.         except KeyboardInterrupt:
  103.             running = False
  104.  
  105.     curses.endwin()
  106.  
  107.  
  108. if __name__ == '__main__':
  109.     try:
  110.         main()
  111.     except:
  112.         curses.endwin()
  113.         raise
  114.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement