Python Tkinter Tutorial: создайте игру с калькулятором процента любви

создайте игру с калькулятором процента любви Программирование и разработка

Эта серия статей направлена ​​на расширение ваших знаний о Tkinter, стандартном интерфейсе Python для набора инструментов Tk GUI, путем создания интерактивных игр, которые вы можете добавить в свое резюме.

Прохождение игры калькулятор любви

Сегодня мы разработаем игру, которая будет вычислять процент любви между двумя входными именами. В этой игре вам просто нужно ввести два имени и ответить на несколько простых вопросов типа «да или нет». В конце концов, вы получите процент любви между этими двумя людьми.

Давайте разработаем ту же игру, используя Python 3 и Tkinter!

Правила и как играть

  1. Запустите программу.
  2. Введите всю необходимую информацию.
  3. Нажмите кнопку-сюрприз в окне Tkinter.
  4. Смотрите результат.
  5. Закройте и играйте снова.

Схема игры

Давайте разработаем ту же игру, используя Python 3 и Tkinter

Прохождение программы

Когда пользователь запускает программу, ему будет предложено ввести два имени для расчета процента любви. После того, как пользователь введет имена, ему будет предложено пять разных вариантов ответа «да» или «нет». Наша программа будет использовать эти ответы для вычисления значения процента любви позже в нашей программе.

Теперь наша программа рассчитает процент любви на основе букв в двух введенных именах. Затем он будет использовать значения ответов для увеличения процента любви. Теперь, после того, как все входные данные будут получены, наша программа откроет окно Tkinter, в котором будут отображаться оба имени, разделенные «LOVES».

Например: если пользователь ввел «Чендлер» и «Моника» как два имени, наша программа отобразит «Чендлер любит Монику».

Под вторым именем будет кнопка. Когда пользователь нажимает кнопку, он показывает процент любви в виде изображения. Затем пользователь может закрыть программу и снова начать играть.

Расчетный процесс

Давайте рассмотрим пример, чтобы понять, как программа считает процент любви по буквам в именах:

Программа посчитает появление всех символов в соответствии с их порядком. Чем больше букв используется в имени, тем выше рейтинг.

Например: возьмите имена Чендлер и Моника. Здесь первый символ — «C». Таким образом, наша программа будет искать в списке другое вхождение буквы «C». Если есть еще одна буква «C», она увеличит счетчик «C» на 1. Наша программа будет продолжаться до тех пор, пока не достигнет конца списка.

Итак, как он рассчитает процент? Мы будем использовать результат предыдущих расчетов. Наша программа собирается взять первый и последний номер и сложить его. Если сложение ≥10, то они будут добавлены внутри.

Например: оценка из 14 букв будет1 + 4 = 51 + 4 = 5.

Как только он сложит первое и последнее числа, он сохранит добавление в первую очередь и удалит последний элемент, и это будет продолжаться до тех пор, пока не останется только два числа.

Как только он сложит первое и последнее числа, он сохранит добавление

После того, как у нас будет значение процента любви, мы будем использовать значения ответов для увеличения процента. Если текущее значение низкое, то мы увеличим его на 5 пунктов. Имейте в виду, что вы можете изменять свою программу по своему усмотрению, задав различные условия.

Реализация игры на Python (16 шагов)

Теперь, когда у нас есть представление о том, что влечет за собой калькулятор любви, давайте шаг за шагом пройдемся по процессу на Python. Если вы еще не знаете, как настроить Tkinter, ознакомьтесь с нашей первой статьей в этой серии, чтобы получить краткое руководство.

Реализация этой игры требует двух частей:

  • Принимая вход от пользователя
  • Отображение вывода в окне Tkinter

1. Импортируйте необходимые библиотеки.

from tkinter import *
import simpleaudio as sa
from collections import Counter
  • tkinter: Чтобы добавить виджеты в наше приложение.
  • simpleaudio: Для воспроизведения звуковых файлов.
  • Counter: Для расчета встречаемости каждого символа.
Читайте также:  Обработка аргументов командной строки C

2. Возьмите имена входов

Здесь мы берем два ввода имени от пользователя. Пользователь должен ввести значения имени. После этого мы преобразуем вводимые данные в верхний регистр, чтобы они совпадали с именами наших файлов.

name1 = input(«NAME1 : «)
name2 = input(«NAME2 : «)
name1 = name1.upper()
name2 = name2.upper()

3. Установите более длинное имя как name1

Здесь мы устанавливаем более длинное имя как name1и более короткое, name2чтобы оно не искажало наш модуль Tkinter. Если длины обоих имен равны, мы не вносим этого изменения.

if len(name2)>len(name1):
    name3 = name1
    name1 = name2
    name2 = name3

4. Получите ответы на вопросы

Здесь мы принимаем ответы пользователей на наши вопросы. Мы собираемся использовать результат этих вопросов для вычисления процента любви позже в нашей программе. Пользователь должен ввести да или нет.

print(«\n»)
print(«Reply the following questions in YES OR NO : \n»)
answer1 = input(«Does your partner makes you a better person? : \n»)
answer2 = input(«\nDoes it gives you butterflies in your stomach when you see him/her ? : \n»)
answer3 = input(«\nIs your partner your best friend? : \n»)
answer4 = input(«\nAre you willing to sacrifice your own need for him/her? : \n»)
answer5 = input(«\nDo you accept your partner for who he/she is? : \n»)

5. Последняя строка

Здесь мы вычисляем окончательную строку, добавляя LOVESмежду двумя именами.

Например: если мы введем два имени «Чендлер» и «Моника», тогда наша последняя строка будет «Чендлер любит Монику». Затем мы конвертируем строку в список.

#Get the final string
final_string = name1+»LOVES»+name2
#Convert string into list
l1 = list(final_string)
print(l1)

6. Вычислите частоту появления каждого символа.

Здесь мы вычисляем появление каждого символа в нашем списке. В результате этого list2сохраняется количество вхождений каждого символа.

#Count the number of occurance for each character
list2 = l1
c = Counter( list2 )
list2 = list(c.values())
print (list2)

7. Напишите основную логику

Теперь мы вычисляем значение процента любви на основе двух названий входных данных. Мы создаем пустой список под названием list 5. Наша программа берет первое и последнее числа из списка и складывает их.

Если число ≥10, оно добавит цифры внутри, чтобы получить однозначное число. Затем убираем последнюю цифру из нашего списка. Теперь мы вставляем значение выполненной нами операции сложения в 0-й индекс.

Список 5 будет хранить обновленные значения списка 2 после удаления последнего числа и вставки добавляемого значения в 0-й индекс. Затем мы обновляем список 2 списком 5, чтобы эту операцию можно было продолжить с новым списком.

Эта операция будет продолжаться до тех пор, пока не останется только 2 числа. В списке 5 должно быть только два числа. мы используем для расчета процента вместе с вопросами «да» или «нет».

n = len(list2)
list5 = []
i=0
while n>2:
    num = list2[i] +list2[n-1]
    if num>=10:
        sum = 0
        while(num!=0):
            sum = sum + int(num%10)
            num =int(num/10)
        num = sum
    list5 = list2[1:n-1]
    list5.insert(0,num)
    print(list5)
    list2 = list5
    n = n-1

8. Преобразуйте список в int значение

Теперь мы преобразуем список из двух чисел в строку. Затем мы преобразуем его в целое число, чтобы мы могли в дальнейшем изменять его на основе ответов на вопросы, заданные пользователем.

#Convert the list of 2 numbers to string
listToStr = «».join([str(elem) for elem in list5])
#Convert the string to integer
value = int(listToStr)
print(listToStr)

9. Изменение значения на основе ответов на вопросы

Увеличиваем балл любви на основе ответов на вопросы. Мы увеличиваем значение только в том случае, если оно меньше 95. Если ответ на первый вопрос «ДА», увеличиваем значение на 5.

Если значение меньше 90, мы увеличиваем значение еще на 5. Этот процесс продолжается для 5 операторов if. Цель этого кода — подчеркнуть структуру вложенных операторов if.

Имейте в виду, что есть много способов увеличить значение процента любви. Здесь можно проявить творческое воображение!

#Add points based on the questions asked
if value<95:
    if answer1==»YES» or answer1==»yes» or answer1==»Yes»:
        value = value+5
    if value<90:
        if answer2==»YES» or answer2==»yes» or answer2==»Yes»:
            value = value+5
        if value<85:
            if answer3==»YES» or answer3==»yes» or answer3==»Yes»:
                value = value+5
            if value<80:
                if answer4==»YES» or answer4==»yes» or answer4==»Yes»:
                    value = value+5
                if value<75:
                    if answer5==»YES» or answer5==»yes» or answer5==»Yes»:
                        value = value+5
print(value)

10. Главное окно Tkinter и звуковые файлы.

root = Tk()
root.geometry(«+100+0»)
root.configure(bg=»#000000″)
root.iconphoto(True,PhotoImage(file=»Surprise.png»))
root.title(«Love Percentage Game»)
root.resizable(width=False,height=False)
#Load sound files
start = sa.WaveObject.from_wave_file(«Start.wav»)
one = sa.WaveObject.from_wave_file(«Win.wav»)
two = sa.WaveObject.from_wave_file(«6.wav»)
  • root = Tk( ): Это используется для инициализации нашего модуля tkinter.
  • root.title( ): Мы используем его, чтобы задать заголовок для нашего приложения.
  • root.geometry( ): Мы используем это, чтобы указать, в каком месте будет открываться окно нашего приложения.
  • root.configure( ): Мы используем это, чтобы указать цвет фона для нашего приложения.
  • root.resizable( ): Здесь мы используем его, чтобы пользователи не могли изменять размер нашего главного окна.
  • root.iconphoto( ): Мы используем его, чтобы установить значок в строке заголовка для окна нашего приложения. Мы устанавливаем первый параметр равным True, чтобы все окна имели одинаковый значок.

Затем добавляем найденные файлы, которые будут проигрываться при различных событиях. Следует отметить, что программа принимает только.wavфайлы. Нам нужно загрузить звуковой файл как объект. Затем мы можем воспроизвести это с помощью.play( )метода.

Читайте также:  Что такое индексный файл index.html

11. Загрузить изображения

surprise = PhotoImage(file=»Surprise.png»)
fingers = PhotoImage(file=»fingers.png»)
#Display the love percentage in label image
result = PhotoImage(file=str(value)+str(«.png»))
  • Мы собираемся использовать изображение-сюрприз в качестве кнопки.
  • Мы собираемся использовать изображение пальцев в качестве метки.
  • После того, как мы подсчитали процент любви, мы показываем его как изображение. Обратите внимание, что наши цифровые изображения хранятся как:
    • 1.png
    • 2.png
    • 3.png

12. Найдите длину и составьте список

Мы отображаем каждую букву как метку, поэтому нам нужно составить список. Мы используем цикл для отображения изображений для каждой буквы, поэтому нам нужно найти длину каждого имени. Обратите внимание, что здесь мы преобразуем строку «LOVES» в список и находим его длину.

n_1 = len(name1)
n_2 = len(name2)
l1 = list(name1)
l2 = list(name2)
l3 = list(«LOVES»)
n_3 = len(l3)

13. Загрузка и показ изображений

Здесь мы загружаем изображения для каждой буквы для name1, name2и loves. Затем мы отображаем изображения меток, name1а затем добавляем пустое место в следующей строке. Обратите внимание, что наш цикл будет выполняться для каждого символа. По мере запуска он увеличивает значение столбца на 1, чтобы все буквы располагались рядом. То же самое делаем для name2и loves.

#Load the images for name1
for i in range(n_1):
    l1[i] = PhotoImage(file=str(name1[i])+str(«_P.png»))
#Load the images for name2
for j in range(n_2):
    l2[j] = PhotoImage(file=str(name2[j])+str(«_P.png»))
#Load the images for LOVES
for k in range(n_3):
    l3[k] = PhotoImage(file=str(l3[k])+str(«_P.png»))
#Show name1 as label image
r1=0
c1=0
for i in range(n_1):
    B = Label(root,image=l1[i])
    B.grid(row=r1,column=c1)
    c1 = c1+1
#Add blank space
root.grid_rowconfigure(1, minsize=10)
#Show «LOVES» as image label
r2 = 2
c2 = 0
for k in range(n_3):
    B = Label(root,image=l3[k])
    B.grid(row=r2,column=c2)
    c2 = c2+1
#Add blank space
root.grid_rowconfigure(3, minsize=10)
#Show name2 as label image
r4=4
c4=0
for j in range(n_2):
    B = Label(root,image=l2[j])
    B.grid(row=r4,column=c4)
    c4 = c4+1
#Add blank space
root.grid_rowconfigure(5, minsize=10)

14. Кнопка добавления

Здесь мы добавляем кнопку, которая запускает Reveal( )функцию. Затем мы устанавливаем кнопку в центре окна, используя столбцы. Затем мы добавляем пустое пространство и метку, которая будет показывать результат, когда пользователь нажимает кнопку.

#Add a button :
btn = Button(root,image=surprise,command=lambda:Reveal())
btn.grid(row=6,column=0,columnspan=n_1)
#Add blank space :
root.grid_rowconfigure(7, minsize=10)
#Add a label to show the result :
res = Label(root,image=fingers)
res.grid(row=8,column=0,columnspan=n_1)

15. Reveal( )и close( )функции

Когда пользователь нажимает кнопку, эта функция запускается. Здесь мы показываем метку изображения, которая будет отображать процент любви. Если пользователь снова нажимает кнопку, он использует close( )функцию, чтобы закрыть наше приложение. close( )Функция будет играть звуковой файл перед закрытием окна.

#Function that reveals the love percentage as image label :
def Reveal():
    res.configure(image=result)
    one.play()
    btn.configure(command=lambda:close())
    two.play()
#Close function
def close():
    two.play()
    root.destroy()

16. Войдите в основной цикл

Нам нужно войти в основной цикл, чтобы запустить программу. Наша программа останется в основном цикле, пока мы не нажмем кнопку закрытия.

#Enter the main loop
root.mainloop()

Собираем все вместе

Взгляните на полный код этой игры Python Tkinter.

Хотите скачать код и изображения? Вы можете скачать все необходимые изображения и код здесь.

#!/usr/bin/env python
# coding: utf-8
# In[4]:
#Import required libraries
from tkinter import *
import simpleaudio as sa
from collections import Counter
#Take 2 names as input
name1 = input(«NAME1 : «)
name2 = input(«NAME2 : «)
#Convert the names to upper case
name1 = name1.upper()
name2 = name2.upper()
#Set the longer name as name1
if len(name2)>len(name1):
    name3 = name1
    name1 = name2
    name2 = name3
#Get answers to the few questions
print(«\n»)
print(«Reply the following questions in YES OR NO : \n»)
answer1 = input(«Does your partner makes you a better person? : \n»)
answer2 = input(«\nDoes it gives you butterflies in your stomach when you see him/her ? : \n»)
answer3 = input(«\nIs your partner your best friend? : \n»)
answer4 = input(«\nAre you willing to sacrifice your own need for him/her? : \n»)
answer5 = input(«\nDo you accept your partner for who he/she is? : \n»)
#Get the final string
final_string = name1+»LOVES»+name2
#Convert string into list
l1 = list(final_string)
print(l1)
#Count the number of occurance for each character
list2 = l1
c = Counter( list2 )
list2 = list(c.values())
print (list2)
#Main logic to calculate the value
n = len(list2)
list5 = []
i=0
while n>2:
    num = list2[i] +list2[n-1]
    if num>=10:
        sum = 0
        while(num!=0):
            sum = sum + int(num%10)
            num =int(num/10)
        num = sum
    list5 = list2[1:n-1]
    list5.insert(0,num)
    print(list5)
    list2 = list5
    n = n-1
#Convert the list of 2 numbers to string
listToStr = «».join([str(elem) for elem in list5])
#Convert the string to integer
value = int(listToStr)
print(listToStr)
#Add points based on the questions asked
if value<95:
    if answer1==»YES» or answer1==»yes» or answer1==»Yes»:
        value = value+5
    if value<90:
        if answer2==»YES» or answer2==»yes» or answer2==»Yes»:
            value = value+5
        if value<85:
            if answer3==»YES» or answer3==»yes» or answer3==»Yes»:
                value = value+5
            if value<80:
                if answer4==»YES» or answer4==»yes» or answer4==»Yes»:
                    value = value+5
                if value<75:
                    if answer5==»YES» or answer5==»yes» or answer5==»Yes»:
                        value = value+5
print(value)
#=================================================================================================================#
#Configure tkinter window
root = Tk()
root.geometry(«+100+0»)
root.configure(bg=»#000000″)
root.iconphoto(True,PhotoImage(file=»Surprise.png»))
root.title(«Love Percentage Game»)
root.resizable(width=False,height=False)
#Load sound files
start = sa.WaveObject.from_wave_file(«Start.wav»)
one = sa.WaveObject.from_wave_file(«Win.wav»)
two = sa.WaveObject.from_wave_file(«6.wav»)
#Load images we’re going to use
surprise = PhotoImage(file=»Surprise.png»)
fingers = PhotoImage(file=»fingers.png»)
#Display the love percentage in label image
result = PhotoImage(file=str(value)+str(«.png»))
#Play the sound file
start.play()
n_1 = len(name1)
n_2 = len(name2)
l1 = list(name1)
l2 = list(name2)
l3 = list(«LOVES»)
n_3 = len(l3)
#Load the images for name1
for i in range(n_1):
    l1[i] = PhotoImage(file=str(name1[i])+str(«_P.png»))
#Load the images for name2
for j in range(n_2):
    l2[j] = PhotoImage(file=str(name2[j])+str(«_P.png»))
#Load the images for LOVES :
for k in range(n_3):
    l3[k] = PhotoImage(file=str(l3[k])+str(«_P.png»))
#Show name1 as label image
r1=0
c1=0
for i in range(n_1):
    B = Label(root,image=l1[i])
    B.grid(row=r1,column=c1)
    c1 = c1+1
#Add blank space
root.grid_rowconfigure(1, minsize=10)
#Show «LOVES» as image label
r2 = 2
c2 = 0
for k in range(n_3):
    B = Label(root,image=l3[k])
    B.grid(row=r2,column=c2)
    c2 = c2+1
#Add blank space
root.grid_rowconfigure(3, minsize=10)
#Show name2 as label image
r4=4
c4=0
for j in range(n_2):
    B = Label(root,image=l2[j])
    B.grid(row=r4,column=c4)
    c4 = c4+1
#Add blank space
root.grid_rowconfigure(5, minsize=10)
#n = len(name1)
#Add a button
btn = Button(root,image=surprise,command=lambda:Reveal())
btn.grid(row=6,column=0,columnspan=n_1)
#Add blank space
root.grid_rowconfigure(7, minsize=10)
#Add a label to show the result
res = Label(root,image=fingers)
res.grid(row=8,column=0,columnspan=n_1)
#Function that reveals the love percentage as image label
def Reveal():
    res.configure(image=result)
    one.play()
    btn.configure(command=lambda:close())
    two.play()
#Close function
def close():
    two.play()
    root.destroy()
#Enter the main loop
root.mainloop()

Заключение и ресурсы

Поздравляю! Вы достигли конца и создали успешную игру на Python Tkinter. Отличная работа с применением ваших знаний Python. Надеюсь, вам понравилась эта статья и вы узнали из нее что-то новое.

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

Оцените статью
bestprogrammer.ru
Добавить комментарий