Mercurial > pygame-tutorial
view 002/002.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 | 03fe34478f69 |
| children |
line wrap: on
line source
#!/usr/bin/env python # -*- coding: utf-8 -*- import pygame import pygame.locals as pg LAYERS = [ [ 'XxXxXXxxXxXxXxx', 'x.............X', 'x.............x', 'x...XxXxXxX...x', 'X...XxxXXxX...X', 'X...XxXXxXx...x', 'x.............X', 'x.............X', 'XXxxxXXxXxXXxXx', ], [ ' ', ' FMMMMMMMMMMMT ', ' E dWWWWWWWb K ', ' E K E K ', ' E K E K ', ' E K E K ', ' E YMMMMMMMP K ', ' LWWWWWWWWWWWJ ', ' ', ], ] TILES = { ' ': -1, '.': 27, 'X': 11, 'd': 2, 'K': 3, 'Y': 4, 'b': 14, 'E': 15, 'P': 16, 'M': 10, 'W': 8, 'L': 7, 'F': 6, 'J': 13, 'T': 12, 'x': 9, } def load_sheet(filename, width=32, height=None): if height is None: height = width image = pygame.image.load(filename) image = image.convert() image.set_colorkey((0xff, 0, 0xff)) w, h = image.get_size() images = [] for x in xrange(w // width): for y in xrange(h // height): rect = pygame.rect.Rect(x * width, y * height, width, height) images.append(image.subsurface(rect)) return images class Level(object): def __init__(self, layers, tiles): self.layers = [] for layer in layers: self.layers.append([[tiles[c] for c in row] for row in layer]) def render(self, screen, tilesheet): for layer in self.layers: for y, row in enumerate(layer): for x, tile in enumerate(row): if tile >= 0: screen.blit(tilesheet[tile], (x * 32, y * 32)) class Game(object): def __init__(self): pygame.display.init() pygame.font.init() self.screen = pygame.display.set_mode((800, 600)) self.screen.fill((0x66, 0x66, 0x66)) self.tilesheet = load_sheet('tilesheet.png') self.font = pygame.font.Font(None, 16) def load_level(self, layers, tiles): self.level = Level(layers, tiles) def display(self): self.level.render(self.screen, self.tilesheet) pygame.display.update() def control(self): event = pygame.event.wait() if event.type == pg.QUIT: self.game_over = True def run(self): self.game_over = False while not self.game_over: self.display() self.control() if __name__ == '__main__': game = Game() game.load_level(LAYERS, TILES) game.run()
