view 001/004.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",
]

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 draw_map(screen, images, level_map):
    for y, row in enumerate(level_map):
        for x, square in enumerate(row):
            screen.blit(images[square], (x * 32, y * 32))

def move_hero(level_map, x, y, dx, dy):
    if level_map[y + dy][x + dx] == '.':
        level_map[y][x] = '.'
        x += dx
        y += dy
        level_map[y][x] = '@'
    return x, y

def walk_around(screen, images, level_map):
    hero_x, hero_y = 1, 1
    level_map = [list(row) for row in level_map]
    level_map[hero_y][hero_x] = '@'
    while True:
        draw_map(screen, images, level_map)
        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:
                hero_x, hero_y = move_hero(level_map, hero_x, hero_y, 0, 1)
            elif event.key == pg.K_UP:
                hero_x, hero_y = move_hero(level_map, hero_x, hero_y, 0, -1)
            elif event.key == pg.K_LEFT:
                hero_x, hero_y = move_hero(level_map, hero_x, hero_y, -1, 0)
            elif event.key == pg.K_RIGHT:
                hero_x, hero_y = move_hero(level_map, hero_x, hero_y, 1, 0)

def run_game():
    screen = initialize_screen()
    images = load_images()
    walk_around(screen, images, LEVEL_MAP)


if __name__ == '__main__':
    run_game()