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 self.nemesis = Nemesis()
30 if not self.level_obj.enter_pos:
31 raise RuntimeError('No entry point')
32 self.player_tile = None
33 self.nemesis_tile = None
35 self.player.pos = self.level_obj.enter_pos
36 self.keyboard = Window.request_keyboard(self._closed, self)
37 self.keyboard.bind(on_key_down=self._on_key_down)
42 tiles = self.level_obj.get_tiles()
44 for tile_line in tiles:
46 for tile in tile_line:
47 node = Widget(size=(TILE_SIZE, TILE_SIZE), pos=(bx, by))
50 Rectangle(pos=node.pos, size=node.size,
53 self.tiles[(bx, by)] = node
60 def draw_player(self):
62 self.remove_widget(self.player_tile)
63 sprite_pos = (self.player.pos[0] * TILE_SIZE,
64 self.player.pos[1] * TILE_SIZE)
65 self.player_tile = Widget(size=(TILE_SIZE, TILE_SIZE),
67 with self.player_tile.canvas:
69 Rectangle(pos=sprite_pos, size=self.player_tile.size,
70 texture=self.player.get_texture())
71 self.add_widget(self.player_tile)
73 def draw_nemesis(self):
74 if not self.nemesis.on_board():
77 self.remove_widget(self.nemesis_tile)
78 sprite_pos = (self.nemesis.pos[0] * TILE_SIZE,
79 self.nemesis.pos[1] * TILE_SIZE)
80 self.nemesis_tile = Widget(size=(TILE_SIZE, TILE_SIZE),
82 with self.nemesis_tile.canvas:
84 Rectangle(pos=sprite_pos, size=self.nemesis_tile.size,
85 texture=self.nemesis.get_texture())
86 self.add_widget(self.nemesis_tile)
89 self.keyboard.unbind(on_key_down=self._on_key_down)
91 def _on_key_down(self, keyboard, keycode, text, modifiers):
92 # FIXME - likely portablity issues
94 if keycode[0] == pygame.K_UP:
96 elif keycode[0] == pygame.K_DOWN:
98 elif keycode[0] == pygame.K_LEFT:
100 elif keycode[0] == pygame.K_RIGHT:
103 self.nemesis.move(self.level_obj)
105 self.player.move(direction, self.level_obj)
109 def check_state(self):
110 if self.level_obj.at_exit(self.player.pos):
112 self.level_obj = self.level_list.advance_to_next_level()
113 self.nemesis.reset_pos()
115 self.level_obj.load_tiles()
116 self.player.pos = self.level_obj.enter_pos
117 self.remove_widget(self.player_tile)
122 elif self.nemesis.pos == self.player.pos:
131 self.levels = LevelList()
132 super(GameApp, self).__init__()
135 game = GameWindow(self.levels)
141 """ Erdslangetjie, a maze game of eluding nemesis