- commit
- 22c26011c28ac187f71e2383189bf1d75578a8a4
- parent
- 81d65201fa0fb7669f087fc95966439b13d8a42b
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2021-05-08 08:42
use low level APIs - own mainloop, not just render on key - blitting colored strings is complicated
Diffstat
| M | tighogg.py | 41 | +++++++++++++++++++++++++++++------------ |
1 files changed, 29 insertions, 12 deletions
diff --git a/tighogg.py b/tighogg.py
@@ -1,3 +1,7 @@ -1 1 import sys -1 2 import shutil -1 3 import time -1 4 1 5 import boon 2 6 3 7 LEFT = 0 @@ -10,8 +14,8 @@ class Player: 10 14 def __init__(self, x, y, direction, color): 11 15 self.x = x 12 16 self.y = y -1 17 self.direction = direction 13 18 self.color = color14 -1 self.direction = LEFT15 19 self.running = False 16 20 self.weapon = '-' 17 21 @@ -33,26 +37,30 @@ class Player: 33 37 yield r' Λ ' 34 38 35 39 def render(self):36 -1 for line in self._render():37 -1 line = line.replace('w', self.weapon)38 -1 line = (-1 40 for i, line in enumerate(self._render()): -1 41 x = self.x - 1 + len(line) - len(line.lstrip()) -1 42 y = self.y - 2 + i -1 43 boon.move(y, x) -1 44 sys.stdout.write( 39 45 boon.get_cap('setaf', self.color) 40 46 + boon.get_cap('bold')41 -1 + line-1 47 + line.strip().replace('w', self.weapon) 42 48 + boon.get_cap('sgr0') 43 49 )44 -1 yield line45 50 46 5147 -1 class Game(boon.App):-1 52 class Game: 48 53 def __init__(self):49 -1 super().__init__()50 54 self.player1 = Player(10, 10, RIGHT, YELLOW)51 -1 self.player2 = Player(10, 10, LEFT, GREEN)-1 55 self.player2 = Player(20, 10, LEFT, GREEN) -1 56 self.running = True 52 5753 -1 def render(self, rows, cols):54 -1 yield from self.player1.render()55 -1 yield from self.player2.render()-1 58 def render(self): -1 59 cols, rows = shutil.get_terminal_size() -1 60 sys.stdout.write(boon.get_cap('clear')) -1 61 self.player1.render() -1 62 self.player2.render() -1 63 sys.stdout.flush() 56 64 57 65 def on_key(self, key): 58 66 if key == 'q': @@ -78,6 +86,15 @@ class Game(boon.App): 78 86 elif key == 's': 79 87 self.player2.running = False 80 88 -1 89 def run(self): -1 90 self.running = True -1 91 with boon.fullscreen(): -1 92 while self.running: -1 93 last = time.time() -1 94 self.on_key(boon.getch()) -1 95 self.render() -1 96 time.sleep(1 / 30 - (time.time() - last)) -1 97 81 98 82 99 if __name__ == '__main__': 83 100 game = Game()