|
|
@@ -5,16 +5,40 @@ import sys
|
|
|
|
|
|
class Tileset(object):
|
|
|
tilesize = 16
|
|
|
+ RIGHT = 0
|
|
|
+ DOWN = 1
|
|
|
+ LEFT = 2
|
|
|
+ UP = 3
|
|
|
|
|
|
def __init__(self, screen):
|
|
|
self.screen = screen
|
|
|
- self.tileset = pygame.image.load('tileset.png').convert()
|
|
|
+ image = pygame.image.load('tileset.png').convert()
|
|
|
+ self.tileset = {
|
|
|
+ self.RIGHT: image,
|
|
|
+ self.UP: pygame.transform.rotate(image, 90),
|
|
|
+ self.LEFT: pygame.transform.rotate(image, 180),
|
|
|
+ self.DOWN: pygame.transform.rotate(image, 270),
|
|
|
+ }
|
|
|
+ self.tile_width, self.tile_height = image.get_size()
|
|
|
+ self.tile_width /= self.tilesize
|
|
|
+ self.tile_height /= self.tilesize
|
|
|
|
|
|
- def _render(self, tile_x, tile_y, pos):
|
|
|
- self.screen.blit(self.tileset, pos, (tile_x, tile_y*self.tilesize, self.tilesize, self.tilesize))
|
|
|
+ def _render(self, tile_x, tile_y, pos, direction=RIGHT):
|
|
|
+ tileset = self.tileset[direction]
|
|
|
+ if direction == self.RIGHT:
|
|
|
+ x, y = tile_x, tile_y
|
|
|
+ elif direction == self.UP:
|
|
|
+ x, y = tile_y, self.tile_width - tile_x - 1
|
|
|
+ elif direction == self.LEFT:
|
|
|
+ x, y = self.tile_width - tile_x - 1, self.tile_height - tile_y - 1
|
|
|
+ elif direction == self.DOWN:
|
|
|
+ x, y = self.tile_height -tile_y - 1, tile_x
|
|
|
+ x *= self.tilesize
|
|
|
+ y *= self.tilesize
|
|
|
+ self.screen.blit(tileset, pos, (x, y, self.tilesize, self.tilesize))
|
|
|
|
|
|
- def render_person(self, pos):
|
|
|
- self._render(0, 13, pos)
|
|
|
+ def render_person(self, pos, direction):
|
|
|
+ self._render(0, 13, pos, direction)
|
|
|
|
|
|
size = width, height = 640, 480
|
|
|
black = (0, 0, 0)
|
|
|
@@ -42,6 +66,7 @@ def handle_event(event):
|
|
|
elif event.type == pygame.QUIT:
|
|
|
sys.exit()
|
|
|
|
|
|
+direction = Tileset.RIGHT
|
|
|
while True:
|
|
|
clock.tick(60)
|
|
|
for event in pygame.event.get():
|
|
|
@@ -50,13 +75,17 @@ while True:
|
|
|
SPEED = 4
|
|
|
if keys[pygame.K_RIGHT]:
|
|
|
render_x += SPEED
|
|
|
+ direction = Tileset.RIGHT
|
|
|
if keys[pygame.K_LEFT]:
|
|
|
render_x -= SPEED
|
|
|
+ direction = Tileset.LEFT
|
|
|
if keys[pygame.K_DOWN]:
|
|
|
render_y += SPEED
|
|
|
+ direction = Tileset.DOWN
|
|
|
if keys[pygame.K_UP]:
|
|
|
render_y -= SPEED
|
|
|
+ direction = Tileset.UP
|
|
|
|
|
|
screen.fill(black)
|
|
|
- tileset.render_person((render_x, render_y))
|
|
|
+ tileset.render_person((render_x, render_y), direction)
|
|
|
pygame.display.flip()
|