From 2966f4632c6c80b5a1a279a908831150092ad09f Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 23 Aug 2017 23:19:06 +0200 Subject: [PATCH] Add ArgumentError class, improve positioning command. --- client.py | 36 +++++++++++++++++++++++------------- server.py | 4 ++-- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/client.py b/client.py index 2e30fe0..45ef9f8 100755 --- a/client.py +++ b/client.py @@ -6,6 +6,10 @@ import socket import threading +class ArgumentError(Exception): + pass + + class UrwidSetup: def __init__(self, socket): @@ -73,7 +77,7 @@ class UrwidSetup: class MapWidget(urwid.Text): """Stores/updates/draws game map.""" terrain_map = ' ' * 25 - position = [0, 0] + position = (0, 0) def draw_map(self): """Draw map view from .terrain_map, .position.""" @@ -89,14 +93,21 @@ class UrwidSetup: self.terrain_map = terrain_map self.draw_map() - def update_position_y(self, position_y_string): - """Update self.position[0].""" - self.position[0] = int(position_y_string) - self.draw_map() - - def update_position_x(self, position_x_string): - """Update self.position[1].""" - self.position[1] = int(position_x_string) + def update_position(self, position_string): + """Update self.position.""" + + def get_axis_position_from_argument(axis, token): + if len(token) < 3 or token[:2] != axis + ':' or \ + not token[2:].isdigit(): + raise ArgumentError('Bad arg for ' + axis + ' position.') + return int(token[2:]) + + tokens = position_string.split(',') + if len(tokens) != 2: + raise ArgumentError('wrong number of ","-separated arguments') + y = get_axis_position_from_argument('y', tokens[0]) + x = get_axis_position_from_argument('x', tokens[1]) + self.position = (y, x) self.draw_map() class InputHandler: @@ -144,10 +155,9 @@ class UrwidSetup: try: found_command = ( mapdraw_command('TERRAIN\n', 'update_terrain') or - mapdraw_command('POSITION_Y ', 'update_position_y') or - mapdraw_command('POSITION_X ', 'update_position_x')) - except Exception as e: - self.widget1.set_text('TROUBLESOME ARGUMENT: ' + msg + '\n' + + mapdraw_command('POSITION ', 'update_position')) + except ArgumentError as e: + self.widget1.set_text('BAD ARGUMENT: ' + msg + '\n' + str(e)) else: if not found_command: diff --git a/server.py b/server.py index a840bd7..90e8c0b 100755 --- a/server.py +++ b/server.py @@ -149,8 +149,8 @@ class CommandHandler: self.world.turn += 1 self.send_all('NEW_TURN ' + str(self.world.turn)) self.send_all('TERRAIN\n' + self.world.map_) - self.send_all('POSITION_Y ' + str(self.world.player_pos[0])) - self.send_all('POSITION_X ' + str(self.world.player_pos[1])) + self.send_all('POSITION y:' + str(self.world.player_pos[0]) + + ',x:' + str(self.world.player_pos[1])) self.pool_result = self.pool.map_async(fib, (35, 35)) def cmd_get_turn(self, connection_id): -- 2.30.2