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