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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()