7.5~7.7 read_kifu.py read_kifu() Argument: Eine Textdatei, in der die Pfade der Score-Datei aufgelistet sind Ausgabe: ("Phasendiagramm", "Verschieben", "Gewinnen / Verlieren") wird für jede Phase berechnet, eine Phase wird als ein Element zur Liste hinzugefügt, und wenn die gesamte Punktzahl gelesen wurde, wird sie als eine Liste ausgegeben. Die Daten für eine Phase bestehen aus den folgenden fünf Elementen. -piece_bb: 15 Elemente -belegt: 2 Elemente -pieces_in_hand: 2 Elemente -move_label: 1 Element -win: 1 Element Die endgültige Ausgabe ist [([15 Elemente], [2 Elemente], [2 Elemente], [1 Element], [1 Element]), (gleiche Menge), ... ist die Anzahl der Schritte x Anzahl der Spiele]
python-dlshogi\pydlshogi\read_kifu.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import shogi
import shogi.CSA
import copy
from pydlshogi.features import *
from pydlshogi.common import * ##################test
# read kifu
def read_kifu(kifu_list_file):
i = 0
positions = []
with open(kifu_list_file, 'r') as f:
for line in f.readlines():
filepath = line.rstrip('\r\n')
i += 1
print(i)
#Ordnen Sie die Score-Daten der Variablen kifu zu.
#Die Score-Daten sind ein Wörterbuch mit vier Schlüsseln: Namen, sfen, Züge und Gewinn.
#Dieses Wörterbuch ist als Element in der Liste enthalten.[0]Nehmen Sie nur das Wörterbuch mit heraus.
kifu = shogi.CSA.Parser.parse_file(filepath)[0]
win_color = shogi.BLACK if kifu['win'] == 'b' else shogi.WHITE
board = shogi.Board()
for move in kifu['moves']:
# ■board:print(board)Sie können die Karte in zwei Dimensionen mit anzeigen.
# ■piece_bb: Ein Array von 15 Elementen. Jedes Element gibt die Anordnung jedes Stücks an. 0:Leer, 1:Ayumu, 2:Weihrauch ...
#Bit Board. Die Bitplatine ist wie folgt.
#Jedes Element hat 81 Ziffern (=Es ist eine Dezimalanzeige einer Binärzahl (dh einer Bitplatine) von 81 Quadraten.
#Drucken Sie, wenn Sie 81 Binärziffern anzeigen möchten('{:0=81b}'.format(Dezimalwert))Kann mit gemacht werden.
#■ besetzt: Ein Array aus zwei Elementen. Jedes Element ist die Position des Stücks, das von der ersten und zweiten Hand eingenommen wird. Bit Board.
# ■pieces_in_Hand: Ein Array aus zwei Elementen. Welches Stück ist das erste und das zweite für jedes Element(=key)Wie viele(=value)Ein Wörterbuchtyp, der angibt, ob Sie ihn haben.
if board.turn == shogi.BLACK:
piece_bb = copy.deepcopy(board.piece_bb)
occupied = copy.deepcopy((board.occupied[shogi.BLACK], board.occupied[shogi.WHITE]))
pieces_in_hand = copy.deepcopy((board.pieces_in_hand[shogi.BLACK], board.pieces_in_hand[shogi.WHITE]))
else:
piece_bb = [bb_rotate_180(bb) for bb in board.piece_bb]
occupied = (bb_rotate_180(board.occupied[shogi.WHITE]), bb_rotate_180(board.occupied[shogi.BLACK]))
pieces_in_hand = copy.deepcopy((board.pieces_in_hand[shogi.WHITE], board.pieces_in_hand[shogi.BLACK]))
# move label
i_move = shogi.Move.from_usi(move) #Erstellen Sie eine Instanz der Move-Klasse mit der Verschiebungsvariablen move als Argument
move_label = make_output_label(i_move, board.turn)
#■ Klasse verschieben
# from_Quadratvariable: Der Wert der Bewegungsquelle, wenn die Plattenoberfläche durch einen numerischen Wert von 0 bis 80 dargestellt wird.
#Der durch 9 geteilte Quotient ist die y-Koordinate und der Rest ist die x-Koordinate. Die xy-Koordinate ist 0 Ursprung.
# to_quadratische Variable: Wie oben (Ziel).
#
#x-Koordinate
# 0 1 2 3 4 5 6 7 8
#
#0 1 2 3 4 5 6 7 8 0 y Koordinaten
# 9 10 11 12 13 14 15 16 17 1
# 18 19 20 21 22 23 24 25 26 2
# 27 28 29 30 31 32 33 34 35 3
# 36 37 38 39 40 41 42 43 44 4
# 45 46 47 48 49 50 51 52 53 5
# 54 55 56 57 58 59 60 61 62 6
# 63 64 65 66 67 68 69 70 71 7
# 72 73 74 75 76 77 78 79 80 8
#
# print(board)
#
# try:
# y_from, x_from = divmod(s.from_square, 9)
# y_to, x_to = divmod(s.to_square, 9)
# print('from:',x_from, y_from)
# print('to :',x_to, y_to)
#
# move_direction = DOWN
# print('moved:', move_direction)
# except:
# pass
# result
win = 1 if win_color == board.turn else 0
#Aspekte hinzugefügt (erste drei Variablen), bewegt sich in diesem Aspekt und gewinnt / verliert an den variablen Positionen
positions.append((piece_bb, occupied, pieces_in_hand, move_label, win))
#1 vorwärts gehen
board.push_usi(move)
return positions
Recommended Posts