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