shogi/__init__.py
def sfen(self):
        '''
        Gets an SFEN representation of the current position.
        '''
        sfen = []
        empty = 0

        # Position part.
        for square in SQUARES:
            piece = self.piece_at(square)

            if not piece:
                empty += 1
            else:
                if empty:
                    sfen.append(str(empty))
                    empty = 0
                sfen.append(piece.symbol())

            if BB_SQUARES[square] & BB_FILE_1:
                if empty:
                    sfen.append(str(empty))
                    empty = 0

                if square != I1:
                    sfen.append('/')

        sfen.append(' ')

        # Side to move.
        if self.turn == WHITE:
            sfen.append('w')
        else:
            sfen.append('b')

        sfen.append(' ')

        # Pieces in hand
        pih_len = 0
        for color in COLORS:
            p = self.pieces_in_hand[color]
            pih_len += len(p)
            for piece_type in sorted(p.keys(), reverse=True):
                if p[piece_type] >= 1:
                    if p[piece_type] > 1:
                        sfen.append(str(p[piece_type]))
                    piece = Piece(piece_type, color)
                    sfen.append(piece.symbol())
        if pih_len == 0:
            sfen.append('-')

        sfen.append(' ')

        # Move count
        sfen.append(str(self.move_number))

        return ''.join(sfen)
def sfen(self):
        '''
        Gets an SFEN representation of the current position.
        '''
        sfen = []
        empty = 0

        # Position part.
        for square in SQUARES:
            piece = self.piece_at(square)

            if not piece:
                empty += 1
            else:
                if empty:
                    sfen.append(str(empty))
                    empty = 0
                sfen.append(piece.symbol())

            if BB_SQUARES[square] & BB_FILE_1:
                if empty:
                    sfen.append(str(empty))
                    empty = 0

                if square != I1:
                    sfen.append('/')

        sfen.append(' ')

        # Side to move.
        if self.turn == WHITE:
            sfen.append('w')
        else:
            sfen.append('b')

        sfen.append(' ')

        # Pieces in hand
        pih_len = 0
        for color in COLORS:
            p = self.pieces_in_hand[color]
            pih_len += len(p)
            for piece_type in sorted(p.keys(), reverse=True):
                if p[piece_type] >= 1:
                    if p[piece_type] > 1:
                        sfen.append(str(p[piece_type]))
                    piece = Piece(piece_type, color)
                    sfen.append(piece.symbol())
        if pih_len == 0:
            sfen.append('-')

        sfen.append(' ')

        # Move count
        sfen.append(str(self.move_number))

        return ''.join(sfen)
def sfen ( self ) : sfen = [ ] empty = 0 # Position part. for square in SQUARES : piece = self . piece_at ( square ) if not piece : empty += 1 else : if empty : sfen . append ( str ( empty ) ) empty = 0 sfen . append ( piece . symbol ( ) ) if BB_SQUARES [ square ] & BB_FILE_1 : if empty : sfen . append ( str ( empty ) ) empty = 0 if square != I1 : sfen . append ( '/' ) sfen . append ( ' ' ) # Side to move. if self . turn == WHITE : sfen . append ( 'w' ) else : sfen . append ( 'b' ) sfen . append ( ' ' ) # Pieces in hand pih_len = 0 for color in COLORS : p = self . pieces_in_hand [ color ] pih_len += len ( p ) for piece_type in sorted ( p . keys ( ) , reverse = True ) : if p [ piece_type ] >= 1 : if p [ piece_type ] > 1 : sfen . append ( str ( p [ piece_type ] ) ) piece = Piece ( piece_type , color ) sfen . append ( piece . symbol ( ) ) if pih_len == 0 : sfen . append ( '-' ) sfen . append ( ' ' ) # Move count sfen . append ( str ( self . move_number ) ) return '' . join ( sfen )
Gets an SFEN representation of the current position.
Gets an SFEN representation of the current position .