7 from kivy.app import App
8 from kivy.core.window import Window
9 from kivy.uix.widget import Widget
10 from kivy.uix.floatlayout import FloatLayout
11 from kivy.graphics import Color, Rectangle
13 from erdslangetjie.level import LevelList
14 from erdslangetjie.player import ThePlayer, Nemesis
19 class GameWindow(FloatLayout):
21 def __init__(self, level_list):
22 super(GameWindow, self).__init__(size=(648, 480))
23 self.level_list = level_list
24 self.level_obj = self.level_list.get_current_level()
25 self.level_obj.load_tiles()
28 self.player = ThePlayer()
29 if not self.level_obj.enter_pos:
30 raise RuntimeError('No entry point')
31 self.player_tile = None
33 self.player.pos = self.level_obj.enter_pos
34 self.keyboard = Window.request_keyboard(self._closed, self)
35 self.keyboard.bind(on_key_down=self._on_key_down)
40 tiles = self.level_obj.get_tiles()
42 for tile_line in tiles:
44 for tile in tile_line:
45 node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by))
48 Rectangle(pos=node.pos, size=node.size,
51 self.tiles[(bx, by)] = node
57 def draw_player(self):
59 self.remove_widget(self.player_tile)
60 player_pos = (self.player.pos[0] * TILE_SIZE,
61 self.player.pos[1] * TILE_SIZE)
62 self.player_tile = Widget(size=(TILE_SIZE, TILE_SIZE),
64 with self.player_tile.canvas:
66 Rectangle(pos=player_pos, size=self.player_tile.size,
67 texture=self.player.sprite.texture)
68 self.add_widget(self.player_tile)
71 self.keyboard.unbind(on_key_down=self._on_key_down)
73 def _on_key_down(self, keyboard, keycode, text, modifiers):
74 # FIXME - likely portablity issues
76 if keycode[0] == pygame.K_UP:
78 elif keycode[0] == pygame.K_DOWN:
80 elif keycode[0] == pygame.K_LEFT:
82 elif keycode[0] == pygame.K_RIGHT:
85 if self.player.can_move(direction, self.level_obj):
86 self.player.move(direction)
88 if self.level_obj.at_exit(self.player.pos):
89 self.level_obj = self.level_list.advance_to_next_level()
91 self.level_obj.load_tiles()
92 self.player.pos = self.level_obj.enter_pos
93 self.remove_widget(self.player_tile)
103 self.levels = LevelList()
104 super(GameApp, self).__init__()
107 game = GameWindow(self.levels)
113 """ Erdslangetjie, a maze game of eluding nemesis