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)
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)
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()
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
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)
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)
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