-1

i found this unfinished file in my files and now i need to finish it, only problem is idk really how do i detect collision with the bullet and the player thing and/or the bullet and the enemy thing, when the bullets collide with the enemy it still dies, i just don't remember how.

here's the code ig help thanks

import pygame, os, random,sys
pygame.init()
 
FPS=60

SCREEN = pygame.display.set_mode((400,500))
pygame.display.set_caption('caption')

x=50
y=450
vel = 3
width = 20
height = 20

class Player(pygame.sprite.Sprite):
    def __init__(self,x,y,width,height):
        super().__init__()
        self.x = x
        self.y = y
        self.vel = 4
        self.image = pygame.Surface((width, height))
        self.image.fill((0,0,0))
        self.rect = self.image.get_rect(topleft = (x, y))

   
class B(pygame.sprite.Sprite):
    def __init__(self,x,y,radius, color):
        super().__init__() 
        self.x = x
        self.y = y
        self.color = color
        self.radius = radius
        self.vel = vel
        self.image = pygame.Surface((self.radius * 2, self.radius * 2), pygame.SRCALPHA)
        pygame.draw.circle(self.image, self.color, (self.radius, self.radius), self.radius)
        self.rect = self.image.get_rect(center = (self.x, self.y))
       
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__() 
        self.image = pygame.Surface((20,20))
        self.image.fill((255, 0, 0))
        y = random.randrange (0, 480)
        x = 400
        self.rect = self.image.get_rect(topleft = (x, y))
        self.speed = random.randrange(1,2)

 
player = Player(x, y, width, height)

enemies = pygame.sprite.Group()
bullets = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
score = 0
# main loop
running = True
clock = pygame.time.Clock()
while running:
    clock.tick(FPS)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE and len(bullets) < 8:
                bullet = B(player.rect.centerx, player.rect.centery, 2, (0,0,0))
                bullets.add(bullet)
                all_sprites.add(bullet)
                
    if len(enemies) < 2:
        e = Enemy()
        enemies.add(e)
        all_sprites.add(e)

    for bullet in bullets:
        if bullet.rect.right < 500:
            bullet.rect.x += bullet.vel
        else:
            bullet.kill()
    for enemy in enemies:
        if enemy.rect.right > 0:
            enemy.rect.x -= enemy.speed
        else:
            enemy.kill()
            print ("L")
            pygame.quit()
            sys.exit()




    pygame.sprite.groupcollide(bullets, enemies, True, True)
    

            
    keys = pygame.key.get_pressed()            
    if keys[pygame.K_UP] and player.rect.top > player.vel:
        player.rect.y -= player.vel
    if keys[pygame.K_DOWN] and player.rect.bottom < 500 - player.vel:
        player.rect.y += player.vel
    
    SCREEN.fill((190, 232, 220))
    all_sprites.draw(SCREEN)
    pygame.display.update()

pygame.quit()
Rabbid76
  • 202,892
  • 27
  • 131
  • 174
user
  • 37
  • 5

1 Answers1

0

Collision detection depends on your needs.

  • Bounding boxes are simple and can detect if the x, y edges of each object are not within one another. This is fine for fast moving games and things where you don't necessarily require point precision.
  • Distance vectors are also simple and perfect solution for circle collisions. They calculate the difference in distance between two objects according to a radius prescribed with the hypotenuse of distX^2 + distY^2.
  • Compound bounding objects are harder to calculate, especially for concave areas on objects of arbitrary shape. There are too many notable and novel approaches to collision detection beyond these to remark on here.

They're also increasingly complex depending on things like variability (if they're deformable objects, if they have particle seams, etc and 2d vs 3d object collision can be vastly different worlds as well. There are tons of articles, but I'll post one with implementation here

Rebel Rae
  • 131
  • 8