Disparo Pygame

En esta ocasión vamos a simular un disparo de flechas, para lo que definimos dos clases: un arco que se desplazará con las coordenadas de ratón y una flecha que restará 5 al valor de y.

import pygame
import sys, random
pygame.init()

class Arco(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/Anima2/arco250.png").convert_alpha()
        self.rect=self.image.get_rect() 
    def update(self):
        x,y=pygame.mouse.get_pos()
        nave.rect.x=x
        nave.rect.y=500

class Flecha(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/Anima2/flecha150.png").convert_alpha()
        self.rect=self.image.get_rect() 
    def update(self):
        self.rect.y -= 5

Asignamos valores a variables y creamos una lista de sprite

ancho = 1080 
alto = 700
vel=0

flechaLista=pygame.sprite.Group()

Definimos la ventana, el fondo y abrimos el bucle.

#----------------Ventana y título---------------------
ventana = pygame.display.set_mode((ancho,alto)) 
pygame.display.set_caption('Arco y flechas')
clock=pygame.time.Clock()


pygame.mouse.set_visible(1) #Oculto el puntero en 0
fondo =pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/Fondo/bosque.png").convert()
arco=Arco()

#/////////////////Bucle del juego/////////////////
gameOver=False
while not gameOver:
    
    clock.tick(60)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameOver=True

Asignamos posición de la flecha en relación a coordenadas del puntero.

        if event.type == pygame.MOUSEBUTTONDOWN: # Asigno x,y a la clase Laser al hacer clic (y -= 5)
            flecha=Flecha()
            flecha.rect.x=x+85
            flecha.rect.y=600-90
            flechaLista.add(flecha)

Cargamos los datos de la flecha para que reste -5 llamando a la clase.

    #------------ LOGICA -------------------
    flechaLista.update()

Dibujamos el fondo, los objetos y cerramos

    #-------------FONDO---------------------
    ventana.blit(fondo, [0,0])
    #------------ DIBUJO ------------------
    x,y=pygame.mouse.get_pos()
    ventana.blit(arco.image, [x,500])
    flechaLista.draw(ventana)
    
    pygame.display.flip()
pygame.quit()

Juande Marín

Profesor de Marketing digital, divulgador de inteligencia artificial y neuroeducación. Especializado en posicionamiento en buscadores y diseño web. Autor de varios libros relacionados con el comercio electrónico y el marketing digital (McGraw Hill, Paraninfo,…) Juande2marin

Material didáctico

Descubre un material moderno y adaptado a ciclos formativos.