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()
Esempio n. 2
0
    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
Esempio n. 4
0
    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()
Esempio n. 5
0
    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()
Esempio n. 6
0
    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()
Esempio n. 7
0
 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
Esempio n. 9
0
    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()
Esempio n. 10
0
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: