Cree una aplicación GUI para Guess Indian State usando Tkinter Python

En este artículo, aprenderá a crear un juego con GUI en Python, en el que se le mostrará un mapa de los estados de la India y un indicador de entrada en el indicador, el usuario debe ingresar un nombre de estado de la India. Si el usuario lo adivinó correctamente, el nombre se desplazaría sobre su ubicación en el mapa. También puede ver la puntuación como el título de la ventana de solicitud de entrada.

Módulos necesarios

  • Python3 : Python es un lenguaje de programación de alto nivel, de propósito general y muy popular. Se está utilizando en desarrollo web, aplicaciones de aprendizaje automático, etc.
  • Tortuga : «Tortuga» es una característica de Python como un tablero de dibujo, que nos permite ordenar a una Turtle que dibuje por todas partes.
  • Pandas : el paquete Pandas ofrece varias estructuras de datos y operaciones para manipular datos numéricos y series temporales.

Requisitos:

  • Un mapa político en blanco de la India.

 

  • Una hoja CSV que contendrá datos de coordenadas.

 

Implementación paso a paso

Paso 1: La configuración inicial

El primer paso es importar nuestras bibliotecas y crear la configuración básica, en la que aparece una ventana y tenemos el mapa de India cubriendo la pantalla. También tenemos un título para nuestra ventana y una Turtle a través de la cual dibujamos o escribimos en la pantalla. Actualmente, la Turtle no tiene que hacer nada, pero necesita estar oculta. La altura y el ancho se dieron de acuerdo con el tamaño del mapa. Si el usuario desea elegir algún otro mapa, establezca la longitud y el ancho en consecuencia. También tenga en cuenta que para poder trabajar con imágenes en Turtle, la imagen debe estar en formato GIF .

Python3

# IMPORTING THE REQUIRED LIBRARIES
import turtle
import pandas
 
# SETTING UP THE WINDOW THAT OPENS
# IN WHICH WE PLAY OUR GAME
 
# creating a blank window from Screen()
# class of turtle library
screen = turtle.Screen()
 
# give a title to our window using
# title method of screen object
screen.title("Guess the Names of Indian States")
 
# give the window height and width
# in which our map fits perfectly
screen.setup(width=500, height=500)
 
# use addshape method of screen object
# to add an image to our program
image = 'blank_map.gif'
screen.addshape(image)
 
# give the turtle the shape of our image
turtle.shape(image)
 
# SETTING UP THE TURTLE
 
# create a turtle from Turtle class
pen = turtle.Turtle()
 
# we don't want to see it hovering
# over our map, so we hide it
pen.hideturtle()
 
# we don't want to draw anything,
# so we lift it up from screen.
# like lifting the pen from paper
# to leave a blank space while writing
pen.penup()
 
# this method keep the window on for
# display until the user himself closes it.
# this method should always be the last
# line of our code whenever using turtle.
turtle.mainloop()

Producción:

Learn Python by Building a  Indian State GUI Guessing Game with Tkinter

 

Paso 2: Crear los datos para las coordenadas de nuestros Estados.

En este paso ubicaremos nuestros estados una vez ingresado el nombre. Además, necesitamos coordenadas de los estados para eso, usaremos el siguiente código, que imprime las coordenadas x e y del punto donde hacemos clic. Recuerda que el centro de la ventana es el origen de nuestro sistema de coordenadas. Cuando obtenga las coordenadas de todos los estados de India impresas en la consola, cópielas y péguelas en una hoja de Excel o Google contra sus respectivos nombres de estado y guárdela como un archivo CSV. Después de guardar el archivo, puede comentar el siguiente código.

Python3

# function to get the coordinates of states.
# click on the point you want to display
# state name and then the x and y
# coordinates will be printed in console
def print_xy(x, y):
    print(f"{x}, {y}")
 
 
# onscreenclick is an event listener
# that calls a function everytime we
# click on screen.
screen.onscreenclick(print_xy)

Puedes ver cómo se ve cuando haces clic en la pantalla. Ahora haga clic en los puntos donde desea que se muestre el nombre de su estado después de ingresar su nombre. 

 

Paso 3: obtenga los datos de CSV.

El siguiente paso es crear una lista de nombres de estados que podamos usar en nuestro programa. Leemos los datos completos del archivo CSV utilizando la biblioteca Pandas y su método, y luego extraemos los valores de la columna ‘Estado’.

Python3

# use read_csv method to read
# entire data from the file
data = pandas.read_csv('Indian_States_Coordinates - Sheet1.csv')
 
# extract the values under "State"
# column and convert it to a list
states = data['State'].to_list()
 
# make an empty list of correct guesses,
# that we will use to see how many
# correct guesses the user makes while
# playing the game.
correct_guesses = []

Paso 4:  Juego

Aquí, debido a que hay 29 estados en la India, repetiremos el bucle 29 veces. Debido a que el total de nuestra lista de conjeturas correctas es cero al principio, el ciclo continuará ejecutándose hasta que la longitud de la lista sea inferior a 29. El primer paso es crear un indicador de entrada para pedirle al usuario su respuesta. Ingresará el nombre del estado si quiere jugar; de lo contrario, ingresará “Exit” para salir. Convierta la respuesta del usuario al caso del título, tal como lo son todos nuestros nombres de estado, porque el usuario puede haber ingresado la respuesta en un caso diferente. No queremos informarle que su respuesta fue incorrecta porque su situación era diferente a la nuestra. Si el usuario elige no jugar, el bucle se interrumpe después de generar un archivo CSV desde el marco de datos con los nombres de los estados que el usuario no pudo predecir. Luego verificamos si la respuesta del usuario es correcta.

Python3

# we will run the game until our correct
# guesses include all the states
while len(correct_guesses) < 29:
 
    # create an input prompt to ask user
    # to enter a state name if he wants to
    # exit, he should enter "Exit"
    answer = screen.textinput(
        title=f'Guess the State {len(correct_guesses)}/29',
                  prompt='Enter Name or "Exit" to Quit')
     
    # convert the user to Title case, which
    # is the case in which we have stored
    # our state names. We need to convert user
    # input in case he/she enter the name in
    # some other case
    answer = answer.title()
 
    # first check if the user want to quit.
    if answer == "Exit":
        # create a list of state names he missed
        # and store them in a dictionary
        missing_states = [n for n in states if n not in correct_guesses]
        missing_guess = {
            'State': missing_states
        }
         
        # create a dataframe using Pandas method
        # and convert and store it as CSV file
        pandas.DataFrame(missing_guess).to_csv(
            'states_to_learn.csv', index=False)
        # break the game loop
        break
 
    # check if the answer user entered is in the
    # states list or not
    if answer in states:
        # extract that state's data from our data set
        state = data[data.State == answer]
        x_ = int(state.x)
        y_ = int(state.y)
         
        # add this correct answer to our correct
        # guesses list
        correct_guesses.append(answer)
         
        # now go to required coordinates and write
        # the state name
        pen.goto(x=x_, y=y_)
        pen.write(f"{answer}", font=('Arial', 8, 'normal'))
Learn Python by Building a  Indian State GUI Guessing Game with Tkinter

 

Paso 5:  Resultado del juego

Cuando finaliza el bucle, queremos mostrar la puntuación y el rendimiento del usuario. Con base en su puntaje, determinamos si su desempeño es bueno, promedio o malo. Limpiamos toda la ventana para dejar espacio al resultado en una nueva ventana en blanco. Ponemos el resultado en el centro, 

Python3

screen.clear()
pen.goto(0, 0)
end_text = ""
score = len(correct_guesses)
 
if score == 29:
    end_text = 'You Guessed Them All Correctly'
elif score >= 20:
    end_text = f"Good Work: {score}/29"
elif score >= 15:
    end_text = f"Average Performance: {score}/29"
else:
    end_text = f"Poor Performance: {score}/29"
 
pen.write(f"{end_text}", align='center', font=("Arial", 22, 'normal'))
 
turtle.mainloop()

 

Principal.py

Python3

import turtle
import pandas
 
screen = turtle.Screen()
screen.title("Guess the Names of Indian States")
screen.setup(width=500, height=500)
image = 'blank_map.gif'
screen.addshape(image)
turtle.shape(image)
 
pen = turtle.Turtle()
pen.hideturtle()
pen.penup()
 
# function to get the coordinates of states.
# click on the point you want to display
# state name and then the x and y coordinates
# will be printed in console
data = pandas.read_csv('Indian_States_Coordinates - Sheet1.csv')
states = data['State'].to_list()
 
correct_guesses = []
 
while len(correct_guesses) < 29:
 
    answer = screen.textinput(
        title=f'Guess the State {len(correct_guesses)}/29',
      prompt='Enter Name or "Exit" to Quit')
    answer = answer.title()
 
    if answer == "Exit":
        missing_states = [n for n in states if n not in correct_guesses]
        missing_guess = {
            'State': missing_states
        }
        pandas.DataFrame(missing_guess).to_csv(
            'states_to_learn.csv', index=False)
        break
 
    if answer in states:
        state = data[data.State == answer]
        x_ = int(state.x)
        y_ = int(state.y)
        correct_guesses.append(answer)
        pen.goto(x=x_, y=y_)
        pen.write(f"{answer}", font=('Arial', 8, 'normal'))
 
screen.clear()
pen.goto(0, 0)
end_text = ""
score = len(correct_guesses)
if score == 29:
    end_text = 'You Guessed Them All Correctly'
elif score >= 20:
    end_text = f"Good Work: {score}/29"
elif score >= 15:
    end_text = f"Average Performance: {score}/29"
else:
    end_text = f"Poor Performance: {score}/29"
 
pen.write(f"{end_text}", align='center', font=("Arial", 22, 'normal'))
 
turtle.mainloop()

Producción:

Learn Python by Building a  Indian State GUI Guessing Game with Tkinter

 

Publicación traducida automáticamente

Artículo escrito por ishanrastogi26 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *