Mercurial > pygame-tutorial
view 001/005.py @ 12:9dc97f88e274 default tip
Added CC0 license
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 08 Jul 2012 19:56:38 +0200 |
| parents | 2661d2091f1d |
| children |
line wrap: on
line source
#!/usr/bin/env python # -*- coding: utf-8 -*- import pygame import pygame.locals as pg LEVEL_MAP = [ "XXXXXXXXXXXXXXXXXXXXXXXXX", "X.......................X", "X.XXXXXXXXXX.XXXXXXXXXX.X", "X.X......X.X..........X.X", "X.X..X.XXX.X.XXXXXXXXXX.X", "X.XXXX.....X.......X..X.X", "X......XXXXXXXXXXX.X..X.X", "X.XX.X.X.........X....X.X", "X.X..X...........X.X..X.X", "X.X..X.X.........X.X..X.X", "X.X..X.XXXXXXXXXXX.XXXX.X", "X.XXXX..................X", "X.X..X.XXXXXXXXXXXXXXXX.X", "X.X..X................X.X", "X.X....X..............X.X", "X.XXXX.XXXXXXXXXXXXXXXX.X", "X.......................X", "XXXXXXXXXXXXXXXXXXXXXXXXX", ] class Level(object): def __init__(self, level_map): self.level_map = [list(row) for row in level_map] self.hero_position = 1, 1 self[self.hero_position] = '@' def __setitem__(self, (x, y), square): self.level_map[y][x] = square def __getitem__(self, (x, y)): return self.level_map[y][x] def render(self, screen, images): for y, row in enumerate(self.level_map): for x, square in enumerate(row): screen.blit(images[square], (x * 32, y * 32)) def move_hero(self, (dx, dy)): x, y = self.hero_position if self[x + dx, y + dy] == '.': self[self.hero_position] = '.' self.hero_position = x + dx, y + dy self[self.hero_position] = '@' def initialize_screen(): pygame.display.init() screen = pygame.display.set_mode((800, 600)) screen.fill((0x66, 0x66, 0x66)) return screen def load_images(): images = { 'X': pygame.image.load('wall.png').convert(), '.': pygame.image.load('dirt.png').convert(), '@': pygame.image.load('hero.png').convert(), } return images def walk_around(screen, images, level): while True: level.render(screen, images) pygame.display.update() event = pygame.event.wait() if event.type == pg.QUIT: return elif event.type == pg.KEYDOWN: if event.key == pg.K_ESCAPE: return elif event.key == pg.K_DOWN: level.move_hero((0, 1)) elif event.key == pg.K_UP: level.move_hero((0, -1)) elif event.key == pg.K_LEFT: level.move_hero((-1, 0)) elif event.key == pg.K_RIGHT: level.move_hero((1, 0)) def run_game(): screen = initialize_screen() images = load_images() level = Level(LEVEL_MAP) walk_around(screen, images, level) if __name__ == '__main__': run_game()
