X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/copy_structured?a=blobdiff_plain;f=server_%2Fgame.py;h=4f31dc1fb5ff397665fa3b71143f4961d92085cb;hb=827134a13175939231b85fbc159c013e0f024e78;hp=878917fbda7711a741c53a981737be741942ffda;hpb=71a615834e518a028e246d072d8bd5931e78405b;p=plomrogue2-experiments diff --git a/server_/game.py b/server_/game.py index 878917f..4f31dc1 100644 --- a/server_/game.py +++ b/server_/game.py @@ -19,11 +19,19 @@ def move_pos(direction, pos_yx): pos_yx[1] -= 1 +class Map(game_common.Map): + + def get_line(self, y): + width = self.size[1] + return self.terrain[y * width:(y + 1) * width] + + class World(game_common.World): def __init__(self): super().__init__() self.Thing = Thing # use local Thing class instead of game_common's + self.map_ = Map() # use extended child class self.player_id = 0 def proceed_to_next_player_turn(self): @@ -72,13 +80,16 @@ class Task: test_pos = self.thing.position[:] move_pos(direction, test_pos) if test_pos[0] < 0 or test_pos[1] < 0 or \ - test_pos[0] >= self.thing.world.map_size[0] or \ - test_pos[1] >= self.thing.world.map_size[1]: + test_pos[0] >= self.thing.world.map_.size[0] or \ + test_pos[1] >= self.thing.world.map_.size[1]: raise GameError('would move outside map bounds') - pos_i = test_pos[0] * self.thing.world.map_size[1] + test_pos[1] - map_tile = self.thing.world.terrain_map[pos_i] + pos_i = test_pos[0] * self.thing.world.map_.size[1] + test_pos[1] + map_tile = self.thing.world.map_.terrain[pos_i] if map_tile != '.': raise GameError('would move into illegal terrain') + for t in self.thing.world.things: + if t.position == test_pos: + raise GameError('would move into other thing') class Thing(game_common.Thing): @@ -133,6 +144,9 @@ class Thing(game_common.Thing): if is_AI and self.task is None: self.decide_task() + def get_visible_map(self): + return Map(self.world.map_.size, self.world.map_.terrain) + class Commander(): @@ -150,16 +164,20 @@ class Commander(): self.world.get_player().set_task('wait') self.proceed() - def cmd_GET_TURN(self, connection_id): - """Send world.turn to caller.""" - self.send_to(connection_id, str(self.world.turn)) + def cmd_GET_GAMESTATE(self, connection_id): + """Send game state jto caller.""" + self.send_gamestate(connection_id) def cmd_ECHO(self, msg, connection_id): """Send msg to caller.""" - self.send_to(connection_id, msg) + self.send(msg, connection_id) cmd_ECHO.argtypes = 'string' def cmd_ALL(self, msg, connection_id): """Send msg to all clients.""" - self.send_all(msg) + self.send(msg) cmd_ALL.argtypes = 'string' + + def cmd_TERRAIN_LINE(self, y, terrain_line): + self.world.map_.set_line(y, terrain_line) + cmd_TERRAIN_LINE.argtypes = 'int:nonneg string'