Python | Atrapar el juego de pelota

Python es un lenguaje multipropósito y se puede usar en casi todos los campos de desarrollo. Python también se puede utilizar para desarrollar diferentes tipos de juegos. Intentemos desarrollar un juego simple de atrapar la pelota usando Python y TKinter.
El juego es muy simple. Hay una barra en la parte inferior de la ventana del juego que se puede mover hacia la izquierda o hacia la derecha usando los botones que se encuentran en la ventana del juego. La bola roja caerá continuamente de arriba a abajo y puede comenzar desde cualquier distancia aleatoria del eje x. La tarea es llevar esa barra a un lugar adecuado moviéndose hacia la izquierda o hacia la derecha para que la bola roja caiga en esa barra (atrapar la bola en la barra) y no en el suelo. Si el jugador atrapa la bola en la barra, la puntuación aumentará y esa bola desaparecerá y nuevamente una nueva bola roja comenzará a caer de arriba hacia abajo a partir de una distancia aleatoria del eje x. Si el jugador pierde la pelota al atraparla en la barra, perderá el juego y finalmente aparecerá la tarjeta de puntuación en la ventana del juego.
Acercarse: 

  1. Utilice el paquete Tkinter en python para crear una GUI (interfaz gráfica de usuario).
  2. Use Canvas para dibujar objetos en Python: Canvas es un área rectangular destinada a dibujar imágenes u otros diseños complejos. Podemos colocar gráficos, texto, widgets o marcos en Canvas.
Syntax: w = Canvas ( master, option=value, ... )

Parameters:
master - This represents the parent window.
options - List of most commonly used options for this widget. 
These options can be used as key-value pairs separated by commas. 
Example- width, height etc. 
  1. Usa canvas.create_oval para crear la pelota. 
    create_oval crea un círculo o una elipse en las coordenadas dadas. Toma dos pares de coordenadas; las esquinas superior izquierda e inferior derecha del rectángulo delimitador del óvalo. 
Syntax: oval = canvas.create_oval(x0, y0, x1, y1, options)
  1. Usa canvas.create_rectangle para crear la barra. 
    create_rectangle crea un rectángulo en las coordenadas dadas. Toma dos pares de coordenadas; las coordenadas superior izquierda e inferior derecha.  
Syntax: rod = canvas.create_rectangle(x0, y0, x1, y1, options)
  1. Usa canvas.move para mover la bola o la barra. 
    canvas.move permite que el objeto se mueva con las coordenadas (x, y) especificadas. 
Syntax: move=canvas.move(name of object, x, y) 

Nota: * Tome x=0 para mover la pelota solo en dirección vertical y tome y=0 para mover la barra solo en dirección horizontal. * Desaparece la pelota cuando toca el suelo o la barra usando canvas.delete(object).

  1. Use el botón para mover la barra hacia adelante o hacia atrás y luego aplique un evento de acción en ella. Consulte la interfaz gráfica de usuario de Python Tkinter 

Ejemplo

Python3

# Python code for catching the ball game
 
# importing suitable packages
from tkinter import Tk,Button,Label
from tkinter import Canvas
from random import randint
 
# defining Tk from Tkinter
root = Tk()
root.title("Catch the ball Game")
root.resizable(False,False)
 
# for defining the canvas
canvas = Canvas(root, width=600, height=600)
canvas.pack()
 
# variable for the vertical distance
# travelled by ball
limit = 0
 
# variable for horizontal distance
# of bar from x-axis
dist = 5
 
# variable for score
score = 0
 
# Class for the Creating and moving ball
class Ball:
     
    # for creation of ball on the canvas
    def __init__(self, canvas, x1, y1, x2, y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.y2 = y2
        self.canvas = canvas
         
        # for creation of ball object
        self.ball = canvas.create_oval(self.x1, self.y1, self.x2, self.y2,
                                                fill = "red",tags = 'dot1')
     
    # for moving the ball
    def move_ball(self):
         
        # defining offset
        offset = 10
        global limit
         
        # checking if ball lands ground or bar
        if limit >= 510:
            global dist,score,next
             
            # checking that ball falls on the bar
            if(dist - offset <= self.x1 and
               dist + 40 + offset >= self.x2):
                    
                # incrementing the score
                score += 10
                 
                # disappear the ball
                canvas.delete('dot1')
                 
                # calling the function for again
                # creation of ball object
                ball_set()
                 
            else:
                # disappear the ball
                canvas.delete('dot1')
                bar.delete_bar(self)
                 
                # display the score
                score_board()
            return
             
        # incrementing the vertical distance
        # travelled by ball by deltay
        limit += 1
         
        # moving the ball in vertical direction
        # by taking x=0 and y=deltay
        self.canvas.move(self.ball,0,1)
         
        # for continuous moving of ball again call move_ball
        self.canvas.after(10,self.move_ball)
         
# class for creating and moving bar        
class bar:
     
    # method for creating bar
    def __init__(self,canvas,x1,y1,x2,y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.y2 = y2
        self.canvas = canvas
         
        # for creating bar using create_rectangle
        self.rod=canvas.create_rectangle(self.x1, self.y1, self.x2, self.y2,
                                                  fill="yellow",tags='dot2')
     
    # method for moving the bar
    def move_bar(self,num):
        global dist
         
        # checking the forward or backward button
        if(num == 1):
             
            # moving the bar in forward direction by
            # taking x-axis positive distance and
            # taking vertical distance y=0
            self.canvas.move(self.rod,20,0)
             
            # incrementing the distance of bar from x-axis
            dist += 20
        else:
             
            # moving the bar in backward direction by taking x-axis 
            # negative distance and taking vertical distance y=0
            self.canvas.move(self.rod,-20,0)
             
            # decrementing the distance of bar from x-axis
            dist-=20
     
    def delete_bar(self):
        canvas.delete('dot2')
         
 
# Function to define the dimensions of the ball
def ball_set():
    global limit
    limit=0
     
    # for random x-axis distance from
    # where the ball starts to fall    
    value = randint(0,570)
     
    # define the dimensions of the ball
    ball1 = Ball(canvas,value,20,value+30,50)
     
    # call function for moving of the ball
    ball1.move_ball()
 
# Function for displaying the score
# after getting over of the game
def score_board():
    root2 = Tk()
    root2.title("Catch the ball Game")
    root2.resizable(False,False)
    canvas2 = Canvas(root2,width=300,height=300)
    canvas2.pack()
     
    w = Label(canvas2,text="\nOOPS...GAME IS OVER\n\nYOUR SCORE = "
                                            + str(score) + "\n\n")
    w.pack()
     
    button3 = Button(canvas2, text="PLAY AGAIN", bg="green",
                           command=lambda:play_again(root2))
    button3.pack()
     
    button4 = Button(canvas2,text="EXIT",bg="green",
                     command=lambda:exit_handler(root2))
    button4.pack()
 
# Function for handling the play again request
def play_again(root2):
    root2.destroy()
    main()
 
# Function for handling exit request
def exit_handler(root2):
    root2.destroy()
    root.destroy()
 
# Main function
def main():
    global score,dist
    score = 0
    dist = 0
     
    # defining the dimensions of bar    
    bar1=bar(canvas,5,560,45,575)
     
    # defining the text,colour of buttons and
    # also define the action after click on
    # the button by calling suitable methods
    button = Button(canvas,text="==>", bg="green",
                    command=lambda:bar1.move_bar(1))
                     
    # placing the buttons at suitable location on the canvas
    button.place(x=300,y=580)
     
    button2 = Button(canvas,text="<==",bg="green",
                     command=lambda:bar1.move_bar(0))
    button2.place(x=260,y=580)
     
    # calling the function for defining
    # the dimensions of ball
    ball_set()
    root.mainloop()
 
# Driver code
if(__name__=="__main__"):
    main()

Producción: 
 

Nota: El código anterior no se puede ejecutar en IDE en línea ya que se importa el paquete Tkinter.
 

Publicación traducida automáticamente

Artículo escrito por AashutoshChauhan 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 *