将棋AIで学ぶディープラーニングを読む

7-3 python-shogi

駒移動(bitboard)
def shogi.shift_down(b)
    bitboardを引数にとり、全てのbitを1rank下げた(BLACK側から見て)bitboardを返す。引数のbitboardには影響はない。
def shigi.shift_2_down(b)
    bitboardを引数にとり、全てのbitを2rank下げた(BLACK側から見て)bitboardを返す。引数のbitboardには影響はない。
def shogi.shift_up(b)
    bitboardを引数にとり、全てのbitを1rank上にあげるた(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_2_up(b)
    bitboardを引数にとり、全てのbitを2rank上にあげるた(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_right(b)
    bitboardを引数にとり、全てのbitを1bit右に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_2_right(b)
    bitboardを引数にとり、全てのbitを2bit右に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_left(b)
    bitboardを引数にとり、全てのbitを1bit左に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_2_left(b)
    bitboardを引数にとり、全てのbitを2bit左に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_up_left(b)
    bitboardを引数にとり、全てのbitを左上に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_up_right(b)
    bitboardを引数にとり、全てのbitを右上に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_down_left(b)
    bitboardを引数にとり、全てのbitを左下に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。
def shogi.shift_down_right(b)
    bitboardを引数にとり、全てのbitを右下に動かした(BLACK側から見て)bitboardを返す。引数のbitboardに影響はない。

駒成り判定
def can_promote(square, piece_type, color)
    指定座標、指定駒種、指定カラーでなることが可能であればTrueそうでなければFalse
def can_move_without_promotion(to_square, piece_type, color)
    piece_typeがPAWN,LANCE,KNIGHTについて移動先での死に駒判定を行っている。死に駒になるならFalseそうでなければTrue。

クラス Occupled(object) 
    Boardクラスの下でbitboardを管理している
    def __init__(self, occupied_by_black, occupied_by_white)
        self.by_color=black側,white側のbitboardを配列に入れている
        self.bits=black,white両方を1つのbitboardで管理している
        self.l90=左90度回転のbitboardを管理
        self.r45=右45度回転のbitboardを管理
        self.l45=左45度回転のbitboardを管理
    def __getitem__(self,key)
        Occupled[color]そのカラーのbitboardを返す
    def ixor(self,mask,color,square)
        maskで指定されたbitboardとOccupledで管理しているbitboardを排他bit演算してbitboardを更新させる
    def non_occupled(self)
        空いている座標をbitを立てたbitboardを返す
    def __eq__(self,occupled)
        bitboard同士を比較して同じであればTrueを返す
    def __ne__(self,occupled)
        bitboard同士を比較して異なればTrueを返す。等しければFalseを返す
    def __repr__(self)
         by_color配列をプリントする(10進数)
         print(bd.occupied)
         Occupied([2414337516468818170347520, 134022655])