summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--character.py43
-rwxr-xr-xtroll58
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
diff --git a/troll b/troll
index fbfcd26..0b55e6f 100755
--- a/troll
+++ b/troll
@@ -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()