From b28198fc51a256d3e1ac9d3f983aff05c6ace25a Mon Sep 17 00:00:00 2001 From: Jeremy Thurgood Date: Mon, 12 May 2014 23:18:45 +0200 Subject: [PATCH] Move the player. --- naja/player.py | 25 +++++++++++++++++++++++++ naja/widgets/robot.py | 23 ++++++++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/naja/player.py b/naja/player.py index 97422b8..fa6e1e9 100644 --- a/naja/player.py +++ b/naja/player.py @@ -1,3 +1,4 @@ +from naja.constants import BITS class PlayerBits(object): @@ -67,3 +68,27 @@ class Player(object): 'bits': self.bits.bits, 'position': list(self.position), } + + def move(self, direction): + if not self.bits.check_bit(direction): + return False + # TODO: Something cleaner than this. + x, y = self.position + if direction == BITS.NORTH: + if y > 0: + self.position = (x, y - 1) + return True + elif direction == BITS.SOUTH: + if y < 4: + self.position = (x, y + 1) + return True + elif direction == BITS.EAST: + if x < 4: + self.position = (x + 1, y) + return True + elif direction == BITS.WEST: + if x > 0: + self.position = (x - 1, y) + return True + + return False diff --git a/naja/widgets/robot.py b/naja/widgets/robot.py index 7e218a9..4506edf 100644 --- a/naja/widgets/robot.py +++ b/naja/widgets/robot.py @@ -1,8 +1,9 @@ """Widget to draw the player on the screen""" -import pygame + import pygame.locals as pgl from naja.constants import PLAYER_SIZE, BIT_SIZE, TILE_SIZE, BITS +from naja.events import InvalidateTheWorld from naja.resources import resources from naja.resources.mutators import EIGHT_BIT from naja.widgets.base import Widget @@ -36,3 +37,23 @@ class RobotWidget(Widget): def draw(self, surface): surface.blit(self.surface, self.rect) + + def handle_event(self, ev): + if ev.type == pgl.KEYDOWN: + if ev.key in (pgl.K_UP, pgl.K_w): + if self.state.player.move(BITS.NORTH): + InvalidateTheWorld.post() + return True + if ev.key in (pgl.K_DOWN, pgl.K_s): + if self.state.player.move(BITS.SOUTH): + InvalidateTheWorld.post() + return True + if ev.key in (pgl.K_LEFT, pgl.K_a): + if self.state.player.move(BITS.WEST): + InvalidateTheWorld.post() + return True + if ev.key in (pgl.K_RIGHT, pgl.K_d): + if self.state.player.move(BITS.EAST): + InvalidateTheWorld.post() + return True + super(RobotWidget, self).handle_event(ev) -- 2.34.1