-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgame.py
More file actions
60 lines (53 loc) · 1.82 KB
/
game.py
File metadata and controls
60 lines (53 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import threading
from time import sleep
from camera import Camera
from display import Display
from kbhit import KBHit
from player import Player
from vectors import Vector2
from world import World
class Game:
_camera: Camera = None
_world: World = None
_player: Player = None
_call_after_blanking = None # type: function[Camera]
def __init__(self, camera, world, player, call_after_blanking = None) -> None:
self._camera = camera
self._world = world
self._player = player
self._call_after_blanking = call_after_blanking
def start(self):
self._camera.display.render()
thread = threading.Thread(target=self.register_input)
thread.start()
while thread.is_alive():
try:
sleep(0.1)
except:
pass
def render(self):
self._camera.display.clear()
self._call_after_blanking(self._camera)
for obj in self._world.objects:
obj.render(self._camera)
self._camera.display.render()
def register_input(self):
kb = KBHit()
while True:
if kb.kbhit():
c = kb.getch()
# self._camera.display.clear(Vector2(), Vector2(0, 3))
# self._camera.display.add_text(Vector2(), str(ord(c)), True)
if ord(c) == 27: # ESC
break
# self._camera.display.set_pixel(Vector2(), c)
if c == "w":
self._player.walk(Vector2(1, 0))
elif c == "s":
self._player.walk(Vector2(-1, 0))
elif c == "a":
self._player.walk(Vector2(0, -1))
elif c == "d":
self._player.walk(Vector2(0, 1))
self.render()
kb.set_normal_term()