Beispiel #1
0
    def dark_capture(self, x_start, y_start, x_target, y_target):
        if self.figures[x_start][y_start].name == 'man':
            self.figures[x_target][y_target] = Piece.Man(-1, x_target, y_target)
        elif self.figures[x_start][y_start].name == 'dame':
            self.figures[x_target][y_target] = Piece.Dame(-1, x_target, y_target)
        self.images[x_target][y_target] = ImageTk.PhotoImage(image=self.figures[x_target][y_target].icon)
        self.buttons[x_target][y_target].configure(image=self.images[x_target][y_target])

        for i in range(abs(x_target - x_start)):
            x_captured = int(x_start + i * (x_target - x_start) / abs(x_target - x_start))
            y_captured = int(y_start + i * (y_target - y_start) / abs(y_target - y_start))
            self.figures[x_captured][y_captured] = Piece.NotPiece(0, x_captured, y_captured)
            self.images[x_captured][y_captured] = ImageTk.PhotoImage(image=self.figures[x_captured][y_captured].icon)
            self.buttons[x_captured][y_captured].configure(image=self.images[x_captured][y_captured])

        value = inf
        figures = self.figures.copy()
        if len(figures[x_target][y_target].capturing_possibilities(figures)) > 0:
            for possibility in figures[x_target][y_target].capturing_possibilities(figures):
                ev = logic.simulate_capture(x_target, y_target, possibility[0], possibility[1], figures, -1)[1]
                if ev < value:
                    value = ev
                    start_position = (x_target, y_target)
                    target_position = (possibility[0], possibility[1])
                    figures = logic.simulate_capture(x_target, y_target, possibility[0], possibility[1], figures, -1)[0]
            self.dark_capture(start_position[0], start_position[1], target_position[0], target_position[1])
        else:
            if x_target == 7:
                self.convert_to_dame(x_target, y_target)

            if self.end_of_the_game() != 1:
                self.enable_player(self.player)
Beispiel #2
0
    def capture(self, x_start, y_start, x_target, y_target):
        if self.figures[x_start][y_start].name == 'man':
            self.figures[x_target][y_target] = Piece.Man(self.player, x_target, y_target)
        elif self.figures[x_start][y_start].name == 'dame':
            self.figures[x_target][y_target] = Piece.Dame(self.player, x_target, y_target)
        self.images[x_target][y_target] = ImageTk.PhotoImage(image=self.figures[x_target][y_target].icon)
        self.buttons[x_target][y_target].configure(image=self.images[x_target][y_target])

        for i in range(abs(x_target - x_start)):
            x_captured = int(x_start + i * (x_target - x_start) / abs(x_target - x_start))
            y_captured = int(y_start + i * (y_target - y_start) / abs(y_target - y_start))
            self.figures[x_captured][y_captured] = Piece.NotPiece(0, x_captured, y_captured)
            self.images[x_captured][y_captured] = ImageTk.PhotoImage(image=self.figures[x_captured][y_captured].icon)
            self.buttons[x_captured][y_captured].configure(image=self.images[x_captured][y_captured])

        if len(self.figures[x_target][y_target].capturing_possibilities(self.figures)) > 0:
            for i in range(8):
                for j in range(8):
                    self.buttons[i][j].configure(state=tk.DISABLED)
            self.buttons[x_target][y_target].configure(
                state=tk.NORMAL,
                command=partial(self.choice, x_target, y_target)
            )
            for possibility in self.figures[x_target][y_target].capturing_possibilities(self.figures):
                self.buttons[possibility[0]][possibility[1]].configure(
                    state=tk.NORMAL,
                    command=partial(self.capture, x_target, y_target, possibility[0], possibility[1])
                )
        else:
            if (self.player == 1 and x_target == 0) or (self.player == -1 and x_target == 7):
                self.convert_to_dame(x_target, y_target)
            if self.end_of_the_game() != 1:
                self.dark_turn()
                self.enable_player(self.player)
Beispiel #3
0
    def __init__(self):
        self.player = 1
        self.root = tk.Tk()
        self.canvas = tk.Canvas(self.root, height=HEIGHT, width=WIDTH)
        self.canvas.pack()
        self.figures = []
        self.buttons = []
        self.images = []
        for x in range(8):
            self.figures.append([])
            self.buttons.append([])
            self.images.append([])

        for x in range(8):
            for y in range(8):
                if (x + y) % 2 == 0:  # jasne pole
                    colour = LIGHT
                    state = tk.DISABLED
                    piece = Piece.NotPiece(0, x, y)
                else:  # ciemne pole
                    colour = DARK
                    if x < 3:
                        state = tk.DISABLED
                        piece = Piece.Man(-1, x, y)
                    elif x > 4:
                        if x == 5:
                            state = tk.NORMAL
                        else:
                            state = tk.DISABLED
                        piece = Piece.Man(1, x, y)
                    else:
                        state = tk.DISABLED
                        piece = Piece.NotPiece(0, x, y)
                self.figures[x].append(piece)
                self.images[x].append(ImageTk.PhotoImage(image=self.figures[x][y].icon))
                self.buttons[x].append(tk.Button(self.canvas,
                                                 image=self.images[x][y],
                                                 bg=colour,
                                                 width=SQUARE_WIDTH,
                                                 height=SQUARE_HEIGHT,
                                                 state=state,
                                                 command=partial(self.choice, x, y)
                                                 ))
                self.buttons[x][y].grid(row=x, column=y)
        self.root.mainloop()
Beispiel #4
0
def simulate_capture(x_start, y_start, x_target, y_target, figures, player):
    figures_copy = [[] for i in range(8)]
    for x in range(8):
        for y in range(8):
            figures_copy[x].append(copy.copy(figures[x][y]))

    if figures_copy[x_start][y_start].name == 'man':
        figures_copy[x_target][y_target] = Piece.Man(player, x_target,
                                                     y_target)
    elif figures_copy[x_start][y_start].name == 'dame':
        figures_copy[x_target][y_target] = Piece.Dame(player, x_target,
                                                      y_target)

    for i in range(abs(x_target - x_start)):
        x_captured = int(x_start + i *
                         (x_target - x_start) / abs(x_target - x_start))
        y_captured = int(y_start + i *
                         (y_target - y_start) / abs(y_target - y_start))
        figures_copy[x_captured][y_captured] = Piece.NotPiece(
            0, x_captured, y_captured)

    value = evaluation(figures_copy)
    temp_value = -inf * player
    temp_figures = figures_copy

    if len(figures_copy[x_target][y_target].capturing_possibilities(
            figures_copy)) > 0:
        for possibility in figures_copy[x_target][
                y_target].capturing_possibilities(figures_copy):
            ev = simulate_capture(x_target, y_target, possibility[0],
                                  possibility[1], figures_copy, player)[1]
            if ev < temp_value and player == -1:
                temp_value = ev
                temp_figures = simulate_capture(x_target, y_target,
                                                possibility[0], possibility[1],
                                                figures_copy, player)[0]
            if ev > temp_value and player == 1:
                temp_value = ev
                temp_figures = simulate_capture(x_target, y_target,
                                                possibility[0], possibility[1],
                                                figures_copy, player)[0]
        figures_copy = temp_figures
    else:
        if (player == 1 and x_target == 0) or (player == -1 and x_target == 7):
            figures_copy[x_target][y_target] = Piece.Dame(
                player, x_target, y_target)
    if temp_value != inf and temp_value != -inf:
        value = temp_value
    return figures_copy, value
Beispiel #5
0
    def dark_move(self, x_start, y_start, x_target, y_target):
        if self.figures[x_start][y_start].name == 'man':
            self.figures[x_target][y_target] = Piece.Man(-1, x_target, y_target)
        elif self.figures[x_start][y_start].name == 'dame':
            self.figures[x_target][y_target] = Piece.Dame(-1, x_target, y_target)
        self.images[x_target][y_target] = ImageTk.PhotoImage(image=self.figures[x_target][y_target].icon)
        self.buttons[x_target][y_target].configure(image=self.images[x_target][y_target])

        self.figures[x_start][y_start] = Piece.NotPiece(0, x_start, y_start)
        self.images[x_start][y_start] = ImageTk.PhotoImage(image=self.figures[x_start][y_start].icon)
        self.buttons[x_start][y_start].configure(image=self.images[x_start][y_start])

        # convert to dame?
        if x_target == 7:
            self.convert_to_dame(x_target, y_target)

        self.enable_player(1)
Beispiel #6
0
    def move(self, x_start, y_start, x_target, y_target):
        if self.figures[x_start][y_start].name == 'man':
            self.figures[x_target][y_target] = Piece.Man(self.player, x_target, y_target)
        elif self.figures[x_start][y_start].name == 'dame':
            self.figures[x_target][y_target] = Piece.Dame(self.player, x_target, y_target)
        self.images[x_target][y_target] = ImageTk.PhotoImage(image=self.figures[x_target][y_target].icon)
        self.buttons[x_target][y_target].configure(image=self.images[x_target][y_target])

        self.figures[x_start][y_start] = Piece.NotPiece(0, x_start, y_start)
        self.images[x_start][y_start] = ImageTk.PhotoImage(image=self.figures[x_start][y_start].icon)
        self.buttons[x_start][y_start].configure(image=self.images[x_start][y_start])

        # convert to dame?
        if (self.player == 1 and x_target == 0) or (self.player == -1 and x_target == 7):
            self.convert_to_dame(x_target, y_target)

        self.dark_turn()
        self.enable_player(self.player)
Beispiel #7
0
def simulate_move(x_start, y_start, x_target, y_target, figures, player):
    figures_copy = [[] for i in range(8)]
    for x in range(8):
        for y in range(8):
            figures_copy[x].append(copy.copy(figures[x][y]))

    if figures_copy[x_start][y_start].name == 'man':
        figures_copy[x_target][y_target] = Piece.Man(player, x_target,
                                                     y_target)
    elif figures_copy[x_start][y_start].name == 'dame':
        figures_copy[x_target][y_target] = Piece.Dame(player, x_target,
                                                      y_target)

    figures_copy[x_start][y_start] = Piece.NotPiece(0, x_start, y_start)

    # convert to dame?
    if (player == 1 and x_target == 0) or (player == -1 and x_target == 7):
        figures_copy[x_target][y_target] = Piece.Dame(player, x_target,
                                                      y_target)
    return figures_copy