Reputation: 89
import random
time = 120
WIDTH = 800
HEIGHT = 500
background = Actor("background")
player = Actor("player")
enemy = Actor("enemy")
money = Actor("money", pos=(300, 300))
player2 = Actor("alien")
score = 0
player.x = 200
player.y = 200
player2.x = 400
player2.y = 400
def draw():
screen.clear()
background.draw()
player.draw()
enemy.draw()
money.draw()
player2.draw()
screen.draw.text("YFF-Spill score:", (200, 0), color="white")
score_string = str(score)
screen.draw.text(score_string, (327, 0), color="red")
time_string = str(round(time))
screen.draw.text(time_string, (50, 0), color="black")
def update(delta):
global score, time
time = time - delta
if time <= 0:
exit()
if keyboard.right:
player.x = player.x + 4
if keyboard.left:
player.x = player.x - 4
if keyboard.down:
player.y = player.y + 4
if keyboard.up:
player.y = player.y - 4
if player.x > WIDTH:
player.x = WIDTH
if player.x < 0:
player.x = 0
if player.y < 0:
player.y = 0
if player.y > HEIGHT:
player.y = HEIGHT
if keyboard.d:
player2.x = player2.x + 4
if keyboard.a:
player2.x = player2.x - 4
if keyboard.s:
player2.y = player2.y + 4
if keyboard.w:
player2.y = player2.y - 4
if player.colliderect(player2):
exit()
if player2.x > WIDTH:
player2.x = WIDTH
if player2.x < 0:
player2.x = 0
if player2.y < 0:
player2.y = 0
if player2.y > HEIGHT:
player2.y = HEIGHT
dx1, dy1 = player.x - enemy.x, player.y - enemy.y
dx2, dy2 = player2.x - enemy.x, player2.y - enemy.y
dist1sq = dx1 * dx1 + dy1 * dy1
dist2sq = dx2 * dx2 + dy2 * dy2
player_near = player if dist1sq < dist2sq else player2
if enemy.x < player_near.x:
enemy.x += 1
if enemy.x > player_near.x:
enemy.x -= 1
if enemy.y < player_near.y:
enemy.y += 1
if enemy.y > player_near.y:
enemy.y -= 1
if player.colliderect(enemy):
exit()
if player2.colliderect(enemy):
exit()
if money.colliderect(player):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score = score + 1
if money.colliderect(player2):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score += 1
if keyboard.d:
player2.x = player2.x + 4
if keyboard.a:
player2.x = player2.x - 4
if keyboard.s:
player2.y = player2.y + 4
if keyboard.w:
player2.y = player2.y - 4
if player.colliderect(player2):
exit()
if player2.x > WIDTH:
player2.x = WIDTH
if player2.x < 0:
player2.x = 0
if player2.y < 0:
player2.y = 0
if player2.y > HEIGHT:
player2.y = HEIGHT
This is a pygame i made in mu editor, there are 2 players trying to evade the enemy and while they try to collect money. I want to add a song playing in the background of my pygame, how can I do this? I have tried to put a mp3 file in the music folder in mu editor but I am not sure what code to put in to make it play in the game.
Upvotes: 2
Views: 241
Reputation: 14906
It's pretty easy to add music with PyGame's mixer functions. Use one channel for the music, and another for any sound effects. These become "mixed" together. One "gotcha" is that mixer doesn't like MP3 files, so you need to convert the sound to .OGG or another supported format (with something like Audacity). This is due to the MP3 format being patent encumbered (has this expired?).
Anyway, so the idea is to make two pygame.mixer.Channel
, one for music, one for sounds.
pygame.mixer.init()
# create separate Channel objects for simultaneous playback
channel1 = pygame.mixer.Channel(0) # argument must be int
channel2 = pygame.mixer.Channel(1)
# Load and play a continuously looping music
background_sound = pygame.mixer.Sound( 'background_music.ogg' )
channel1.play( background_sound, -1 ) # loop the music forever
So now the background music will loop forever on channel1
.
To play separate event-based sounds, use channel2
:
whack_sound = pygame.mixer.Sound( 'whack.ogg' )
bloop_sound = pygame.mixer.Sound( 'bloop-bloop.ogg' )
# In main loop
[...]
channel2.play( bloop_sound )
Upvotes: 1