Пример #1
0
    def __init__(self, gamemodel, actionMenuItems):
        gtk.EventBox.__init__(self)
        self.promotionDialog = PromotionDialog()
        self.view = BoardView(gamemodel)
        self.add(self.view)

        self.actionMenuItems = actionMenuItems
        self.connections = {}
        for key, menuitem in self.actionMenuItems.iteritems():
            if menuitem == None: print key
            self.connections[menuitem] = menuitem.connect(
                "activate", self.actionActivate, key)

        self.view.connect("shown_changed", self.shown_changed)
        gamemodel.connect("moves_undoing", self.moves_undone)
        self.connect("button_press_event", self.button_press)
        self.connect("button_release_event", self.button_release)
        self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK
                        | gtk.gdk.POINTER_MOTION_MASK)
        self.connect("motion_notify_event", self.motion_notify)
        self.connect("leave_notify_event", self.leave_notify)

        self.selected_last = None
        self.stateLock = threading.Lock()
        self.normalState = NormalState(self)
        self.selectedState = SelectedState(self)
        self.activeState = ActiveState(self)
        self.lockedState = LockedState(self)
        self.lockedSelectedState = LockedSelectedState(self)
        self.lockedActiveState = LockedActiveState(self)
        self.currentState = self.lockedState

        self.lockedPly = self.view.shown
        self.possibleBoards = {
            self.lockedPly: self._genPossibleBoards(self.lockedPly)
        }

        self.allowPremove = False

        def onGameStart(gamemodel):
            for player in gamemodel.players:
                if player.__type__ == LOCAL:
                    self.allowPremove = True

        gamemodel.connect("game_started", onGameStart)
Пример #2
0
    def makeMove(self, firstCell, secondCell):
        if self.gameStarted is False:
            return

        firstCellCoords = firstCell.getCoordinates()
        secondCellCoords = secondCell.getCoordinates()

        firstSquare = chess.square(*firstCellCoords)
        secondSquare = chess.square(*secondCellCoords)

        promotion = None

        if self.board.piece_at(firstSquare).piece_type == chess.PAWN:
            if secondCellCoords[1] == 0 or secondCellCoords[1] == 7:
                promotion = chess.QUEEN

        move = chess.Move(firstSquare, secondSquare, promotion=promotion)

        if move in self.board.legal_moves:
            if promotion is not None:
                self.promotionDialog = PromotionDialog(self.parent(),
                                                       self.board.turn)
                choosen = self.promotionDialog.exec()

                if choosen == 0:
                    return

                move.promotion = self.promotionDialog.getPromotion()

            self.board.push(move)

            self.moveMade.emit(move)

            result = self.board.result()
            if result != '*':
                self.gameStarted = False
                self.gameEnded.emit(result)
        self.updateBoard()