예제 #1
0
파일: Chess.py 프로젝트: marchec/chess_game
class Chess(tkinter.Tk):
    def __init__(self, first_player, second_player):
        super().__init__()
        self.title = "Chess game"
        self.in_play = True
        self.board = Board()
        self.render = Render(self)
        self.render.bind("<Button-1>", self.click)
        self.white = self.current_player = Player(first_player, "white")
        self.black = Player(second_player, "black")
        self.police = Police(self.board)
        tkinter.Label(self, text=self.white.name, fg="gray").pack(side="left")
        tkinter.Label(self, text=self.black.name,
                      fg="black").pack(side="right")
        self.mainloop()

    def next_turn(self):
        """changes the current player to the other one"""
        if (self.current_player == self.white):
            self.current_player = self.black
        else:
            self.current_player = self.white
        if self.police.checkmated(
                self.board.get_king(self.current_player.color)):
            self.in_play = False
            self.render.inform_of_lameness(self.current_player)

    def click(self, e):
        """everything that happens when a case is clicked"""
        if self.in_play:
            case_clicked = self.render.pos_to_units((e.x, e.y))
            move_set = []
            if self.board.get_activated_piece() != None:
                if case_clicked in self.police.strip_illegal_moves(
                        self.board.get_activated_piece()):
                    if self.board.piece_on_case(case_clicked) != None:
                        self.current_player.score += self.board.piece_on_case(
                            case_clicked).value
                        self.board.disappear(
                            self.board.piece_on_case(case_clicked))
                    self.board.get_activated_piece().move(case_clicked)
                    self.next_turn()
                self.board.get_activated_piece().deactivate()
            else:
                if self.board.piece_on_case(
                        case_clicked) != None and self.board.piece_on_case(
                            case_clicked).color == self.current_player.color:
                    self.board.piece_on_case(case_clicked).activate()
                    move_set = self.police.strip_illegal_moves(
                        self.board.get_activated_piece())
            self.render.draw_board(self.board, move_set)