示例#1
0
 def release(self, pos):
     if self.piece_flying:
         self.piece_flying = False
         x = self.piece_in(pos)
         if (x and
                 (self.side if self.kind & KIND_PLAYING
                  else self.turn) == x.isupper()):
             self.piece_clicked = x
             self.selected.clear()
             self.selected.append(pos)
             return None
         # MOVE
         if len(self.selected):
             if len(self.selected) > 1:
                 self.selected.pop()
             self.selected.append(pos)
             if self.kind & KIND_OBSERVING:
                 ns = self._history[-1].make(self.selected)
                 if ns:
                     self.set_state(ns)
                     self.altline = True
                 else:
                     self.selected.pop()
             elif (self.kind ^ KIND_PLAYING) or (self.side == self.turn) :
                 self.move_sent = True
                 return (postopos(self.selected[0])
                          +postopos(self.selected[1]))
             return None
示例#2
0
 def set_state(self, new_state):
     if isinstance(new_state, GameState):
         state = new_state
     else:
         state = Style12(new_state)
         self.interruptus = False
         self.last_style12 = state
     if not self._history.update(state) and self.opponent != '':
         self.fill_history(state)
     if state in self._history or self.kind & KIND_EXAMINING:
         r = self._history.set_mainline(state)
         if self.board and self.board.movetree:
             if r:
                 self.board.movetree.set_mainline(*r)
             else:
                 self.board.movetree.repopulate()
     elif self.board and self.board.movetree:
         self.board.movetree.update_node(state)
     self.move_sent = False
     if state is self._history[-1]:
         self.turn = state.turn
     #flush premove
     if (self.kind & KIND_PLAYING and len(self.selected) == 2 and
             self.side == self.turn and self.halfmove != state.halfmove):
         config.cli.send_cmd((postopos(self.selected[0])+
                     postopos(self.selected[1])), save_history=False)
     # move was ilegal? preserve selected piece
     elif (len(self.selected) == 2 and self.halfmove == state.halfmove):
         self.selected.pop()
     elif (self.kind & KIND_PLAYING and len(self.selected) == 1 and
             self.side == self.turn):
         pass
     elif state is not self._history[-1]:
         pass
     else:
         self.selected.clear()
     self.halfmove = state.halfmove
     if (not self.player_names == state.names or
             (abs(self._kind) == 2 and self._kind != state.relation)):
         self.number = state.game_number
         self.player = [state.names[0]+self.rating[0],
                        state.names[1]+self.rating[1]]
         self.player_names = state.names
         self._kind = state.relation
         self.kind = (KIND_PLAYING if abs(self._kind) == 1 else
                      KIND_OBSERVING if self._kind == 0 else
                      KIND_EXAMINING if self._kind == 2 else
                      KIND_ISOLATED if self._kind == -3 else
                      KIND_OBSERVING | KIND_EXAMINING)
         self.side = ((self.turn and (self._kind == 1)) or
                      ((self._kind == -1) and not self.turn) or
                      (self.kind ^ KIND_PLAYING and
                          (self.player_names[0] != config.fics_user or
                              self.player_names[1] == config.fics_user)))
         self.opponent = self.player_names[not self.side]
         self.me       = self.player_names[self.side]
         self.itime = state.itime
         self.iinc  = state.iinc
         self.name = ('Game {}: '.format(state.game_number) +
                      ('Observing ' if self.kind & KIND_OBSERVING else
                       'Examining ' if self.kind & KIND_EXAMINING else '')+
                       ' v/s '.join(self.player[::-1])+' - '+
                       '/'.join([self.itime, self.iinc])+
                       # (' - '+self.rated if self.rated else '' )+
                       (' - ' + self.result if self.result else '')
                       ).strip()
         if self.kind & KIND_OBSERVING:
             self.get_old_moves()
         if self.kind & (KIND_EXAMINING | KIND_PLAYING):
             config.gui.seek_graph_destroy()
         if self.board:
             self.board.reset(True)
         for hdl in self.player_names:
             config.update_handle(hdl)
     else:
         if self.board:
             self.board.reset(False)