Al anterior juego de disparo vamos a añadir una colisión.
Definimos para ello tres clases con tres objetos que agrupamos en dos listas.
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
class Manzana(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("E:/NUEVO 2020/PYTHON/pygame/manzanilla.png").convert_alpha()
self.rect=self.image.get_rect()
ancho = 1080
alto = 700
flechaLista=pygame.sprite.Group()
manzanaLista=pygame.sprite.Group()
Definimos la ventana
#----------------Ventana y título---------------------
ventana = pygame.display.set_mode((ancho,alto))
pygame.display.set_caption('Arco fruta')
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()
A continuación creamos un bucle para distribuir las manzanas de forma aleatoria de x e y.
for i in range(20):
manzana=Manzana()
manzana.rect.x=random.randrange(100,800,50)
manzana.rect.y=random.randrange(0,350,50)
manzanaLista.add(manzana)
Abrimos el bucle y asignamos valores a coordenadas de la flecha con el puntero del ratón
#/////////////////Bucle del juego/////////////////
gameOver=False
while not gameOver:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameOver=True
if event.type == pygame.MOUSEBUTTONDOWN:
flecha=Flecha()
flecha.rect.x=x+85
flecha.rect.y=600-90
flechaLista.add(flecha)
En la parte lógica definimos la colisión de las flechas con la lista de manzanas, de forma que cuando se produzca una colisión las manzanas desaparezcan de la lista.
#------------ LOGICA -------------------
flechaLista.update()
for tiro in flechaLista:
if pygame.sprite.spritecollide(tiro, manzanaLista, True):
flechaLista.remove(tiro)
Definimos el fondo, dibujamos los objetos y cerramos.
#-------------FONDO---------------------
ventana.blit(fondo, [0,0])
#------------ DIBUJO ------------------
x,y=pygame.mouse.get_pos()
ventana.blit(arco.image, [x,500])
manzanaLista.draw(ventana)
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