Игра МЕМОРИ на Python

Недавно я вспомнил одну настольную игру из детства, названия которой не мог вспомнить. Я долго искал её, описывал разными словами и наконец нашел что-то похожее, это игра Memory.

кадр из видео: https://goo.su/3XQJ
кадр из видео: https://goo.su/3XQJ

В моей памяти дизайн у неё был другой, но смысл игры тот же. После начала игры загорается один из цветов (красный, зеленый, синий, желтый) Далее нужно нажать на него и начнется новый круг. На новом круге загорится та же последовательность что и на предыдущим, но прибавится еще один цвет.

Одним скучным вечером мне захотелось сделать эту игру в виде программы, просто проверить, смогу ли я. Делать всё это я буду на языке программирования Python3

Сначала определимся какие нам понадобятся библиотеки. Красота мне не нужна, поэтому в качестве графической оболочки будут использовать стандартный tkinter. Так же понадобится библиотека random чтобы создавать случайную последовательность и библиотека time, чтобы можно было делать паузы.

Добавляем библиотеки
Добавляем библиотеки

Далее настраиваем параметры окна:

Настраиваем параметры
Настраиваем параметры

Вот что пока получилось:

Проверяем
Проверяем

Создадим 3 функции.

Create_menu - будет отвечать за то, чтобы появилась кнопка начать, внутри неё запустим функцию data, которая создаст массив со случайной последовательностью букв r g b y, это нам понадобится в далее.

А также создадим сами кнопки функция create_but, надеюсь пояснять как создавать кнопки Вам не нужно, скажи лишь, что не обращайте внимание на command=lambda: click_but("*"), позже расскажу об этом.

И функция clear_window - она будет удалять все элементы, размещенные методом place, т.к. у меня все элементы появляются через place, то эта функция просто удаляет все :))

(Если кто спросит почему data не засунуть в create_menu, то возражать не буду, просто так выглядит красивее :) )

Оставил комментарии, чтобы было более понятно, но если что-то не понятно пишите в комментариях :)
Оставил комментарии, чтобы было более понятно, но если что-то не понятно пишите в комментариях :)
Мини-игра на Python на улучшение памяти. -6

И так, что же пока получается?

В консоли можем заметить что наша рандомная последовательность создается, а это есть хорошо.

Мини-игра на Python на улучшение памяти. -7

Хорошо, а что дальше? Как вы можете заметить, если нажать на кнопку "Начать" запуститься функция start, что же она делает? Это сложная часть программы, попытайтесь вникнуть!

Нам нужно показать игроку, какая кнопка в какой последовательности идет, для этого я буду, в зависимости от последовательности которую мы сгенерировали ранее, удалять кнопку и создавать на её месте более затемнённую версию, и тогда пользователь поймет какая последовательность нажатий должна быть.

В программе это выглядит так:

Мини-игра на Python на улучшение памяти. -8
Мини-игра на Python на улучшение памяти. -9

Переменная perem_for_click_user будет отвечать за то, сколько раз уже нажали на кнопку на этом кругу.

Далее начинается цикл от 0 до количество кругов. Так как это первый круг, то цикл выполнится один раз, если последовательность выглядит так:

['g', 'r', 'y', 'y'.......................]

То сначала удалится светло-зеленая кнопка и на неё месте появиться темно-зеленая кнопка. Далее обновляем экран, чтобы кнопка поменяла цвет на экране, делаем небольшую паузу, чтобы пользователь заметил изменение. Затем удаляем всё с экрана и опять создаем стандартные кнопки.

Уже почти конец, осталось чуть-чуть потерпеть! У тебя всё получится!
Уже почти конец, осталось чуть-чуть потерпеть! У тебя всё получится!

Теперь вернемся к тому самому "не обращайте внимание на command=lambda: click_but("*"), позже расскажу об этом."

Если мы нажмем на красную кнопку, то она передаст "r" в функция click_but, если нажмем зеленую кнопку, то передаст "g" и так по аналогии.

А что это за функция такая click_but? А вот она!

Мини-игра на Python на улучшение памяти. -11

Думаю, это самое сложное место в программе. Поэтому распишу чуть подробнее!

После того как пользователю показалась последовательность кнопок, например красная-зеленая-синяя, переменная perem_for_click_user равняется нулю. Когда пользователь нажмет на красную кнопку, в эту функцию будет передано значение "r" , далее делается проверка, если первое значение в этой последовательности равна "r" значит, пользователь нажал правильную кнопку, поэтому количество кликов на этом кругу увеличивается на 1, а если пользователь уже нажал на кнопки столько, сколько равно номеру кругу, значит круг законен. А это значит что нужно увеличить переменную круга на 1, и заново запустить показывания последовательности пользователю, где переменная perem_for_click_user обнулится и пойдет всё по новой, но добавится одна кнопка в конце последовательности. И так всё по кругу...

Если же пользователь бы нажал не правильную кнопку, то сработала бы end_game(). Тут всё просто:

Мини-игра на Python на улучшение памяти. -12

Ну вот как-то так! Если хотите сами потыкать программу вручную, например поменять время задержки, или расположение кнопок или просто испоганить код, то вот ссылка на него: https://onlinegdb.com/QIvMQsH-G

Всем добра и вот еще милое фото котика!!!

Мини-игра на Python на улучшение памяти. -13