diff options
-rw-r--r-- | character.py | 43 | ||||
-rwxr-xr-x | troll | 58 |
2 files changed, 58 insertions, 43 deletions
diff --git a/character.py b/character.py new file mode 100644 index 0000000..665bd19 --- /dev/null +++ b/character.py @@ -0,0 +1,43 @@ +import pygame + +from tileset import Tileset + +class Character(object): + movement = [0, 0] + + def __init__(self, tilesize): + self.tilesize = tilesize + self.render_x = 0 + self.render_y = 13*tilesize + + def frame(self, keys): + # are we done moving? + if self.render_x % self.tilesize == 0: + self.movement[0] = 0 + if self.render_y % self.tilesize == 0: + self.movement[1] = 0 + + SPEED = 2 + direction = None + # can we start moving? + if self.movement[1] == 0: + if keys[pygame.K_DOWN]: + self.movement[1] = SPEED + direction = Tileset.DOWN + elif keys[pygame.K_UP]: + self.movement[1] = -SPEED + direction = Tileset.UP + if self.movement[0] == 0: + if keys[pygame.K_RIGHT]: + self.movement[0] = SPEED + if not self.movement[1]: # prefer up/down when moving diagonally + direction = Tileset.RIGHT + elif keys[pygame.K_LEFT]: + self.movement[0] = -SPEED + if not self.movement[1]: + direction = Tileset.LEFT + + # move! + self.render_x += self.movement[0] + self.render_y += self.movement[1] + return direction @@ -5,16 +5,16 @@ import sys import pygame from tileset import Tileset +from character import Character pygame.init() screen = pygame.display.set_mode((800, 800)) tileset = Tileset(screen) tileset.load_level() +character = Character(tileset.tilesize) clock = pygame.time.Clock() black = (0, 0, 0) -render_x = 0 -render_y = 13*tileset.tilesize keys = { pygame.K_LEFT: False, @@ -22,53 +22,25 @@ keys = { pygame.K_UP: False, pygame.K_DOWN: False, } -def handle_event(event): - if event.type == pygame.KEYDOWN: - if event.key in keys.iterkeys(): - keys[event.key] = True - elif event.type == pygame.KEYUP: - if event.key in keys.iterkeys(): - keys[event.key] = False - elif event.type == pygame.QUIT: - sys.exit() direction = Tileset.RIGHT -movement = [0, 0] while True: clock.tick(60) for event in pygame.event.get(): - handle_event(event) - - # are we done moving? - if render_x % tileset.tilesize == 0: - movement[0] = 0 - if render_y % tileset.tilesize == 0: - movement[1] = 0 - - SPEED = 2 - # can we start moving? - if movement[1] == 0: - if keys[pygame.K_DOWN]: - movement[1] = SPEED - direction = Tileset.DOWN - elif keys[pygame.K_UP]: - movement[1] = -SPEED - direction = Tileset.UP - if movement[0] == 0: - if keys[pygame.K_RIGHT]: - movement[0] = SPEED - if not movement[1]: # prefer up/down when moving diagonally - direction = Tileset.RIGHT - elif keys[pygame.K_LEFT]: - movement[0] = -SPEED - if not movement[1]: - direction = Tileset.LEFT - - # move! - render_x += movement[0] - render_y += movement[1] + if event.type == pygame.KEYDOWN: + if event.key in keys.iterkeys(): + keys[event.key] = True + elif event.type == pygame.KEYUP: + if event.key in keys.iterkeys(): + keys[event.key] = False + elif event.type == pygame.QUIT: + sys.exit() + + new_direction = character.frame(keys) + if new_direction is not None: + direction = new_direction screen.fill(black) tileset.render_level() - tileset.render_person((render_x, render_y), direction) + tileset.render_person((character.render_x, character.render_y), direction) pygame.display.flip() |