Пример #1
0
 def run(self):
     pieces = {i:Piece(val=i) for i in range(16)}
     board = Board()
     placePiece = self.p1.get_piece(board, pieces.values())
     del pieces[placePiece.val]
     nextPlayer = self.p2
     other = self.p1
     victory = None
     try:
         while board.placed < 16 and not victory:
             placePos = nextPlayer.get_placement(board, placePiece, pieces.values())
             board.place(placePiece, *placePos)
             nextPlayer.piece_placed(placePiece, placePos)
             other.piece_placed(placePiece, placePos)
             if pieces:
                 placePiece = nextPlayer.get_piece(board, pieces.values())
                 del pieces[placePiece.val]
             victory = board.check_victory(placePos)
             if nextPlayer == self.p1:
                 nextPlayer = self.p2
                 other = self.p1
             else:
                 nextPlayer = self.p1
                 other = self.p2
         self.board = board
         if victory:
             if nextPlayer == self.p1:
                 self.winner = self.p2
             else:
                 self.winner = self.p1
     except Exception, e:
         self.winner = None
         self.board = None
         self.ex = e
Пример #2
0
    def handle_message(self, message):
        move = message[0].split(' ')
        if move[0] == const.NEW_GAME:
            self.log.debug('Got new_game message from server reseting player')
            self.board = Board()
            self.pieces = {i:Piece(val=i) for i in range(16)}
            self.player.reset()
            games_left = int(move[1])
            if self.total_games == 0:
                self.log.debug('Updating total_games to: %s', games_left)
                self.total_games = games_left
                self.mod_games = self.total_games / 10.0
#            if self.mod_games > 0:
#                if self.games % self.mod_games == 0:
#                    self.log.info('We are %i%% complete!', (self.games / float(self.total_games))*100)
            if self.games % (self.mod_games) == 0:
                self.log.info('%i%% complete.', self.progress * 10)
                self.progress += 1
            self.games += 1
        elif move[0] == const.ERROR:
            self.log.warning('Got error message from server quiting')
            return False
        elif move[0] == const.GET_PIECE:
            self.log.debug('Got get_piece message from server: %s', move)
            next_piece = self.player.get_piece(self.board, self.pieces.values())
            self.log.debug('Sending piece: %s(%r) to server', next_piece, next_piece)
            self.socket.sendall(repr(next_piece.val))
        elif move[0] == const.GET_PLACEMENT:
            self.log.debug('Got get_placement message from server: %s', move)
            piece = int(move[1])
            if piece in self.pieces:
                del self.pieces[piece]
            pos = self.player.get_placement(self.board, Piece(val=piece), self.pieces.values())
            self.log.debug('Sending pos %s to server', pos)
            self.socket.sendall(repr(self.translate_pos_int(pos)))
        elif move[0] == const.PIECE_PLACED:
            self.log.debug('Got placed_piece message from server: %s', move)
            piece = int(move[1])
            if piece in self.pieces:
                del self.pieces[piece]
            self.board.place(Piece(val=int(move[1])), *self.translate_int_pos(int(move[2])))
        elif move[0] == const.SHUTDOWN:
            self.log.info('Got shutdown message')
            results = map(int, move[1:])
            total = sum(results)
            self.log.info('Board:\n%s', self.board)
            self.log.info('Wins: %s(%i%%)', move[1], (results[0] / float(total))*100)
            self.log.info('Loses: %s(%i%%)', move[2], (results[1] / float(total))*100)
            self.log.info('Ties: %s(%i%%)', move[3], (results[2] / float(total))*100)
            return False
        if len(message) > 1:
            return self.handle_message(message[1:])
        return True
Пример #3
0
 def perform_action(self, board, piece, pieces):
     our_pieces = map(lambda x: Piece(val=x), pieces)
     our_board = Board()
     for i, p in enumerate(board):
         if p:
             our_board.place(Piece(val=p), *self.__translate_int_pos(i))
     if piece == -1:
         return (self.player.get_piece(our_board, our_pieces).val, -1)
     else:
         pos = self.player.get_placement(our_board, Piece(val=piece),
                                         our_pieces)
         next_piece = self.player.get_piece(our_board, our_pieces)
         return (next_piece.val, self.__translate_pos_int(pos))