Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.08.2020
Сообщений: 2

Memory puzzle на Python, Tkinker

04.11.2020, 16:27. Показов 3601. Ответов 0

Студворк — интернет-сервис помощи студентам
Добрейшего вам, народ. Стоит задача сделать игру "Найди пару" используя ООП, паттерн MVC и tkinter.
Поле 4 х 4. Заполнено 16 кнопками. От каждой кнопки, на текущий момент, можно получить ее расположение на поле, а так же ее значение ['text']. Принцип скрытия и отображения этого текста в простом изменении цвета кнопки(изначально текст кнопки должен быть скрыт, я это делаю во время создания кнопки через параметр fg='black').
Задача в следующем:
-отобразить последовательно 2 кнопки на которые кликает игрок, и если они совпадают, то оставить их видимыми, если нет, то скрыть первую кнопку.
-определить победу, когда все кнопки отгаданы.

Буду признателен за вашу помощь.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import tkinter as tk
import random
 
 
CELLS_PER_SIDE = 4
counter = 0
 
#controller
class ControllerGame:
    def __init__(self, root):
        self.root = root
        self.data_game = DataGame()
        self.gui_game = GuiGame(root, *self.data_game.get_btn_list())
        self.get_started()
        self.counter = 0
        self.button1 = None
        self.button2 = None
 
    def get_started(self):
        btn_lst = self.gui_game.draw_buttons()
        for btn in btn_lst:
            btn.bind('<Button-1>', self.get_mouse_click)
 
 
    def get_mouse_click(self, event):
        w = event.widget
        pos = w.grid_info()
        button_ind = pos['column'] + pos['row'] * 4
        button_num = int(self.gui_game.draw_buttons()[button_ind]['text'])
        button = self.gui_game.draw_buttons()[button_ind]
        # self.show_button(button)
 
        if self.counter % 2 == 0:
            self.button1 = button_num
            self.counter += 1
            self.show_button(button)
            # self.root.after(500, self.hide_button(button))
 
        elif self.counter % 2 == 1:
            self.button2 = button_num
            self.counter += 1
            self.show_button(button)
        if self.button1 == self.button2:
            print('ok')
 
        print('button1', self.button1, 'button2', self.button2)
 
    def show_button(self, button_ind):
        button_ind['fg'] = 'red'
    # def hide_button(self, button_ind):
    #     button_ind['fg'] = 'white'
 
 
#view
class GuiGame:
    def __init__(self, root, *btn):
        self.root = root
        self.root.title('Memory puzzle')
        self.button_num = list(btn)
        random.shuffle(self.button_num)
 
    def draw_buttons(self):
        tmp_list = []
        for i, b in enumerate(self.button_num):
            b.grid(row=(i // CELLS_PER_SIDE), column=(i % CELLS_PER_SIDE), sticky='ew')
            tmp_list.append(b)
        return tmp_list
 
 
 
#model
class DataGame:
    def __init__(self):
        self.buttons_text = [1, 2, 3, 4, 5, 6, 7, 8] * 2
 
    def get_btn_list(self):
        btn_list = []
        for btn_i in self.buttons_text:
            b = tk.Button(root, text=str(btn_i), fg='black', bg='white', width=5, activeforeground='white',
                          activebackground='white', height=2, font=('Comic Sans MS', 12))
            btn_list.append(b)
        return btn_list
 
 
if __name__ == '__main__':
    root = tk.Tk()
    cg = ControllerGame(root)
    root.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2020, 16:27
Ответы с готовыми решениями:

Графический интерфейс tkinker PYTHON
Доброго времени суток, хотел сделать окно для бота в оффлайн игры. Не могу понять, как вместо слов &quot;true - false&quot; справа от...

Class QPainter игра Memory Puzzle
Хочу написать игру аналог Memory Puzzle. Когда начала писать, столкнулась с проблемой : Cоздаю 2 прямокутника, 1)и на каждом у...

Проблемы с работой по Python. Memory error
При попытке запустить , выходит ошибка. Я начинаюший в datascince, пытаюсь запустить машинное обучение ) типа предсказание . Может кто...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2020, 16:27
Помогаю со студенческими работами здесь

Python приложене останавливается с ответом out of memory
В каждой функции все переменные удаляются по завершению функции, а память все равно заканчивается, как это исправить? bot.py:...

PLC Omron memory D, исправить программу на языке Python
У меня есть ПЛК (программируемый логический контроллер) Omron CP1L. К нему надо исправить драйвер, который загружает текст, получаемый с...

Ошибка с окном Tkinker
У меня есть следующая проблема. Я создал gui с Tkinter, и когда я запускаю его в своей среде pycharm все работает отлично, но когда я...

Create an in memory bitmap and draw directly to the memory
Здравствуйте! У меня есть пара вопросов. Знаю, что рисовать в HDC можно только с одного потока. Но узнал такую вещь, что можно создать...

Failed to load image from memory. Reason: Out of memory
Доброго времени суток. Делал игру 64битную, все работало хорошо, подключил все библиотеки все по инструкции, потом решил собрать 32 битную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru