コード例 #1
0
    def test_check_insert(self):
        fields = [Field('id', 'int', primary_key=True), Field('name', 'str')]

        table = Table('users', fields)
        table.insert(id=1, name='Pierre')

        self.assertTrue(len(table.values) == 1)
コード例 #2
0
ファイル: main.py プロジェクト: deplanty/mini-games
    def set_ui(self):
        """
        Sets the elements in the UI.
        """

        self.canvas = tk.Canvas(self)
        self.canvas.pack()
        self.field = Field(self.canvas)
コード例 #3
0
    def test_check_no_exception_if_nullable_field_missing(self):
        fields = [
            Field('id', 'int', primary_key=True),
            Field('name', 'str'),
            Field('age', 'int', nullable=True)
        ]

        table = Table('users', fields)
        table.insert(id=5, name='Pierre')
コード例 #4
0
 def create_elements_search_space(self):
     field = Field(0, 0, self.num)
     field.inspect_sudoku(self.repr)
     search_space = []
     for i in range(self.num):
         a = []
         for j in range(self.num):
             a.append(len(Field(i, j, self.num).get_search_space()))
         search_space.append(a)
     return search_space
コード例 #5
0
    def test_instanciation_with_bad_primary_key_config(self):
        fields = [Field('name', 'str')]

        # No primary key
        with self.assertRaises(Exception):
            table = Table('table_name', [Field('name', 'str')])

        # Several primary keys
        with self.assertRaises(Exception):
            table = Table('table_name', [
                Field('id_1', 'int', primary_key=True),
                Field('id_2', 'int', primary_key=True)
            ])
コード例 #6
0
 def start_new_game(self):
     self._initial_field = Field(self._cols, self._rows, self._colors_num)
     self._field = deepcopy(self._initial_field)
     self._score = 0
     self._highlighted = 0
     self._highlighted_chain = None
     self._gameover = False
コード例 #7
0
ファイル: field.py プロジェクト: Einenlum/fake-db
    def test_check_value_integrity(self):
        field = Field('some_name', 'str')

        with self.assertRaises(Exception):
            field.check_value_integrity(123)
        with self.assertRaises(Exception):
            field.check_value_integrity(True)

        field.check_value_integrity('test with a valid type')
コード例 #8
0
ファイル: test_field.py プロジェクト: fpvieira/robot
class TestField(unittest.TestCase):

    def setUp(self):
        self.field = Field(10,10)

    def test_initialize(self):
        self.assertEquals(10, self.field.x_bound)
        self.assertEquals(10, self.field.y_bound)

    def test_position_higher_than_bounds(self):
        self.assertFalse(self.field.is_inside_of_bounds(10,11000))
    
    def test_position_lower_than_bounds(self):
        self.assertFalse(self.field.is_inside_of_bounds(0,-1000))

    def test_position_is_inside_of_bounds(self):
        self.assertTrue(self.field.is_inside_of_bounds(1,10))
コード例 #9
0
    def test_export(self):
        fields = [
            Field('id', 'int', primary_key=True),
            Field('name', 'str'),
            Field('age', 'int', nullable=True)
        ]

        table = Table('users', fields)
        table.insert(id=5, name='Pierre')
        table.insert(id=6, name='Roger')

        self.assertEqual(table.export(), [{
            'id': 5,
            'name': 'Pierre'
        }, {
            'id': 6,
            'name': 'Roger'
        }])
コード例 #10
0
 def set_field(self, cols: int, rows: int, col_field: list):
     self._cols = cols
     self._rows = rows
     self._colors_num = 2
     self._initial_field = Field(self._cols, self._rows, field=col_field)
     self._field = deepcopy(self._initial_field)
     self._score = 0
     self._highlighted = 0
     self._highlighted_chain = None
     self._gameover = False
コード例 #11
0
 def __init__(self, width, height):
     self.width = width
     self.height = height
     self.fields = []
     self.agents = []
     for x in range(width):
         line = []
         for y in range(height):
             line.append(Field(x, y))
         self.fields.append(line)
     WorldSearcher.world = self
コード例 #12
0
    def __init__(self, screen, x_shift, key_left, key_right, key_rotate,
                 key_faster, key_pause):

        self.screen = screen
        self.x_shift = x_shift
        self.field = Field(self, self.screen,
                           self.x_shift + Settings.field_margin,
                           Settings.field_margin)

        self.score = 0
        self.high_score = Game.get_high_score()

        self.pause_label = Settings.font_header.render('PAUSE', 1,
                                                       Settings.font_color)
        self.score_label = Settings.font.render('SCORE', 1,
                                                Settings.font_color)
        self.high_score_label = Settings.font.render('HIGHSCORE', 1,
                                                     Settings.font_color)
        self.new_high_score_label = Settings.font.render(
            'NEW HIGHSCORE!', 1, Settings.font_color)
        self.high_score_num = Settings.font_medium.render(
            str(self.high_score), 1, Settings.font_color)
        self.score_num = Settings.font_medium.render(str(self.score), 1,
                                                     Settings.font_color)

        self.game_over_alert = Alert(
            self.screen, 'GAME OVER!', Settings.font_medium,
            self.x_shift + Settings.single_screen_width // 2,
            Settings.screen_height * 0.2)

        self.key_left = key_left
        self.key_right = key_right
        self.key_rotate = key_rotate
        self.key_faster = key_faster
        self.key_pause = key_pause

        self.over = False
        self.pause = False
コード例 #13
0
    def add_values(self, row, col):

        if col == self.num:
            if row == self.num - 1:
                return True
            else:
                col = 0
                row += 1

        if self.repr[row][col] == 0:
            f = Field(row, col, self.num)
            for val in f.search_space:
                if self.check(val, row, col):
                    self.repr[row][col] = val
                    if self.add_values(row, col + 1):
                        return True
                    else:
                        self.repr[row][col] = 0
        else:
            if self.add_values(row, col + 1):
                return True
コード例 #14
0
 def add_values(self):
     if self.count_zeros() == 0:
         return True
     else:
         row, col = self.get_min()
     field = Field(row, col, self.num)
     if self.repr[row][col] == 0:
         for val in field.search_space:
             if self.check(val, row, col):
                 self.repr[row][col] = val
                 field.reduce_search_space(val)
                 if self.add_values():
                     return True
                 else:
                     field.return_arc_consistency(val)
                     self.repr[row][col] = 0
                     if (row, col) in ForwardCheckingDO.closed_list:
                         self.elements_search_space[row][col] -= 10
                         ForwardCheckingDO.closed_list.remove((row, col))
     else:
         if self.add_values():
             return True
コード例 #15
0
class Game:
    def __init__(self, screen, x_shift, key_left, key_right, key_rotate,
                 key_faster, key_pause):

        self.screen = screen
        self.x_shift = x_shift
        self.field = Field(self, self.screen,
                           self.x_shift + Settings.field_margin,
                           Settings.field_margin)

        self.score = 0
        self.high_score = Game.get_high_score()

        self.pause_label = Settings.font_header.render('PAUSE', 1,
                                                       Settings.font_color)
        self.score_label = Settings.font.render('SCORE', 1,
                                                Settings.font_color)
        self.high_score_label = Settings.font.render('HIGHSCORE', 1,
                                                     Settings.font_color)
        self.new_high_score_label = Settings.font.render(
            'NEW HIGHSCORE!', 1, Settings.font_color)
        self.high_score_num = Settings.font_medium.render(
            str(self.high_score), 1, Settings.font_color)
        self.score_num = Settings.font_medium.render(str(self.score), 1,
                                                     Settings.font_color)

        self.game_over_alert = Alert(
            self.screen, 'GAME OVER!', Settings.font_medium,
            self.x_shift + Settings.single_screen_width // 2,
            Settings.screen_height * 0.2)

        self.key_left = key_left
        self.key_right = key_right
        self.key_rotate = key_rotate
        self.key_faster = key_faster
        self.key_pause = key_pause

        self.over = False
        self.pause = False

    def update_high_score(self):

        if self.score < self.high_score:
            return
        file = open(Settings.high_score_file_name, 'w')
        file.write(str(self.score) + '\n')
        file.close()

    @staticmethod
    def get_high_score():

        file = open(Settings.high_score_file_name)
        score_str = file.read()
        file.close()
        try:
            return int(score_str)
        except ValueError:
            return 0

    def refresh(self):

        if self.pause:
            self.screen.blit(self.pause_label, (
                self.x_shift +
                (Settings.single_screen_width - self.pause_label.get_width()) /
                2, Settings.screen_height * 0.3))
        else:
            self.field.refresh()
            self.refresh_labels()

    def refresh_labels(self):

        self.score_num = Settings.font_medium.render(str(self.score), 1,
                                                     Settings.font_color)

        self.screen.blit(
            self.score_label,
            (self.x_shift + Settings.field_width_with_margin +
             (Settings.game_side_width - self.score_label.get_width()) / 2,
             Settings.screen_height * 0.3))
        self.screen.blit(self.high_score_label, (
            self.x_shift + Settings.field_width_with_margin +
            (Settings.game_side_width - self.high_score_label.get_width()) / 2,
            Settings.screen_height * 0.5))
        self.screen.blit(
            self.score_num,
            (self.x_shift + Settings.field_width_with_margin +
             (Settings.game_side_width - self.score_num.get_width()) / 2,
             Settings.screen_height * 0.35))
        self.screen.blit(
            self.high_score_num,
            (self.x_shift + Settings.field_width_with_margin +
             (Settings.game_side_width - self.high_score_num.get_width()) / 2,
             Settings.screen_height * 0.55))

        if self.high_score < self.score:
            self.screen.blit(self.new_high_score_label,
                             (self.x_shift + Settings.field_width_with_margin +
                              (Settings.game_side_width -
                               self.new_high_score_label.get_width()) / 2,
                              Settings.screen_height * 0.25))

        if self.over:
            self.game_over_alert.draw()

    def check_event(self, event):

        if self.over:
            return

        if event.type == pygame.KEYDOWN:
            if event.key == self.key_pause:
                self.pause = not self.pause
            elif self.field.falling_figure is None or self.pause:
                return
            elif event.key == self.key_rotate:
                self.field.falling_figure.rotate_clock_wise()
            elif event.key == self.key_left:
                self.field.falling_figure.move_left()
            elif event.key == self.key_right:
                self.field.falling_figure.move_right()
            elif event.key == self.key_faster:
                self.field.falling_figure.move_delay = Settings.game_delay_short

        if event.type == pygame.KEYUP:
            if self.field.falling_figure is None:
                return
            if event.key == self.key_faster:
                self.field.falling_figure.move_delay = Settings.game_delay
コード例 #16
0
def main():

    field = Field()
    field.start()
コード例 #17
0
    def test_normal_instanciation(self):
        fields = [Field('id', 'int', primary_key=True), Field('name', 'str')]

        table = Table('table_name', fields)
コード例 #18
0
ファイル: main.py プロジェクト: Einenlum/fake-db
from src.field import Field
from src.table import Table
from src.db import Db

fields = [
    Field('id', 'int', primary_key=True),
    Field('name', 'str'),
    Field('city', 'str', nullable=True),
    Field('activated', 'bool')
]
table = Table('users', fields)

db = Db([table])

print(Db)
コード例 #19
0
    def test_check_exception_if_wrong_type(self):
        fields = [Field('id', 'int', primary_key=True), Field('name', 'str')]

        table = Table('users', fields)
        with self.assertRaises(Exception):
            table.insert(id='test', name='Pierre')
コード例 #20
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(767, 585)
        MainWindow.setMinimumSize(QtCore.QSize(295, 218))
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setContentsMargins(1, 1, 1, 1)
        self.horizontalLayout.setSpacing(2)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.splitter = QtWidgets.QSplitter(self.centralwidget)
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName("splitter")
        self.optionsHolder = QtWidgets.QScrollArea(self.splitter)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.optionsHolder.sizePolicy().hasHeightForWidth())
        self.optionsHolder.setSizePolicy(sizePolicy)
        self.optionsHolder.setMinimumSize(QtCore.QSize(150, 0))
        self.optionsHolder.setMaximumSize(QtCore.QSize(200, 16777215))
        self.optionsHolder.setWidgetResizable(True)
        self.optionsHolder.setObjectName("optionsHolder")
        self.optionsHolderContents = QtWidgets.QWidget()
        self.optionsHolderContents.setGeometry(QtCore.QRect(0, 0, 198, 520))
        self.optionsHolderContents.setObjectName("optionsHolderContents")
        self.optionsVerticalLayout = QtWidgets.QVBoxLayout(
            self.optionsHolderContents)
        self.optionsVerticalLayout.setContentsMargins(2, 2, 2, 2)
        self.optionsVerticalLayout.setSpacing(5)
        self.optionsVerticalLayout.setObjectName("optionsVerticalLayout")
        self.instrumentName = QtWidgets.QLabel(self.optionsHolderContents)
        self.instrumentName.setAlignment(QtCore.Qt.AlignCenter)
        self.instrumentName.setObjectName("instrumentName")
        self.optionsVerticalLayout.addWidget(self.instrumentName)
        self.colorChanger = QtWidgets.QWidget(self.optionsHolderContents)
        self.colorChanger.setMinimumSize(QtCore.QSize(80, 70))
        self.colorChanger.setMaximumSize(QtCore.QSize(80, 70))
        self.colorChanger.setObjectName("colorChanger")
        self.backgroundColorChange = ClickableGraphicsView(self.colorChanger)
        self.backgroundColorChange.setGeometry(QtCore.QRect(20, 20, 40, 40))
        self.backgroundColorChange.setObjectName("backgroundColorChange")
        self.foregroundColorChange = ClickableGraphicsView(self.colorChanger)
        self.foregroundColorChange.setGeometry(QtCore.QRect(0, 0, 40, 40))
        self.foregroundColorChange.setObjectName("foregroundColorChange")
        self.swapColors = QtWidgets.QPushButton(self.colorChanger)
        self.swapColors.setGeometry(QtCore.QRect(40, 0, 21, 21))
        self.swapColors.setFlat(True)
        self.swapColors.setObjectName("swapColors")
        self.optionsVerticalLayout.addWidget(self.colorChanger)
        self.brushSizeChanger = QtWidgets.QWidget(self.optionsHolderContents)
        self.brushSizeChanger.setObjectName("brushSizeChanger")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.brushSizeChanger)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setSpacing(8)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label = QtWidgets.QLabel(self.brushSizeChanger)
        self.label.setObjectName("label")
        self.horizontalLayout_2.addWidget(self.label)
        self.brushSize = QtWidgets.QSpinBox(self.brushSizeChanger)
        self.brushSize.setMaximum(10000)
        self.brushSize.setProperty("value", 5)
        self.brushSize.setObjectName("brushSize")
        self.horizontalLayout_2.addWidget(self.brushSize)
        spacerItem = QtWidgets.QSpacerItem(5, 20,
                                           QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem)
        self.optionsVerticalLayout.addWidget(self.brushSizeChanger)
        self.figureChanger = QtWidgets.QWidget(self.optionsHolderContents)
        self.figureChanger.setObjectName("figureChanger")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.figureChanger)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setSpacing(8)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.label_2 = QtWidgets.QLabel(self.figureChanger)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_3.addWidget(self.label_2)
        self.figure = QtWidgets.QComboBox(self.figureChanger)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.figure.sizePolicy().hasHeightForWidth())
        self.figure.setSizePolicy(sizePolicy)
        self.figure.setObjectName("figure")
        self.horizontalLayout_3.addWidget(self.figure)
        spacerItem1 = QtWidgets.QSpacerItem(5, 20,
                                            QtWidgets.QSizePolicy.Expanding,
                                            QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem1)
        self.optionsVerticalLayout.addWidget(self.figureChanger)
        self.figureFillChanger = QtWidgets.QWidget(self.optionsHolderContents)
        self.figureFillChanger.setObjectName("figureFillChanger")
        self.figureFillChangerLayout = QtWidgets.QVBoxLayout(
            self.figureFillChanger)
        self.figureFillChangerLayout.setSpacing(3)
        self.figureFillChangerLayout.setObjectName("figureFillChangerLayout")
        self.label_3 = QtWidgets.QLabel(self.figureFillChanger)
        self.label_3.setObjectName("label_3")
        self.figureFillChangerLayout.addWidget(self.label_3)
        self.noFill = QtWidgets.QRadioButton(self.figureFillChanger)
        self.noFill.setObjectName("noFill")
        self.figureFillChangerGroup = QtWidgets.QButtonGroup(MainWindow)
        self.figureFillChangerGroup.setObjectName("figureFillChangerGroup")
        self.figureFillChangerGroup.addButton(self.noFill)
        self.figureFillChangerLayout.addWidget(self.noFill)
        self.frontFill = QtWidgets.QRadioButton(self.figureFillChanger)
        self.frontFill.setObjectName("frontFill")
        self.figureFillChangerGroup.addButton(self.frontFill)
        self.figureFillChangerLayout.addWidget(self.frontFill)
        self.backFill = QtWidgets.QRadioButton(self.figureFillChanger)
        self.backFill.setObjectName("backFill")
        self.figureFillChangerGroup.addButton(self.backFill)
        self.figureFillChangerLayout.addWidget(self.backFill)
        self.optionsVerticalLayout.addWidget(self.figureFillChanger)
        spacerItem2 = QtWidgets.QSpacerItem(20, 339,
                                            QtWidgets.QSizePolicy.Minimum,
                                            QtWidgets.QSizePolicy.Expanding)
        self.optionsVerticalLayout.addItem(spacerItem2)
        self.optionsHolder.setWidget(self.optionsHolderContents)
        self.imHolder = QtWidgets.QScrollArea(self.splitter)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.imHolder.sizePolicy().hasHeightForWidth())
        self.imHolder.setSizePolicy(sizePolicy)
        self.imHolder.setWidgetResizable(True)
        self.imHolder.setObjectName("imHolder")
        self.imHolderContents = QtWidgets.QWidget()
        self.imHolderContents.setGeometry(QtCore.QRect(0, 0, 559, 520))
        self.imHolderContents.setObjectName("imHolderContents")
        self.pictureHolder = QtWidgets.QGridLayout(self.imHolderContents)
        self.pictureHolder.setContentsMargins(0, 0, 0, 0)
        self.pictureHolder.setObjectName("pictureHolder")
        self.field = Field(self.imHolderContents)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred,
                                           QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.field.sizePolicy().hasHeightForWidth())
        self.field.setSizePolicy(sizePolicy)
        self.field.setText("")
        self.field.setAlignment(QtCore.Qt.AlignCenter)
        self.field.setObjectName("field")
        self.pictureHolder.addWidget(self.field, 0, 1, 1, 1)
        self.imHolder.setWidget(self.imHolderContents)
        self.horizontalLayout.addWidget(self.splitter)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 767, 22))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.instrumentsBar = QtWidgets.QToolBar(MainWindow)
        self.instrumentsBar.setMovable(False)
        self.instrumentsBar.setObjectName("instrumentsBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.instrumentsBar)
        self.action_new = QtWidgets.QAction(MainWindow)
        self.action_new.setObjectName("action_new")
        self.action_open = QtWidgets.QAction(MainWindow)
        self.action_open.setObjectName("action_open")
        self.action_save = QtWidgets.QAction(MainWindow)
        self.action_save.setObjectName("action_save")
        self.action_undo = QtWidgets.QAction(MainWindow)
        self.action_undo.setObjectName("action_undo")
        self.action_redo = QtWidgets.QAction(MainWindow)
        self.action_redo.setObjectName("action_redo")
        self.menu.addAction(self.action_new)
        self.menu.addAction(self.action_open)
        self.menu.addAction(self.action_save)
        self.menu_2.addAction(self.action_undo)
        self.menu_2.addAction(self.action_redo)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
コード例 #21
0
    def test_check_exception_if_not_nullable_field_missing(self):
        fields = [Field('id', 'int', primary_key=True), Field('name', 'str')]

        table = Table('users', fields)
        with self.assertRaises(Exception):
            table.insert(name='Pierre')
コード例 #22
0
ファイル: test_field.py プロジェクト: fpvieira/robot
 def setUp(self):
     self.field = Field(10,10)
コード例 #23
0
ファイル: field.py プロジェクト: Einenlum/fake-db
 def test_normal_instanciation(self):
     field = Field('some_name', 'str')
コード例 #24
0
ファイル: field.py プロジェクト: Einenlum/fake-db
 def test_exception_if_bad_type(self):
     with self.assertRaises(Exception):
         field = Field('some_name', 'some_invalid_type')
コード例 #25
0
ファイル: main.py プロジェクト: deplanty/mini-games
class Application(tk.Tk):
    def __init__(self):
        super().__init__()

        self.state = tags.FIRST_TURN
        self.current_pawn = None

        self.withdraw()
        self.title("Solitaire")
        self.set_menu()
        self.set_ui()
        self.set_events()
        self.resizable(False, False)
        self.init_new_game()
        self.deiconify()

    # UI methods

    def set_ui(self):
        """
        Sets the elements in the UI.
        """

        self.canvas = tk.Canvas(self)
        self.canvas.pack()
        self.field = Field(self.canvas)

    def set_menu(self):
        """
        Sets the menu in the UI.
        """

        menu = tk.Menu(self)
        menu_game = tk.Menu(menu, tearoff=0)
        menu_game.add_command(label="Nouveau", command=self.init_new_game)
        menu.add_cascade(label="Jeu", menu=menu_game)
        self.configure(menu=menu)

    def set_events(self):
        """
        Sets the events in the UI.
        """

        self.canvas.bind("<Button-1>", self.event_left_click)
        self.canvas.bind("<Button-3>", self.event_right_click)

    # Game methods

    def init_new_game(self):
        """
        Initializes a new game/
        """

        self.field.init()
        self.state = tags.FIRST_TURN

    # Events

    def event_left_click(self, event):
        """
        Manages the left click button event.
        """

        # Verify if a box has been clicked
        box = self.field.get(event.x, event.y)
        if not box:
            return

        # First turn : remove a pawn
        if self.state == tags.FIRST_TURN:
            self.field.toggle(box)
            self.field.show_movable_pawns()
            self.state = tags.SELECT_PAWN
        # Select a pawn
        elif self.state == tags.SELECT_PAWN:
            if self.field.box_is(box, tags.PAWN_MOVABLE):
                self.current_pawn = box
                self.field.show_target_box(box)
                self.state = tags.MOVE_PAWN
        # Move the pawn to an empty space
        # and remove the pawn between
        elif self.state == tags.MOVE_PAWN:
            if self.field.box_is(box, tags.EMPTY_TARGET):
                # Move the pawn
                self.field.toggle(box)
                self.field.toggle(self.current_pawn)
                # Remove the middle pawn
                i_box, j_box, _ = self.field.get_info(box)
                i_cur, j_cur, _ = self.field.get_info(self.current_pawn)
                i = (i_box + i_cur) // 2
                j = (j_box + j_cur) // 2
                self.field.toggle(self.field.grid[i][j])
                self.current_pawn = None
                # Show next move
                self.field.show_movable_pawns()
                self.state = tags.SELECT_PAWN
            # Undo pawn selection
            elif box == self.current_pawn:
                self.field.show_movable_pawns()
                self.state = tags.SELECT_PAWN

    def event_right_click(self, event):

        # Verify if a box has been clicked
        box = self.field.get(event.x, event.y)
        if not box:
            return

        self.field.toggle(box)
コード例 #26
0
 def solve_sudoku(self):
     if self.add_values(0, 0):
         Field.reset()
         print(self)