コード例 #1
0
ファイル: playground.py プロジェクト: lexapin/maths
class PlayGround(object):
    def __init__(self):
        self.players = []

    def clear(self):
        os.system('cls' if os.name == 'nt' else 'clear')

    def add_field(self, rows, cols, lets=[]):
        self.field = Field(rows, cols)
        for r, c in lets:
            self.field.add_let(r * cols + c)

    def add_player(self, position, destination, label='X'):
        p_r, p_c = position
        d_r, d_c = destination
        from_node = p_r * self.field.cols + p_c
        to_node = d_r * self.field.cols + d_c
        self.players.append(
            dict(
                label=label,
                position=from_node,
                destination=to_node,
                way=player_steps(self.field.way(from_node, to_node)[1:]),
            ))

    def play_step(self):
        complete_players = 0
        player_stop = False
        while True:
            if complete_players == len(self.players): break
            complete_players = 0
            for player in self.players:
                if player['position'] == player['destination']:
                    complete_players += 1
                    continue
                new_position = player['way'].__next__()
                if new_position in self.field.players:
                    seen_positions = list(self.field.players)
                    seen_positions.remove(player['position'])
                    print('Player %s find the LET' % player['label'])
                    print('Try to find new way for player %s' %
                          player['label'])
                    print(player['position'], player['destination'],
                          seen_positions)
                    print(
                        self.field.way(player['position'],
                                       player['destination'], seen_positions))
                    player['way'] = player_steps(
                        self.field.way(player['position'],
                                       player['destination'],
                                       seen_positions)[1:])
                    new_position = player['way'].__next__()
                player['position'] = new_position
                yield str(self)

    def __str__(self):
        self.field.add_players(
            {player['position']: player['label']
             for player in self.players})
        return str(self.field)