Рубрики
Без рубрики

Python Tkinter Tutorial: построить срубленные слова игры с нуля

Python Tkinter Games Series Build Номера Угадая Игра Построить срубленные слова из … Помечено с Python, Tkinter, Game.

Серия Python Tkinter Games

Эта статья является частью серии Python Tkinter, написанных Pratik Shukla. Проверьте его Средний счет читать его другие статьи. И оставаться настроен на большее количество статей Tkinker из Pratik!

Эта серия направлена на то, чтобы познакомить вас с TKinter, стандартным интерфейсом Python в TK GUI Toolkit, а также поможет создавать интерактивные игры, которые вы можете добавить в свое резюме. Чтобы добраться до скорости на Tkinter, посмотрите нашу первую статью в этой серии Учебник Python Tkinter: построить игровую игру в размере . Как только вы получите основы, вернитесь здесь, чтобы построить Друзья слова Игра с нуля!

Сегодня мы охватим:

  • Jumbed Syves Game Worlhough
  • Зарезанные слова Игра Реализация
  • Положить все вместе
  • Упаковка и ресурсы

Jumbed Syves Game Worlhough

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

Как играть

  • Запустите программу.
  • Введите свое предположение от перемешиваемого слова.
  • Проверьте результат.
  • Играть снова или закройте.

Прохождение

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

Если угаданное слово правильно, этикетка преобразует свое изображение в Выиграть И правильное слово будет показано пользователю. Наша программа также покажет нам время, необходимое пользователем, чтобы угадать правильное слово.

Если догадка пользователя неверна, то этикетка покажет Потерять Image, и виджет ввода будет очищен, чтобы снова ввести слово. Наша программа не покажет правильное слово или время, сделанное, если догадка пользователя неверна.

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

Представление строк-колонны в Tkinter

Конечный результат

Реализация в Python (12 шагов)

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

#Import required libraries
from tkinter import *
import simpleaudio as sa 
import random
import tkinter.font as font
import time
  • Tkinter : Добавить виджеты в нашем приложении
  • Simpleaudio : Играть в звуковые файлы
  • Случайные : Чтобы выбрать случайное слово
  • tkinter.font : Изменить свойства шрифта
  • время : Рассчитать время, необходимое пользователем

2. Создать главное окно Tkinter

running = True

while running==True:
  #Calculate starting time
  start_time = time.time()

  root = Tk()
  root.geometry('+100+0')
  root.configure(bg="#000000")
  root.iconphoto(True,PhotoImage(file="Surprise.png"))
  root.title("JUMBLE WORDS")
  root.resizable(width=False,height=False)
  • Сначала мы создаем переменную под названием Бег и установить его значение для Правда Отказ Наша программа будет генерировать новое окно, когда переменная установлена на Правда Отказ Когда пользователь нажимает основную кнопку закрытия в строке заголовка, она выйдет из цикла.
  • root () : Это используется для инициализации нашего модуля Tkinter.
  • root.title () : Мы используем его, чтобы установить заголовок для нашего приложения.
  • root.geometry () : Мы используем это, чтобы указать, в каком месте наше окно приложения откроется. В нашем случае он откроется на 100 баллов налево и 0 указывает на вниз с верхнего левого угла.
  • root.configure () : Мы используем это, чтобы указать цвет фона для нашего приложения. В нашем случае цвет фона будет черным.
  • root.resizable () : Здесь мы используем его, чтобы помешать пользователям разместить наше главное окно.
  • root.iconphoto () : Мы используем его, чтобы установить значок в строке заголовка для нашего окна приложения. Мы устанавливаем первый параметр на Истинный Так что для того, чтобы все другие окна, созданные из этого приложения, имеют одинаковый значок.
  • Здесь мы также создаем переменную под названием Время начала , который хранит значение времени, когда окно было открыто.

3. Загрузка звуковых файлов

#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("Lose.wav")
three = sa.WaveObject.from_wave_file("6.wav")

start.play()

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

Одна вещь, чтобы заметить, что он принимает только .wav файлы. Прежде всего, нам нужно загрузить звуковой файл в качестве объекта. Тогда мы можем играть его, используя .играть () метод при необходимости.

4. Выберите слово случайным образом

#select a word from list
def random_word():
  words=["RAIN","CLOUD","NATURE","BEAUTIFUL","HOUSE"]
  pick = random.choice(words)
  return pick

Эта функция выберет слово случайным образом из списка предусмотренных слов. Он может содержать как можно больше слов, сколько вы хотите. Random.Choice () Метод случайным образом выбирает слово из списка слова. Затем мы вернем это слово, чтобы использовать его в других функциях.

5. Jumble выбранного слова

# Jumble the selected word
def jumbled_word(word):
  word = ranom.sample(word,len(word))
  word_jumbled = "".join(word)
  return word_jumbled

Теперь, когда наша программа выбрала слово, нам нужно обмануть его для нашей игры. Эта функция учитывает слово, выбранное нашей предыдущей функцией. Random.sample () Функция берет слово, заряжается его и дает список букв. Мы можем указать длину слова, но в нашем случае он будет таким же, как оригинальное слово. Тогда нам нужно присоединиться к перемешанным буквам, чтобы сделать строку. Наконец, он вернет перемешиваемое слово, чтобы мы могли использовать его в следующей функции.

6. Организуйте буквы

# Randmoly selected word
pick = random_word()

# Jumbled word
jumbled = jumbled_word(pick)

# Get the letters from the jumbled word
list1 = list(jumbled)
len_list1 = len(list1)

# Get the Images for our letters
for i in range(len_list1):
  list1[i] = PhotoImage(file=str(list1[i])+str("_P.png"))

row_0 = 0
col_0 = 0

# Arrange the letters on the main window
for i in range(len_list1):
  B = Label(root,image=list1[i])
  B.grid(row=row_0,column=col_0)
  col_0 = col_0 + 1
  • Случайно выбранное слово будет сохранено в выбрать Переменная.
  • Разрушенное слово будет храниться в заряжаться Переменная.
  • List1 преобразует нашу строку в список букв. len_list1 дает нам длину слова.
  • Затем мы загружаем изображения для наших букв. Наши изображения хранятся как A_p.png , B_p.png , C_p.png , и так далее.
  • Мы хотим, чтобы буквенные изображения показать как этикетку, и она должна быть на одной строке. Мы увеличиваем значения столбца в качестве нового письма. Конечный результат будет перемешанным словом, представленным как ярлыки изображений.

7. Загрузить другие необходимые изображения

# Blank space for row_1
root.gird_rowconfigure(1, minsize=10)

# Modify font
myFont = font.Font(family='Calibri', weight='bold')

# For label image
your_choice = PhotoImage(file"YOUR_GUESS.png")
surprise = PhotoImage(file="suprprise.png")
win = PhotoImage(file="WINNN.png")
lose = PhotoImage(file="LOSEEE.png")
check = PhotoImage(file="CHECKK.png")
close = PhotoImage(file="CLOSEE.png")
  • После того, как мы добавили слово, мы добавим пустое строку, чтобы сделать его менее перегруженным.
  • Теперь мы изменим шрифты для использования позже в нашем виджете въезда.
  • Теперь нам нужны различные изображения для Главная этикетка , победить , терять , Проверьте , Закрыть , так далее. Итак, здесь мы загружаем их в переменные, чтобы использовать его позже.

8. Добавить виджет ввода

 #Entry label
label = Label(root,image=your_choice)
label.grid(row=2,column=0,columnspan=len_list1)
label["font"] = myFont

#Add blank space
root.grid_rowconfigure(3, minsize=10) 

#Add entry widget
e1 = Entry(root,bd=5,bg="#9ca1db",justify=CENTER,font=myFont,fg="#000000")
e1.grid(row=4,column=0,columnspan=len_list1)

#Add blank space
root.grid_rowconfigure(5, minsize=10) 
  • Теперь мы собираемся добавить метку, которая говорит, что введите ваше предположение. Здесь мы используем модифицированные шрифты, которые мы сделали в предыдущей точке.
  • После этого мы просто добавляем пробел.
  • Теперь мы добавляем виджет ввода, где пользователь введет свое догадное слово. Здесь мы используем Columnspan сделать это в центр.
  • Теперь мы снова добавляем пустое место.

9. Оригинальные слова изображения

#Check button 
button =Button(root,image=check,command=lambda:result())
button.grid(row=6,column=0)

#Close button 
Btn = Button(root,image=close,command=lambda:reset())
Btn.grid(row=6,column=len_list1-1)

#Add blank space 
root.grid_rowconfigure(7, minsize=10) 

Теперь нам нужно добавить кнопку проверки и закрыть кнопку. Нажатие этих кнопок будет вызвать Результат () и Сброс () функции соответственно. Проверьте Кнопка будет в первом столбце, а кнопка «Закрыть» будет в последнем столбце.

10. Результат и промежуток времени

 #Label that will display result 
label2 = Label(root,image=surprise)
label2.grid(row=8,column=0,columnspan=len_list1)

root.grid_rowconfigure(9, minsize=10)


#Modify the fonts 
myFont = font.Font(family='Comic Sans MS',weight='bold')

#Label to show time taken 
label3= Label(root,text="TIME : ",width=12,bg="#f5ab55",justify=CENTER,font=myFont,fg="#000000",relief=RAISED)
label3.grid(row=12,column=0,columnspan=len_list1)
  • Здесь мы добавляем еще одну метку, которая будет отображать результат для предположения пользователя.
  • Мы. Также снова изменяют шрифты для использования в метке времени. время Этикетка отобразит время, необходимое пользователем, чтобы угадать правильный ответ.

11. Основная функция для расчета решения

#Function to check whether the user's guess is correct or not 
def result():
#Get the entry value in upper case 
    answer = (e1.get()).upper()

    if answer == pick:
        #Caculate the time consumed 
        time_taken = time.time() - start_time
        time_taken = int(time_taken)

        #Change the label 
        label3.configure(text="TIME : "+str(time_taken)+" Sec")

        #Play win sound 
        one.play()

        #Change label image to win 
        label2.configure(image=win)

        #Showing original word 
        col_2=0
        row_2=10

        #Display the origianl word 
        for i in range(len_list1):
            B = Label(root,image=list2[i])
            B.grid(row=row_2,column=col_2)
            col_2 = col_2+1

        #Add blank space 
        root.grid_rowconfigure(11, minsize=10) 

        #To play again after 3 sec 
        root.update_idletasks()
        root.after(3000)
        root.destroy()

    else:
        #Play a sound file 
        two.play()

        #Change the label 
        label2.configure(image=lose)

        #Change back to original label image 
        root.update_idletasks()
        root.after(500)
        label2.configure(image=surprise)

        #Clear the entry 
        e1.delete(0,"end")
  • Во-первых, мы принимаем значение, введенное пользователем в виджете ввода.
  • Затем мы проверяем, правильно ли слово, введенное пользователем. Если слово правильно, он рассчитает время, необходимое пользователем, чтобы угадать слово. Затем он собирается изменить текст метки времени, чтобы отобразить время, предпринятое пользователем.
  • После этого он собирается сыграть звуковой файл. Здесь этикетка покажет Выиграть изображение. Теперь мы будем отображать ярлык изображения для реального слова. Наша программа будет ждать 3 секунды, закрыть текущее окно и открыть новый.
  • Если пользователь ввел неправильное слово, этикетка покажет потерять Image, и виджет ввода будет очищен для пользователя в reenter слово. Через 0,5 секунды Потерять Этикетка вернется на исходное изображение.

12. Сбросить () функцию и введите основной цикл

def reset():
  #Play a sound file :
    three.play()

  #Change the running value to false :
      global running
      running=False

  #CLose the main window :
      root.destroy()


#Enter the main loop :
root.mainloop()
  • Если пользователь нажимает кнопку закрытия, то Сброс () Функция будет вызвать. Это установит бегущую переменную в Ложь Так что наша программа не может открыть новое окно.
  • Затем мы должны ввести главный цикл для запуска программы. Если наша программа не имеет этой строки, она не будет работать.

Положить все вместе

Посмотрите на полный код для этой игры Python Tkinter.

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

#Import required libraries :
from tkinter import *
import simpleaudio as sa
import random
import tkinter.font as font
import time


running = True

while running==True:
    #Calculate starting time :
    start_time = time.time()

    root = Tk()
    root.geometry('+100+0')
    root.configure(bg="#000000")
    root.iconphoto(True,PhotoImage(file="Surprise.png"))
    root.title("JUMBLE WORDS")
    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("Lose.wav")
    three = sa.WaveObject.from_wave_file("6.wav")

    start.play()

    #Select a word from list :
    def random_word():
        words=["RAIN","CLOUD","NATURE","BEAUTIFUL","HOUSE"]
        pick = random.choice(words)
        return pick

    #Jumble the selected word :
    def jumbled_word(word):
        word = random.sample(word,len(word))
        word_jumbled = "".join(word)
        return word_jumbled

    #Randomly selected word :
    pick = random_word()

    #Jumbled word :
    jumbled = jumbled_word(pick)

    #Get the letters from jumbled word :
    list1 = list(jumbled)
    len_list1 = len(list1)

    #Get the PhotoImages for our letters :
    for i in range(len_list1):
        list1[i] = PhotoImage(file=str(list1[i])+str("_P.png"))

    row_0 = 0
    col_0 = 0

    #Arrange the letters on the main window :
    for i in range(len_list1):
        B = Label(root,image=list1[i])
        B.grid(row=row_0,column=col_0)
        col_0 = col_0 + 1

    #Blank space for row_1 :
    root.grid_rowconfigure(1, minsize=10)

    #Modify font :
    myFont = font.Font(family='Calibri',  weight='bold')

    #For label image :
    your_choice = PhotoImage(file="YOUR_GUESS.png")
    surprise = PhotoImage(file="surprise.png")
    win = PhotoImage(file="WINNN.png")
    lose = PhotoImage(file="LOSEEE.png")
    check = PhotoImage(file="CHECKK.png")
    close = PhotoImage(file="CLOSEE.png")

    #To arrange the labels in center :
    #x = math.floor(len_list1/2)

    #Entry label :
    label = Label(root,image=your_choice)
    label.grid(row=2,column=0,columnspan=len_list1)
    label["font"] = myFont

    #Add blank space :
    root.grid_rowconfigure(3, minsize=10) 

    #Add entry widget :
    e1 = Entry(root,bd=5,bg="#9ca1db",justify=CENTER,font=myFont,fg="#000000")
    e1.grid(row=4,column=0,columnspan=len_list1)

    #Add blank space :
    root.grid_rowconfigure(5, minsize=10) 

    #Get the entry value in upper case :
    answer = (e1.get()).upper()

    #Make list of correct word :
    list2=list(pick)

    #Load images for correct word :
    for j in range(len(list2)):
        list2[j] = PhotoImage(file=str(list2[j])+str("_P.png"))

    #Check button :
    button =Button(root,image=check,command=lambda:result())
    button.grid(row=6,column=0)

    #Close button :
    Btn = Button(root,image=close,command=lambda:reset())
    Btn.grid(row=6,column=len_list1-1)

    #Add blank space :
    root.grid_rowconfigure(7, minsize=10) 


    #Label that will display result :
    label2 = Label(root,image=surprise)
    label2.grid(row=8,column=0,columnspan=len_list1)

    root.grid_rowconfigure(9, minsize=10)


    #Modify the fonts :
    myFont = font.Font(family='Comic Sans MS',weight='bold')

    #Label to show time taken :
    label3= Label(root,text="TIME : ",width=12,bg="#f5ab55",justify=CENTER,font=myFont,fg="#000000",relief=RAISED)
    label3.grid(row=12,column=0,columnspan=len_list1)

    #Function to check whether the user's guess is correct or not :
    def result():
        #Get the entry value in upper case :
        answer = (e1.get()).upper()

        if answer == pick:
            #Caculate the time consumed :
            time_taken = time.time() - start_time
            time_taken = int(time_taken)

            #Change the label :
            label3.configure(text="TIME : "+str(time_taken)+" Sec")

            #Play win sound :
            one.play()

            #Change label image to win :
            label2.configure(image=win)

            #Showing original word :
            col_2=0
            row_2=10

            #Display the origianl word :
            for i in range(len_list1):
                B = Label(root,image=list2[i])
                B.grid(row=row_2,column=col_2)
                col_2 = col_2+1

            #Add blank space :
            root.grid_rowconfigure(11, minsize=10) 

            #To play again after 3 sec :
            root.update_idletasks()
            root.after(3000)
            root.destroy()

        else:
            #Play a sound file :
            two.play()

            #Change the label :
            label2.configure(image=lose)

            #Change back to original label image :
            root.update_idletasks()
            root.after(500)
            label2.configure(image=surprise)

            #Clear the entry :
            e1.delete(0,"end")


    #Function that triggers by pressing CLOSE button :

    def reset():
        #Play a sound file :
        three.play()

        #Change the running value to false :
        global running
        running=False

        #CLose the main window :
        root.destroy()


    #Enter the main loop :
    root.mainloop() 

Упаковка и ресурсы

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

В этой серии на TKinter мы будем развиваться в общей сложности пять игр, используя Tkinter. Итак, повесьте плотно! Если у вас есть какие-либо сомнения, вопросы или мысли относительно этой статьи, не стесняйтесь связаться со мной в shuklapratik22@gmail.com.

Продолжить обучение

Оригинал: “https://dev.to/educative/python-tkinter-tutorial-build-a-jumbled-words-game-from-scratch-28gi”