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()