Пример #1
0
class Manager:
    def __init__(self):
        self.wm = WorldModel()
        self.conn = Connection()


    def init(self):
        self.conn.start_server(port=config.port)
        while len(self.conn.clients) < 2:
            sleep(1)

        white_team_name = self.conn.recv(0, 32)
        self.conn.send(0, b'1')

        black_team_name = self.conn.recv(1, 32)
        self.conn.send(1, b'0')

        self.conn.send(0, black_team_name)
        self.conn.send(1, white_team_name)

        self.conn.set_all_timeouts(5)

        self.wm.init(white_team_name.decode(), black_team_name.decode())


    def run(self):
        sleep(3)

        turn = 1
        while True:
            is_white = bool(turn % 2)
            moved = False
            final_move = None

            try:
                data_bytes = self.conn.recv(0 if is_white else 1, 3)
                if data_bytes:
                    client_turn, move = Parser.decode(data_bytes)
                    if client_turn == turn:
                        if self.wm.check_move(move, is_white):
                            moved = True
                            final_move = move
            except Exception as err:
                print (err)

            if not moved:
                print ('random move')
                moves = self.wm.all_moves(is_white)
                if len(moves):
                    final_move = choice(moves)

            self.wm.do_move(final_move, is_white)
            self.conn.send2all(Parser.encode(turn, final_move))

            print (self.wm)

            w, b = self.wm.result()
            if w + b == 64:
                if w > b:
                    print ('White wins!')
                elif w < b:
                    print ('Black wins!')
                else:
                    print ('Draw!')
                break

            turn += 1
            sleep(1)


        sleep(6)
        self.conn.disconnect()