Mercurial > pygame-tutorial
changeset 3:e957564f94bb
Second program
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Fri, 15 Jun 2012 00:09:01 +0200 |
| parents | ee28ba29d97e |
| children | 2661d2091f1d |
| files | 000/006.py 001/dirt.png 001/game.py 001/hero.png 001/wall.png |
| diffstat | 5 files changed, 82 insertions(+), 41 deletions(-) [+] |
line wrap: on
line diff
--- a/000/006.py Thu Jun 14 17:19:27 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import pygame -import pygame.locals as pg - - -def initialize_screen(): - """Initialize pygame, create a window and fill it with gray. - Return the screen surface. - """ - pygame.display.init() - screen = pygame.display.set_mode((800, 600)) - screen.fill((0x66, 0x66, 0x66)) - return screen - -def load_and_display_image(screen): - """Load the image and display it in the middle of the screen.""" - image = pygame.image.load('cup.png') - image = image.convert() - image.set_colorkey((0xff, 0x00, 0xff)) - screen_rect = screen.get_rect() - image_rect = image.get_rect() - image_rect.center = screen_rect.center - screen.blit(image, image_rect) - -def wait_for_quit(): - """Sit there doing nothing until the window is closed.""" - clock = pygame.time.Clock() - pygame.display.update() - while True: - event = pygame.event.wait() - if event.type == pg.QUIT: - return - clock.tick(60) - - -if __name__ == '__main__': - screen = initialize_screen() - load_and_display_image(screen) - wait_for_quit()
--- a/001/game.py Thu Jun 14 17:19:27 2012 +0200 +++ b/001/game.py Fri Jun 15 00:09:01 2012 +0200 @@ -1,3 +1,85 @@ #!/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()
