Mercurial > pygame-tutorial
annotate 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 |
| rev | line source |
|---|---|
|
5
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
3 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
4 import pygame |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
5 import pygame.locals as pg |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
6 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
7 LAYERS = [ |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
8 [ |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
9 'XxXxXXxxXxXxXxx', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
10 'x.............X', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
11 'x.............x', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
12 'x...XxXxXxX...x', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
13 'X...XxxXXxX...X', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
14 'X...XxXXxXx...x', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
15 'x.............X', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
16 'x.............X', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
17 'XXxxxXXxXxXXxXx', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
18 ], |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
19 [ |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
20 ' ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
21 ' FMMMMMMMMMMMT ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
22 ' E dWWWWWWWb K ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
23 ' E K E K ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
24 ' E K E K ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
25 ' E K E K ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
26 ' E YMMMMMMMP K ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
27 ' LWWWWWWWWWWWJ ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
28 ' ', |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
29 ], |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
30 ] |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
31 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
32 TILES = { |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
33 ' ': -1, '.': 27, 'X': 11, 'd': 2, 'K': 3, 'Y': 4, 'b': 14, 'E': 15, |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
34 'P': 16, 'M': 10, 'W': 8, 'L': 7, 'F': 6, 'J': 13, 'T': 12, 'x': 9, |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
35 } |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
36 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
37 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
38 def load_sheet(filename, width=32, height=None): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
39 if height is None: |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
40 height = width |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
41 image = pygame.image.load(filename) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
42 image = image.convert() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
43 image.set_colorkey((0xff, 0, 0xff)) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
44 w, h = image.get_size() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
45 images = [] |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
46 for x in xrange(w // width): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
47 for y in xrange(h // height): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
48 rect = pygame.rect.Rect(x * width, y * height, width, height) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
49 images.append(image.subsurface(rect)) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
50 return images |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
51 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
52 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
53 class Level(object): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
54 def __init__(self, layers, tiles): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
55 self.layers = [] |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
56 for layer in layers: |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
57 self.layers.append([[tiles[c] for c in row] for row in layer]) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
58 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
59 def render(self, screen, tilesheet): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
60 for layer in self.layers: |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
61 for y, row in enumerate(layer): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
62 for x, tile in enumerate(row): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
63 if tile >= 0: |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
64 screen.blit(tilesheet[tile], (x * 32, y * 32)) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
65 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
66 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
67 class Game(object): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
68 def __init__(self): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
69 pygame.display.init() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
70 pygame.font.init() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
71 self.screen = pygame.display.set_mode((800, 600)) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
72 self.screen.fill((0x66, 0x66, 0x66)) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
73 self.tilesheet = load_sheet('tilesheet.png') |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
74 self.font = pygame.font.Font(None, 16) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
75 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
76 def load_level(self, layers, tiles): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
77 self.level = Level(layers, tiles) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
78 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
79 def display(self): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
80 self.level.render(self.screen, self.tilesheet) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
81 pygame.display.update() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
82 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
83 def control(self): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
84 event = pygame.event.wait() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
85 if event.type == pg.QUIT: |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
86 self.game_over = True |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
87 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
88 def run(self): |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
89 self.game_over = False |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
90 while not self.game_over: |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
91 self.display() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
92 self.control() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
93 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
94 |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
95 if __name__ == '__main__': |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
96 game = Game() |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
97 game.load_level(LAYERS, TILES) |
|
03fe34478f69
Using tiled for maps
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff
changeset
|
98 game.run() |
