蟒蛇棋打黑棋并将颜色更改为白色?

时间:2020-08-22 17:28:25

标签: python-3.6 chess minimax python-chess

因此,我试图为国际象棋游戏创建一个minimax树,每当它开始构建树时,它都会弄乱棋子的颜色和位置。它是这样工作的,它会创建一个董事会列表,该列表的大小为合法举动的数量,然后在董事会上显示每个合法举动。然后创建另一个层,在其中收获相同的东西,但第二层依此类推。这里的问题是:

r n b q k b。 r
p p p p p p p p
。 。 。 。 。 N. 。
。 。 。 。 。 。 。 。
。 。 。 。 。 。 。 。
。 。 。 。 。 N. 。
P P P P P P P P P
R N B Q K B。 R

这是黑色运动后的棋盘,请注意骑士的颜色随着运动而改变了。我检查了每只芬,看看轮到谁了,结果全都弄乱了,甚至在操纵芬的颜色后仍然没有成功请帮助我。

代码:

from tensorflow import keras
from chess_data import convert_to_list

import time
import chess.pgn
import numpy as np
model = keras.models.load_model('model.h5')


def general_value(board):
        good, bad =0,0
        
        score = 0
        index = {1:1, 2:3, 3:3.5, 4:5, 6:9, 5:100,7:-1, 8:-3, 9:-3.5, 10:-5, 12:-9, 11:-100, 0:0}
        for i in board: 
            for j in i:
                if index[int(j)] > 0:

                    good += index[int(j)]
                if index[int(j)] < 0:
                    bad += index[int(j)]

        score = good+bad

        return score

        
                


def legal_moves(board):
    all_moves = []
    for e in board.legal_moves:
        all_moves.append(e)
  
    return all_moves[:2]


def node(board, move):
    print(board)
    formated_move = chess.Move.from_uci(str(move))
    print(formated_move)

    new_board = chess.Board(str(board.board_fen()))
    print(new_board.turn)
    new_board.push(formated_move)
    print(new_board.turn)
    print(new_board)

    # value = evalute(board)
    copy = convert_to_list(new_board)
    data = np.array(copy).reshape(1, 8, 9)

    # value = model.predict_on_batch(data)
    # print(value)
    value = general_value(copy)
    
    
    return new_board, value 



def layer(board):
    legal = legal_moves(board)
 

    new_boards = []

    for i in legal:  
        new_boards.append(node(board, i))


    return new_boards

def minimax(board, turn):
    if turn == 1:
        obi = max

    if turn == -1: 
        obi = min



    first_layer = layer(board)


    second_layer = []
    third_layer = []

    for i in first_layer:
        second_layer.append(layer(i[0]))


    for i in second_layer:
        for l in i:
            third_layer.append(layer(l[0]))
    print(third_layer)
    layer_trace = [third_layer[i::len(first_layer)] for i in range(len(first_layer))]```

0 个答案:

没有答案