Mercurial > qq-pygrafix
changeset 6:3a6e7753aa28
add box, fix sprite placement
| author | Radomir Dopieralski <moindev@sheep.art.pl> |
|---|---|
| date | Sat, 23 Aug 2008 23:08:24 +0200 |
| parents | 22fd63214aed |
| children | 49756204d145 |
| files | box.png corridor.png player.png qq.py shadow.png skeleton.png |
| diffstat | 6 files changed, 59 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/qq.py Sat Aug 23 21:18:41 2008 +0200 +++ b/qq.py Sat Aug 23 23:08:24 2008 +0200 @@ -85,20 +85,20 @@ self.animation = self.stand_animation() def _get_pos(self): - return (self.rect.midbottom[0]-12)/24, (self.rect.midbottom[1]+12)/16 + return (self.rect.midbottom[0]-12)/24, (self.rect.midbottom[1]-16)/16 def _set_pos(self, pos): - self.rect.midbottom = pos[0]*24+12, pos[1]*16+12 - self.depth = pos[1] + self.rect.midbottom = pos[0]*24+12, pos[1]*16+16 + self.depth = self.rect.midbottom[1] pos = property(_get_pos, _set_pos) def move(self, dx, dy): self.rect.move_ip(dx, dy) - self.depth = self.pos[1] + self.depth = self.rect.midbottom[1] def stand_animation(self): while True: - for frame in range(2): - self.image = self.frames[frame][0] + for frame in self.frames: + self.image = frame[0] yield None yield None yield None @@ -109,25 +109,26 @@ class Level: def __init__(self): + self.items = {} self.map = [ "xxxxxxxxxxxxxxx", - "x.x.x.x.xxx...x", - "xx.x.x.x.x....x", - "x.x.x.x.xxx...x", - "xx.x.x.x.xxxxxx", - "x.x.x.x.xxx...x", - "xx.x.x.x.xx...x", - "x.x.x.x.x.....x", - "xx.x.x.x.xx...x", - "x.x.x.x.xxx...x", - "xx.x.x.x.xxxxxx", - "x.x.x.x.xxx...x", - "xx.x.x.x.x....x", - "x.x.x.x.xxx...x", + "x.......x.x.x.x", + "x......x.x.x.xx", + "x...@.......x.x", + "x......S...x.xx", + "x...........x.x", + "xx.x.x.x...x.xx", + "x.x.x.x.....x.x", + "xx.x.b.x......x", + "x..........S..x", + "xx.xx.xxx.....x", + "x..xx.xxx...x.x", + "xx.xx.xxx....xx", + "x.....xxx...x.x", "xxxxxxxxxxxxxxx", ] - tile_image = pygame.image.load("corridor.png").convert() - tile_width, tile_height = tile_image.get_size() + tile_width, tile_height = 24, 16 + tiles = load_tiles("corridor.png", tile_width, tile_height) width = len(self.map[0]) height = len(self.map) self.image = pygame.Surface((width*tile_width, height*tile_height)) @@ -136,7 +137,15 @@ x = 0 for tile in line: if self.map[y][x] != 'x': - self.image.blit(tile_image, (x*tile_width, y*tile_height)) + self.image.blit(tiles[0][0], (x*tile_width, y*tile_height)) + elif y > 1 and self.map[y-1][x] != 'x': + self.image.blit(tiles[0][1], (x*tile_width, y*tile_height)) + if self.map[y][x] == 'S': + self.items[(x, y)] = Skeleton + if self.map[y][x] == '@': + self.items[(x, y)] = Player + if self.map[y][x] == 'b': + self.items[(x, y)] = Crate x += 1 y += 1 @@ -147,20 +156,29 @@ class Skeleton(Sprite): frames = load_tiles("skeleton.png") - def __init__(self): + def __init__(self, pos=(0, 0)): Sprite.__init__(self) - self.pos = (160, 64) # XXX Temporary, will be set on creation later + self.pos = pos + + +class Crate(Sprite): + frames = load_tiles("box.png") + + def __init__(self, pos=(0, 0)): + Sprite.__init__(self) + self.pos = pos class Player(Sprite): frames = load_tiles("player.png") - def __init__(self): + def __init__(self, pos=(1, 1)): Sprite.__init__(self) self.direction = 2 self.animation = None self.image = self.frames[self.direction][0] - self.pos = (0, 0) # XXX Temporary, will be set on creation later + self.pos = pos + self.rect.move_ip((0, 1)) def walk_animation(self): for frame in range(4): @@ -185,24 +203,29 @@ self.screen = pygame.display.get_surface() self.pressed_key = None self.game_over = False + self.use_level(Level()) + + def use_level(self, level): self.shadows = pygame.sprite.RenderUpdates() self.sprites = SortedUpdates() - self.level = Level() + self.level = level + for pos, kind in self.level.items.iteritems(): + item = kind(pos) + if kind == Player: + self.player = item + self.sprites.add(item) + self.shadows.add(Shadow(item)) self.background = self.level.image.copy() - self.player = Player() - self.sprites.add(self.player) - self.shadows.add(Shadow(self.player)) - skeleton = Skeleton() - self.sprites.add(skeleton) - self.shadows.add(Shadow(skeleton)) def control(self): keys = pygame.key.get_pressed() def pressed(key): return self.pressed_key == key or keys[key] - def walk(direction): - self.player.direction = direction - self.player.animation = self.player.walk_animation() + def walk(d): + x, y = self.player.pos + self.player.direction = d + if self.level.map[y+DY[d]][x+DX[d]] != 'x': + self.player.animation = self.player.walk_animation() if pressed(K_UP): walk(0) elif pressed(K_DOWN):
