Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help with collisions.
#6
Here a quick example.
import pygame
import random

class BoatSprite(pygame.sprite.Sprite):
    def __init__(self, group):
        # Init parent class
        pygame.sprite.Sprite.__init__(self, group)

        self.tick = 0
        self.interval = 30

        # Default sprite variables.
        #self.image = pygame.image.load("boatIMG.png").convert()
        self.image = pygame.Surface((40, 20))
        self.image.fill(pygame.Color("dodgerblue"))
        self.rect = self.image.get_rect()

class BulletSprite(pygame.sprite.Sprite):
    def __init__(self, group):
        # Init parent class
        pygame.sprite.Sprite.__init__(self, group)

        self.speed = 5
        self.tick = 0
        self.interval = 40

        # Default sprite variables.
        #self.image = pygame.image.load("bullet)enemy.png").convert()
        self.image = pygame.Surface((2, 4))
        self.image.fill(pygame.Color("firebrick"))
        self.rect = self.image.get_rect()

        self.rect.x = random.randint(200, 500)
        self.rect.y = -100

    def update(self):
        if self.rect.y > 480:
            self.rect.x = random.randint(200, 500)
            self.rect.y = -100

class Scene:
    def __init__(self, game):
        self.game = game
        self.boat_group = pygame.sprite.Group()
        self.bullet_group = pygame.sprite.Group()

        self.boat = BoatSprite(self.boat_group)
        self.boat.rect.topleft = 400, 400

        self.bullet = BulletSprite(self.bullet_group)

        #self.background_iamge = pygame.image.load("water_background.png").convert()
        self.background_image = pygame.Surface(game.rect.size)
        self.background_image.fill(pygame.Color('darkblue'))

    def draw(self, surface):
        surface.blit(self.background_image, (0,0))
        self.boat_group.update()
        self.bullet_group.update()
        self.boat_group.draw(surface)
        self.bullet_group.draw(surface)

    def event(self, event):
        pass

    def update(self, ticks):
        if ticks > self.boat.tick:
            self.boat.tick += self.boat.interval

            # Tracking key held down
            keys = pygame.key.get_pressed()
            if keys[pygame.K_LEFT]:
                self.boat.rect.x -= 5
            elif keys[pygame.K_RIGHT]:
                self.boat.rect.x += 5
            elif keys[pygame.K_UP]:
                self.boat.rect.y -= 5
            elif keys[pygame.K_DOWN]:
                self.boat.rect.y += 5

            # Keep boat within
            self.boat.rect.clamp_ip(pygame.Rect(125, 305, 340, 100))

        if ticks > self.bullet.tick:
            self.bullet.tick + self.bullet.interval
            self.bullet.rect.y += self.bullet.speed

        # Colliding
        hit = pygame.sprite.spritecollide(self.boat, self.bullet_group, False)
        if len(hit) > 0:
            self.game.running = False

class Game:
    def __init__(self, caption, width, height):
        # Basic pygame setup
        pygame.display.set_caption(caption)
        self.rect = pygame.Rect(0, 0, width, height)
        self.surface = pygame.display.set_mode(self.rect.size)
        self.clock = pygame.time.Clock()

        # Scene
        self.scene = Scene(self)

    def mainloop(self):
        self.running = True

        while self.running:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.running = False
                else:
                    self.scene.event(event)

            self.scene.update(pygame.time.get_ticks())

            # Draw code here
            self.scene.draw(self.surface)

            pygame.display.flip()
            self.clock.tick(30)

if __name__ == '__main__':
    pygame.init()
    game = Game('Example', 640, 480)
    game.mainloop()
    pygame.quit()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
Help with collisions. - by ghost0fkarma - Mar-10-2019, 07:42 PM
RE: Help with collisions. - by Windspar - Mar-10-2019, 08:08 PM
RE: Help with collisions. - by ghost0fkarma - Mar-10-2019, 08:11 PM
RE: Help with collisions. - by ghost0fkarma - Mar-10-2019, 10:26 PM
RE: Help with collisions. - by metulburr - Mar-10-2019, 10:50 PM
RE: Help with collisions. - by Windspar - Mar-11-2019, 12:09 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
Brick [PyGame] How to make collisions in isometrick game? Grigory 1 2,337 Jul-01-2021, 01:54 PM
Last Post: Windspar
  Collisions in Arrays Prithak 2 3,101 Mar-19-2021, 03:17 AM
Last Post: Prithak
  Can someone help me with collisions ? CUKEMAN 2 2,028 Jun-22-2020, 09:54 AM
Last Post: JudyLarose

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020