Mercurial > undermine
changeset 4:2f5c8e3409ca
map and digging
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sat, 26 Apr 2014 14:52:05 +0200 |
| parents | 1d6f23ce6acf |
| children | 022ecd420594 |
| files | undermine/display.py undermine/game.py undermine/undermine.png |
| diffstat | 3 files changed, 36 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/undermine/display.py Sat Apr 26 14:03:04 2014 +0200 +++ b/undermine/display.py Sat Apr 26 14:52:05 2014 +0200 @@ -15,8 +15,9 @@ self.screen.blit(self.background, (0, 0)) pygame.display.update() - def update(self): + def update(self, dirty=None): + dirty = dirty or [] self.sprites.clear(self.screen, self.background) self.sprites.update() - dirty = self.sprites.draw(self.screen) + dirty.extend(self.sprites.draw(self.screen)) pygame.display.update(dirty)
--- a/undermine/game.py Sat Apr 26 14:03:04 2014 +0200 +++ b/undermine/game.py Sat Apr 26 14:52:05 2014 +0200 @@ -10,32 +10,58 @@ class Game(object): def __init__(self, fps=24): + map_size = (12, 12) + self.map = [[0] * map_size[0] for y in range(map_size[1])] self.fps = fps - self.display = undermine.display.Display() + self.display = undermine.display.Display( + (len(self.map[0]) * 64, len(self.map) * 64)) self.clock = pygame.time.Clock() self.images = undermine.resources.load_atlas('undermine.png', 64) self.hero = undermine.sprites.Hero(self.images[0]) self.display.sprites.add(self.hero) + self.hero_pos = 0, 0 + + def move(self, dx, dy): + x, y = self.hero_pos + if not (0 <= x + dx <= len(self.map[0]) and + 0 <= y +dy < len(self.map)): + return + self.hero.animations.append(self.hero.move_anim(dx, dy)) + self.hero_pos = x + dx, y + dy + self.dig(self.hero_pos) + + def dig(self, (x, y), tile=1): + self.map[y][x] = tile + self.dirty.append(pygame.Rect(x * 64, y * 64, 64, 64)) + self.display.screen.blit(self.images[tile + 8], (x * 64, y * 64)) + self.display.background.blit(self.images[tile + 8], (x * 64, y * 64)) + + def draw_map(self): + for y, row in enumerate(self.map): + for x, tile in enumerate(row): + self.display.background.blit(self.images[tile + 8], + (x * 64, y * 64)) def run(self): + self.draw_map() self.display.refresh() while True: self.clock.tick(self.fps) self.tick() - self.display.update() def tick(self): + self.dirty = [] for event in pygame.event.get(): if event.type == pygame.QUIT: raise SystemExit if self.hero.ready: keys = pygame.key.get_pressed() if keys[pygame.K_RIGHT]: - self.hero.move(1, 0) + self.move(1, 0) elif keys[pygame.K_DOWN]: - self.hero.move(0, 1) + self.move(0, 1) elif keys[pygame.K_LEFT]: - self.hero.move(-1, 0) + self.move(-1, 0) elif keys[pygame.K_UP]: - self.hero.move(0, -1) - + self.move(0, -1) + self.display.update(self.dirty)
