1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[Python] Change background after a certain amount of collisions

Discussão em 'Python' iniciado por Stack, Setembro 27, 2021.

  1. Stack

    Stack Membro Participativo

    I am attempting to switch the background only if a certain number of collisions is detected. The collisions are between 7 balloons and a gun. Note that the collision works perfectly fine. Currently, 7 balloons are showed up and each time I hit a balloon it switches. I want to hit 1 balloon out of 7 on the first background, then it changes to the second background where you hit 1 balloon again out of the 7. When you hit a balloon on the second background, it changes back to the first. Then you hit 2 balloons on the first background, then it changes to the second background where you hit 2 balloons again, and so on. How would I do that?

    So the number of hits should be like 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7; where the first number in each pair is the number of hits in the first background and the second is the new background.

    Here's my code:

    import pygame as pg
    import random as r
    import sys


    pg.init()


    bg = pg.image.load('bg.jpg')# Background Image #
    bg = pg.transform.scale(bg, (688,387))
    new_bg = pg.image.load('new_bg.jpg')
    new_bg = pg.transform.scale(new_bg, (688,387))

    radius = 30
    diameter = 2 * radius

    num_balloons = 7
    bullets_colors_ls = []
    iterator = -1

    num_balloon_list = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7]
    balloon_list_index = 0


    def create_balloons():
    global balloon_list
    global colors

    for i in range(num_balloons):
    while True:
    candidate = r.randint(0, 500)
    if all(abs(candidate-x) >= diameter for x in balloon_list):
    break
    balloon_list.append(candidate)

    def draw_balloons(y):
    for i in range(num_balloons):
    screen.blit(colors, (balloon_list , y-50))


    def check_collisions(x, y):
    global hit_var
    global hit
    global score
    global scoretext
    global bg_bool
    global num_balloon_list, balloon_list_index

    for i in range(num_balloons):
    gun_rect = gun.get_rect(topleft = (x,y))
    gun_mask = pg.mask.from_surface(gun)

    balloon_rect = colors.get_rect(topleft = (balloon_list, y-100))
    balloon_mask = pg.mask.from_surface(colors)

    offset = (balloon_rect.x - gun_rect.x), (balloon_rect.y - gun_rect.y)
    if gun_mask.overlap(balloon_mask, offset):
    hit = True


    for balloon_list_index in num_balloon_list:
    balloon_list_index += 1
    bg_bool = not bg_bool



    hit_var = i
    score += 2
    scoretext = myfont.render("SCORE: "+str(score), 1, (0,0,0))
    print(f'hit balloon: {i}')
    break










    # Vars #
    x = 0
    y = 250
    velocity = 5
    score = 0
    hit = False
    bg_bool = False
    testvar1 = True
    clock = pg.time.Clock()


    screen = pg.display.set_mode((688 ,387)) # Size of the screen #
    caption = pg.display.set_caption("Remember") # Title of the window #

    balloon_list = []
    b1 = pg.image.load('balloons/1.png').convert_alpha()
    b1 = pg.transform.scale(b1, (63,131))
    b2 = pg.image.load('balloons/2.png').convert_alpha()
    b2 = pg.transform.scale(b2, (63,131))
    b3 = pg.image.load('balloons/3.png').convert_alpha()
    b3 = pg.transform.scale(b3, (63,131))
    b4 = pg.image.load('balloons/4.png').convert_alpha()
    b4 = pg.transform.scale(b4, (63,131))
    b5 = pg.image.load('balloons/5.png').convert_alpha()
    b5 = pg.transform.scale(b5, (63,131))
    b6 = pg.image.load('balloons/6.png').convert_alpha()
    b6 = pg.transform.scale( b6, (63,131))
    b7 = pg.image.load('balloons/7.png').convert_alpha()
    b7 = pg.transform.scale(b7, (63,131))
    colors = [b1, b2, b3, b4, b5, b6, b7]




    gun = pg.image.load('game-gun.png').convert_alpha()
    gun = pg.transform.scale(gun, (150,150))

    create_balloons()



    pg.display.flip() # Updating #

    running = True # Game loop bool #

    while running: # Game loop #
    clock.tick(60)

    if bg_bool == False:
    screen.blit(bg, (0, 0))


    elif bg_bool == True:
    screen.blit(new_bg, (0,0))
    screen.blit(scoretext, (5, 10))



    if hit == True:
    r.shuffle(balloon_list)
    hit = False

    for event in pg.event.get():
    if event.type == pg.QUIT:
    pg.quit()
    sys.exit()
    if event.type == pg.KEYDOWN:
    if event.key == pg.K_ESCAPE:
    running = False

    if event.key == pg.K_SPACE:
    check_collisions(x, y)

    draw_balloons(y)

    keys = pg.key.get_pressed()
    x += keys[pg.K_RIGHT] - keys[pg.K_LEFT] * velocity
    x -= keys[pg.K_LEFT] - keys[pg.K_RIGHT] * velocity



    screen.blit(gun, (x, y))
    pg.display.update()




    What changes the background is the bg_bool = not bg_bool and I am iterating through a list of the amount of hits -> num_balloon_list = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7]

    You can download all of the images here: Download images on REPL

    How can change the background after a certain amount of collisions (hits on the balloons)?

    P.S: I have asked a question that is a similar concept with a great answer, but I failed to implement it into this scenario.

    Continue reading...

Compartilhe esta Página