Mercurial > fhrl
changeset 8:5c4c86502a2f
Separate display class
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Tue, 12 Mar 2013 14:50:30 +0100 |
| parents | 006f78dd763f |
| children | 3094d51c1dc7 |
| files | fhrl/__main__.py fhrl/rocks.png |
| diffstat | 2 files changed, 51 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/fhrl/__main__.py Tue Mar 12 12:29:08 2013 +0100 +++ b/fhrl/__main__.py Tue Mar 12 14:50:30 2013 +0100 @@ -110,9 +110,11 @@ for i in xrange(20) ] self.items = [ - Item(self.resources.items[0], self.free.pop()) + Item(self.resources.items[random.randrange(4)], self.free.pop()) for i in xrange(20) ] + x, y = self.free.pop() + self.grid[y][x] = 5 def __iter__(self): @@ -200,28 +202,25 @@ return False -class Game(object): +class Display(object): def __init__(self): self.width = 480 self.height = 480 - self.margin = 64 self.x, self.y = 0, 0 self.screen = pygame.display.set_mode((self.width, self.height)) self.clock = pygame.time.Clock() - self.resources = Resources() - self.level = Level((32, 32), self.resources) + self.animations = [] + + def load_level(self, level): self.background = pygame.Surface( - (self.level.width * 48 - 48, self.level.height * 32 - 32) + (level.width * 48 - 48, level.height * 32 - 32) ) - self.level.render(self.background) - self.init_sprites() - - def init_sprites(self): + level.render(self.background) self.sprites = SortedUpdates() - self.sprites.add(self.level.hero) - for m in self.level.monsters: + self.sprites.add(level.hero) + for m in level.monsters: self.sprites.add(m) - for i in self.level.items: + for i in level.items: self.sprites.add(i) def _scroll_anim(self, dx, dy): @@ -270,43 +269,54 @@ self.sprites.draw(self.screen) pygame.display.flip() + def play_animations(self): + while self.animations: + cont = [] + for anim in self.animations: + try: + anim.next() + except StopIteration: + pass + else: + cont.append(anim) + self.animations = cont + self.update() + +class Game(object): + def __init__(self): + self.margin = 64 + self.resources = Resources() + self.display = Display() + self.level = Level((32, 32), self.resources) + self.display.load_level(self.level) + def run(self): - self.scroll_by( - self.level.hero.x * 48 - self.width // 2, - self.level.hero.y * 32 - self.height // 2, + self.display.scroll_by( + self.level.hero.x * 48 - self.display.width // 2, + self.level.hero.y * 32 - self.display.height // 2, True ) - self.update_all() + self.display.update_all() while True: - self.animations = [] - while not self.animations: + while True: anim = self.level.hero.act(self.level) if anim: - self.animations.append(anim) - self.update() + self.display.animations.append(anim) + break + self.display.update() for m in self.level.monsters: anim = m.act(self.level) if anim: - self.animations.append(anim) - if self.level.hero.rect.right > self.width - self.margin: - self.scroll_by(48, 0) - if self.level.hero.rect.bottom > self.height - self.margin: - self.scroll_by(0, 32) - if self.level.hero.rect.left < self.margin: - self.scroll_by(-48, 0) - if self.level.hero.rect.top < self.margin: - self.scroll_by(0, -32) - while self.animations: - cont = [] - for anim in self.animations: - try: - anim.next() - except StopIteration: - pass - else: - cont.append(anim) - self.animations = cont - self.update() + self.display.animations.append(anim) + if self.level.hero.rect.right > self.display.width - self.margin: + self.display.scroll_by(48, 0) + elif self.level.hero.rect.left < self.margin: + self.display.scroll_by(-48, 0) + if self.level.hero.rect.bottom > self.display.height - self.margin: + self.display.scroll_by(0, 32) + elif self.level.hero.rect.top < self.margin: + self.display.scroll_by(0, -32) + self.display.play_animations() pygame.display.init() Game().run()
