+import sys
+import os
+import kivy
+
+kivy.require('1.6.0')
+
+from kivy.app import App
+from kivy.uix.widget import Widget
+from kivy.uix.floatlayout import FloatLayout
+from kivy.graphics import Color, Rectangle
+
+from erdslangetjie.data import filepath, load
+from erdslangetjie.level import Level
+from erdslangetjie.player import ThePlayer, Nemesis
+
+
+class GameWindow(FloatLayout):
+
+ def __init__(self, level):
+ super(GameWindow, self).__init__(size=(960, 960))
+ if os.path.exists(filepath(level)):
+ level_data = load(level)
+ self.level = level
+ elif os.path.exists(filepath('levels/' + level)):
+ level_data = load('levels/' + level)
+ self.level = 'levels/' + level
+ else:
+ print 'Unable to find %s - treating this as a new level' % level
+ sys.exit(1)
+ self.level_obj = Level()
+ self.level_obj.load(level_data)
+ level_data.close()
+
+ self.player = ThePlayer()
+ self.level_obj.load_tiles()
+ if not self.level_obj.enter_pos:
+ raise RuntimeError('No entry point')
+
+ self.player.pos = self.level_obj.enter_pos
+
+ def build(self):
+ self.clear_widgets()
+ tiles = self.level_obj.get_tiles()
+ tile_size = 24
+ bx, by = 0, 0
+ for tile_line in tiles:
+ bx = 0
+ for tile in tile_line:
+ node = Widget(size=(tile_size, tile_size), pos=(bx, by))
+ with node.canvas:
+ Color(1, 1, 1)
+ Rectangle(pos=node.pos, size=node.size,
+ texture=tile.texture)
+ self.add_widget(node)
+ bx += tile_size
+ by += tile_size
+
+ player_pos = (self.player.pos[0] * tile_size,
+ self.player.pos[1] * tile_size)
+ player_tile = Widget(size=(tile_size, tile_size),
+ pos=player_pos)
+ with player_tile.canvas:
+ Color(1, 1, 1)
+ Rectangle(pos=player_pos, size=player_tile.size,
+ texture=self.player.sprite.texture)
+ self.add_widget(player_tile)
+
+
+class GameApp(App):
+
+ def __init__(self):
+ self.level = 'level1.txt'
+ super(GameApp, self).__init__()
+
+ def build(self):
+ game = GameWindow(self.level)
+ game.build()
+ return game
+