def __init__(self): self.widgets = uistuff.GladeWidgets("promotion.glade") self.dialog = self.widgets["promotionDialog"] self.color = None self.widgets["knightDock"].add(PieceWidget(Piece(WHITE, KNIGHT))) self.widgets["knightDock"].child.show() self.widgets["bishopDock"].add(PieceWidget(Piece(WHITE, BISHOP))) self.widgets["bishopDock"].child.show() self.widgets["rookDock"].add(PieceWidget(Piece(WHITE, ROOK))) self.widgets["rookDock"].child.show() self.widgets["queenDock"].add(PieceWidget(Piece(WHITE, QUEEN))) self.widgets["queenDock"].child.show()
def test1(self): """ Testing Board.move() on frc castling in non frc game """ board = Board(setup=True) moves = ((D2, D4), (G8, F6), (C2, C4), (G7, G6), (G2, G3), (F8, G7), (F1, G2), (E8, H8)) for cord0, cord1 in moves: print(cord0, cord1) board = board.move(Move(Cord(cord0), Cord(cord1), board)) board.printPieces() self.assertIsNone(board[Cord(E8)]) self.assertIsNone(board[Cord(H8)]) self.assertEqual(board[Cord(G8)].piece, Piece(BLACK, KING).piece) self.assertEqual(board[Cord(F8)].piece, Piece(BLACK, ROOK).piece)
def move (self, move): assert self[move.cord0], "%s %s" % (move, self.asFen()) newBoard = self.clone() newBoard.board.applyMove (move.move) cord0, cord1 = move.cords flag = FLAG(move.move) # in frc there are unusual castling positions where # king will move on top of the castling rook, so... if flag in (KING_CASTLE, QUEEN_CASTLE): # don't put on the castling king yet king = newBoard[cord0] else: newBoard[cord1] = newBoard[cord0] newBoard[cord0] = None # move castling rook if self.color == WHITE: if flag == QUEEN_CASTLE: if self.board.ini_rooks[0][0] != D1: newBoard[Cord(D1)] = newBoard[Cord(self.board.ini_rooks[0][0])] newBoard[Cord(self.board.ini_rooks[0][0])] = None elif flag == KING_CASTLE: if self.board.ini_rooks[0][1] != F1: newBoard[Cord(F1)] = newBoard[Cord(self.board.ini_rooks[0][1])] newBoard[Cord(self.board.ini_rooks[0][1])] = None else: if flag == QUEEN_CASTLE: if self.board.ini_rooks[1][0] != D8: newBoard[Cord(D8)] = newBoard[Cord(self.board.ini_rooks[1][0])] newBoard[Cord(self.board.ini_rooks[1][0])] = None elif flag == KING_CASTLE: if self.board.ini_rooks[1][1] != F8: newBoard[Cord(F8)] = newBoard[Cord(self.board.ini_rooks[1][1])] newBoard[Cord(self.board.ini_rooks[1][1])] = None # put the castling king now if flag in (KING_CASTLE, QUEEN_CASTLE): if self.color == WHITE: if flag == QUEEN_CASTLE: newBoard[Cord(C1)] = king elif flag == KING_CASTLE: newBoard[Cord(G1)] = king else: if flag == QUEEN_CASTLE: newBoard[Cord(C8)] = king elif flag == KING_CASTLE: newBoard[Cord(G8)] = king if flag in PROMOTIONS: newBoard[cord1] = Piece(self.color, PROMOTE_PIECE(flag)) elif flag == ENPASSANT: newBoard[Cord(cord1.x, cord0.y)] = None return newBoard
def __init__(self, variant): from .gamewidget import getWidgets self.widgets = getWidgets() self.dialog = self.widgets["promotionDialog"] self.color = None if self.widgets["queenDock"].get_child() is None: self.widgets["queenDock"].add( PieceWidget(Piece(WHITE, QUEEN), variant)) self.widgets["queenDock"].get_child().show() self.widgets["rookDock"].add( PieceWidget(Piece(WHITE, ROOK), variant)) self.widgets["rookDock"].get_child().show() self.widgets["bishopDock"].add( PieceWidget(Piece(WHITE, BISHOP), variant)) self.widgets["bishopDock"].get_child().show() self.widgets["knightDock"].add( PieceWidget(Piece(WHITE, KNIGHT), variant)) self.widgets["knightDock"].get_child().show() self.widgets["kingDock"].add( PieceWidget(Piece(WHITE, KING), variant)) self.widgets["kingDock"].get_child().show() if variant == SCHESS: self.widgets["hawkDock"].add( PieceWidget(Piece(WHITE, HAWK), variant)) self.widgets["hawkDock"].get_child().show() self.widgets["elephantDock"].add( PieceWidget(Piece(WHITE, ELEPHANT), variant)) self.widgets["elephantDock"].get_child().show()
def __init__(self, variant): self.widgets = uistuff.GladeWidgets("promotion.glade") self.dialog = self.widgets["promotionDialog"] self.color = None self.widgets["knightDock"].add( PieceWidget(Piece(WHITE, KNIGHT), variant)) self.widgets["knightDock"].get_child().show() self.widgets["bishopDock"].add( PieceWidget(Piece(WHITE, BISHOP), variant)) self.widgets["bishopDock"].get_child().show() self.widgets["rookDock"].add(PieceWidget(Piece(WHITE, ROOK), variant)) self.widgets["rookDock"].get_child().show() self.widgets["queenDock"].add(PieceWidget(Piece(WHITE, QUEEN), variant)) self.widgets["queenDock"].get_child().show() self.widgets["kingDock"].add(PieceWidget(Piece(WHITE, KING), variant)) self.widgets["kingDock"].get_child().show()
def __init__(self, variant): self.widgets = uistuff.GladeWidgets("gating.glade") self.widgets["gatingDialog"].set_transient_for(mainwindow()) self.dialog = self.widgets["gatingDialog"] self.color = None if self.widgets["hawkDock"].get_child() is None: self.widgets["hawkDock"].add( PieceWidget(Piece(WHITE, HAWK), variant)) self.widgets["hawkDock"].get_child().show() self.widgets["elephantDock"].add( PieceWidget(Piece(WHITE, ELEPHANT), variant)) self.widgets["elephantDock"].get_child().show() self.widgets["hawkAtRookDock"].add( PieceWidget(Piece(WHITE, HAWK), variant)) self.widgets["hawkAtRookDock"].get_child().show() self.widgets["elephantAtRookDock"].add( PieceWidget(Piece(WHITE, ELEPHANT), variant)) self.widgets["elephantAtRookDock"].get_child().show()
def move(self, move, color): new_board = self.clone() new_board._ply = self._ply + 1 cord0, cord1 = move.cord0, move.cord1 if cord0.x < 0 or cord0.x > self.FILES-1 and \ (cord1.x>=0 and cord1.x<=7): new_board[cord1] = new_board[cord0] new_board[cord0] = Piece(color, self[cord0].sign) elif cord1.x < 0 or cord1.x > self.FILES - 1: new_board[cord0] = None else: new_board[cord1] = new_board[cord0] new_board[cord0] = None return new_board
def loadToModel (self, gameno, position, model=None): if not model: model = GameModel() board = model.variant.board() for y,row in enumerate(self.games[gameno]): for x,letter in enumerate(reg2.findall(row)): if letter in entitydefs: letter = entitydefs[letter] if letter not in piecesDia: raise LoadingError (_("Couldn't load the diagram '%s'")%repr(letter)) col, pie = piecesDia[letter] if pie != EMPTY: board.addPiece(Cord(x,7-y), Piece(col,pie)) model.boards = [board] if model.status == WAITING_TO_START: model.status, model.reason = getStatus(model.boards[-1]) return model
def __init__(self, persp): GObject.GObject.__init__(self) self.persp = persp self.filtered = False # Add piece widgets to dialog *_dock containers on material tab self.widgets = uistuff.GladeWidgets("PyChess.glade") self.dialog = self.widgets["filter_dialog"] self.dialog.set_transient_for(mainwindow()) for piece in "qrbnp": dock = "w%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(WHITE, chr2Sign[piece]))) self.widgets[dock].get_child().show() dock = "b%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() dock = "moved_%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() dock = "captured_%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() piece = "k" dock = "moved_%s_dock" % piece self.widgets[dock].add(PieceWidget(Piece(BLACK, chr2Sign[piece]))) self.widgets[dock].get_child().show() # We will store our filtering queries in a ListStore # column 0: query as text # column 1: query dict # column 2: filter type (NONE, TAG_FILTER or MATERIAL_FILTER or PATTERN_FILTER) # column 3: row type (RULE, SEQUENCE, STREAK) self.treestore = Gtk.TreeStore(str, object, int, int) self.set_model(self.treestore) self.set_headers_visible(True) self.set_grid_lines(Gtk.TreeViewGridLines.HORIZONTAL) column = Gtk.TreeViewColumn("filter", Gtk.CellRendererText(), text=0) column.set_min_width(80) self.append_column(column) self.columns_autosize() sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) sw.add(self) self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.box.pack_start(sw, True, True, 0) # Add buttons toolbar = Gtk.Toolbar() editButton = Gtk.ToolButton(Gtk.STOCK_EDIT) editButton.set_tooltip_text(_("Edit selected filter")) editButton.connect("clicked", self.on_edit_clicked) toolbar.insert(editButton, -1) delButton = Gtk.ToolButton(Gtk.STOCK_REMOVE) delButton.set_tooltip_text(_("Remove selected filter")) delButton.connect("clicked", self.on_del_clicked) toolbar.insert(delButton, -1) addButton = Gtk.ToolButton(Gtk.STOCK_ADD) addButton.set_tooltip_text(_("Add new filter")) addButton.connect("clicked", self.on_add_clicked) toolbar.insert(addButton, -1) addSeqButton = Gtk.ToolButton() addSeqButton.set_label(_("Seq")) addSeqButton.set_is_important(True) addSeqButton.set_tooltip_text( _("Create new squence where listed conditions may be satisfied at different times in a game" )) addSeqButton.connect("clicked", self.on_add_sequence_clicked) toolbar.insert(addSeqButton, -1) addStreakButton = Gtk.ToolButton() addStreakButton.set_label(_("Str")) addStreakButton.set_is_important(True) addStreakButton.set_tooltip_text( _("Create new streak sequence where listed conditions have to be satisfied in consecutive (half)moves" )) addStreakButton.connect("clicked", self.on_add_streak_clicked) toolbar.insert(addStreakButton, -1) filterButton = Gtk.ToggleToolButton(Gtk.STOCK_FIND) filterButton.set_tooltip_text( _("Filter game list by various conditions")) filterButton.connect("clicked", self.on_filter_clicked) toolbar.insert(filterButton, -1) tool_box = Gtk.Box() tool_box.pack_start(toolbar, False, False, 0) self.box.pack_start(tool_box, False, False, 0) self.box.show_all()
from os.path import isdir, isfile, splitext import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk import cairo from pychess.Utils.const import * from pychess.Utils.Piece import Piece from pychess.gfx import Pieces from pychess.System.prefix import addDataPrefix, getUserDataPrefix SQUARE = 39 PIECES = ((Piece(WHITE, KING), Piece(WHITE, QUEEN), Piece(WHITE, ROOK), None), (Piece(WHITE, KNIGHT), Piece(WHITE, BISHOP), None, Piece(BLACK, PAWN)), (Piece(WHITE, PAWN), None, Piece(BLACK, BISHOP), Piece(BLACK, KNIGHT)), (None, Piece(BLACK, ROOK), Piece(BLACK, QUEEN), Piece(BLACK, KING))) themes = [] pieces = addDataPrefix("pieces") themes += [ d.capitalize() for d in listdir(pieces) if isdir(os.path.join(pieces, d)) ] themes.sort() for theme in themes: