X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/%7B%7Bdeck_id%7D%7D/cards/%7B%7Bcard_id%7D%7D/form?a=blobdiff_plain;f=server_%2Fgame.py;h=60c0f4726950d0756dc6a8a255e1583fb2c41559;hb=9c3865bbfc4fe7721f8c2f057bce85e2300ea528;hp=ea3649732b20eb8f729f79545d07e6c498c68935;hpb=fb11e52f4e70470336504c84e4b05f3a3b6a9790;p=plomrogue2-experiments diff --git a/server_/game.py b/server_/game.py index ea36497..60c0f47 100644 --- a/server_/game.py +++ b/server_/game.py @@ -44,14 +44,22 @@ class Map(game_common.Map): directions += [name[5:]] return directions - def get_position_index(self, yx): - return yx[0] * self.size[1] + yx[1] - def new_from_shape(self, init_char): return Map(self.size, init_char*self.size_i) + #def are_neighbors(self, pos_1, pos_2): + # return abs(pos_1[0] - pos_2[0]) <= 1 and abs(pos_1[1] - pos_2[1] <= 1) + def are_neighbors(self, pos_1, pos_2): - return abs(pos_1[0] - pos_2[0]) <= 1 and abs(pos_1[1] - pos_2[1] <= 1) + if pos_1[0] == pos_2[0] and abs(pos_1[1] - pos_2[1] <= 1): + return True + elif abs(pos_1[0] - pos_2[0]) == 1: + if pos_1[0] % 2 == 0: + if pos_2[1] in (pos_1[1], pos_1[1] - 1): + return True + elif pos_2[1] in (pos_1[1], pos_1[1] + 1): + return True + return False def move(self, start_pos, direction): mover = getattr(self, 'move_' + direction) @@ -61,24 +69,49 @@ class Map(game_common.Map): raise GameError('would move outside map bounds') return new_pos - def move_UP(self, start_pos): - return [start_pos[0] - 1, start_pos[1]] - - def move_DOWN(self, start_pos): - return [start_pos[0] + 1, start_pos[1]] - def move_LEFT(self, start_pos): return [start_pos[0], start_pos[1] - 1] def move_RIGHT(self, start_pos): return [start_pos[0], start_pos[1] + 1] + #def move_UP(self, start_pos): + # return [start_pos[0] - 1, start_pos[1]] + + #def move_DOWN(self, start_pos): + # return [start_pos[0] + 1, start_pos[1]] + + def move_UPLEFT(self, start_pos): + if start_pos[0] % 2 == 0: + return [start_pos[0] - 1, start_pos[1] - 1] + else: + return [start_pos[0] - 1, start_pos[1]] + + def move_UPRIGHT(self, start_pos): + if start_pos[0] % 2 == 0: + return [start_pos[0] - 1, start_pos[1]] + else: + return [start_pos[0] - 1, start_pos[1] + 1] + + def move_DOWNLEFT(self, start_pos): + if start_pos[0] % 2 == 0: + return [start_pos[0] + 1, start_pos[1] - 1] + else: + return [start_pos[0] + 1, start_pos[1]] + + def move_DOWNRIGHT(self, start_pos): + if start_pos[0] % 2 == 0: + return [start_pos[0] + 1, start_pos[1]] + else: + return [start_pos[0] + 1, start_pos[1] + 1] + 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 local Map class instead of game_common's self.map_ = Map() # use extended child class self.player_id = 0 @@ -244,7 +277,7 @@ class Game(game_common.CommonCommandsMixin): return 'Y:' + str(tuple_[0]) + ',X:' + str(tuple_[1]) self.io.send('NEW_TURN ' + str(self.world.turn)) - self.io.send('MAP_SIZE ' + stringify_yx(self.world.map_.size)) + self.io.send('MAP ' + stringify_yx(self.world.map_.size)) visible_map = self.world.get_player().get_visible_map() for y, line in visible_map.lines(): self.io.send('VISIBLE_MAP_LINE %5s %s' % (y, self.io.quote(line)))