[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] collision



Well im very noob with pygame u.u i need help making a collision
I have 2 sprites, a ball and a bar.
i want to make that the bar has 3 parts, left center and right, if the ball hits one of those parts it will have a different effect.
But i just dont know how to do it xD
Here its what i have

import pygame, os, sys
from pygame.locals import *

def load_image(name, colorkey=None):
    fullname = os.path.join('data', name)
    try:
        image = pygame.image.load(fullname)
    except pygame.error, message:
        print 'Cannot load image:', name
        raise SystemExit, message
    image = image.convert()
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
        image.set_colorkey(colorkey, RLEACCEL)
    return image, image.get_rect()

def load_sound(name):
    class NoneSound:
        def play(self):
            pass
    fullname = os.path.join('data', name)
    try:
        sound = pygame.mixer.Sound(name)
    except pygame.error, message:
        print "Cannot load sound: ", wav
        raise SystemExit, message
    return sound

#Global Variables
width = 640
height = 480
speed = 30
ballspeed = 15

pygame.init() # Starts pygame
pygame.key.set_repeat(1, 1) # Set key repeat rate
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("PyPong")
backround = pygame.Surface([width, height])
backround.fill((0, 0, 0))
screen.blit(backround, (0,0))
class bar( pygame.sprite.Sprite):
    global width, height, screen, black
    def __init__(self):
        self.x = width/2
        self.y = height-20
        pygame.sprite.Sprite.__init__(self)
        self.bar, self.rect = load_image('bar.bmp')
        self.rect.topleft = (width/2, height-20)
   
    def move(self, event):
        if (event == K_RIGHT):
            self.rect = self.rect.move(speed, 0)
            self.x += speed
        elif (event == K_LEFT):
            self.rect = self.rect.move(-speed, 0)
            self.x -= speed
       
class ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init_ _(self)
        self.x = width/2
        self.y = -130
        self.angle = 0
        self.score = 0
        self.speed = 10
        self.ball, self.rect = load_image('ball.bmp', -1)
        self.rect.topleft = (width/2, 5)
   
    def move(self):
        if self.y <= height-170:
            if self.angle == 0:
                self.rect = self.rect.move(0, self.speed)
                self.y += self.speed
            elif angle == -45:
                self.rect = self.rect.move(6, self.speed)
                ball.x += 6
                self.y += self.speed
            elif angle == 45:
                self.rect = self.rect.move(-6, self.speed)
                ball.x -= 6
                self.y += self.speed
        elif COLLISiON!: #need to make collision T_T
            self.speed = -self.speed
        else:
            self.score-=100

bar = bar()
ball = ball()
screen.blit(ball.ball, ball.rect)
screen.blit(bar.bar, bar.rect)
pygame.display.update()
while True:
    """Bar Stuff"""
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        elif event.type == KEYDOWN:
            bar.move(event.key)
    """Ball Stuff"""
    ball.move()
    """Show all and update"""
    screen.blit(backround, (0,0))
    screen.blit(bar.bar, bar.rect)
    screen.blit(ball.ball, ball.rect)
    pygame.display.update ()
    pygame.time.delay(10)

--
Best Regards.
fedekiller