Hey there, i'm relatively new to pyGame and considering this is like my second attempt at doing it by myself after watching a few tutorials, i'd say im getting the hang of it.

However, as i was creating a game i realised i had no clue how to make the objects bounce off eachother and repel. Here is my code so far, i know it doesn't work and i know it seems quite stupid at the end, however i was just trying all sorts of things.

My way of interpreting this problem is that if there is an intersection that is equal on both shapes, It should repel, but as i've tried doing this i can only manage to get one intersection. I tried range function as you can see but that does not work, which i kinda knew wouldn't.

import pygame
import random


#Setting Basic Colors
black = (0,0,0)
white = (255,255,255)

#Intitalising PyGame
pygame.init()

#Setting Screen Settigns
size = [500,500]
screen=pygame.display.set_mode(size)
pygame.display.set_caption("Bounce")

done = False

#Setting Initial Variables
clock=pygame.time.Clock()
rect_x = 50
rect_y = 50
change_x = 1
change_y = 1
circlex = random.randint(70,430)
circley = random.randint(70,430)
circchange_x = 0
circchange_y = 0
#----Main Game Loop----
while done == False:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                change_x = 0
                change_y = -2
            if event.key == pygame.K_DOWN:
                change_x = 0
                change_y = 2
            if event.key == pygame.K_LEFT:
                change_x = -2
                change_y = 0                
            if event.key == pygame.K_RIGHT:
                change_x = 2
                change_y = 0

    screen.fill(black)

    pygame.draw.rect(screen,white,[rect_x, rect_y,50,50])

    #Rectangle stuff
    rect_x += change_x
    rect_y += change_y

    if rect_x >= 450 or rect_x <= 0:
        change_x = change_x*-1
    if rect_y >= 450 or rect_y <= 0:
        change_y = change_y*-1

    pygame.draw.circle(screen,white,[circlex,circley],10,10)
    circlex += circchange_x
    circley += circchange_y
    if circlex >= 490 or circlex <= 10:
        circchange_x = circchange_x*-1
    if circley >= 490 or circley <= 10:
        circchange_y = circchange_y*-1


    for i in range(rect_x+1,rect_x+51):
        for j in range(circlex+1,circlex+11):
            if i == j:
                circchange_y = circchange_y*-1+1
                circchange_x = circchange_x*-1+1

            if i == j:
                circchange_y = circchange_y*-1+1
                circchange_x = circchange_x*-1+1

            if i == j:
                circchange_y = circchange_y*-1+1
                circchange_x = circchange_x*-1+1


            if i == j:
                circchange_y = circchange_y*-1+1
                circchange_x = circchange_x*-1+1




    pygame.display.flip()

    clock.tick(20)



pygame.quit()

Any help would be greatly apreciated :) Cheers

Copy pasting same if statement 4 times is not proper effort, you should test your code and ask only about the last addition.

that was my last attempt to try something, sorry i didnt change it back -_- , i kinda just copied and pasted as it was at the point where i realised i had no clue what to do... However i am working with sprites and i think i can manage to work it out :)

This article has been dead for over six months. Start a new discussion instead.