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()
Binary file 001/dirt.png has changed
--- 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()
Binary file 001/hero.png has changed
Binary file 001/wall.png has changed