Sound and Music
We have previously added two sound files to our sounds folder; footsteps and sneakingaround. We'll play the second sound at the beginning of the program, and the first sound everytime our character moves.
Background Music
Playing the background music is easy, we'll use the command...
sounds.sneakingaround.play(-1)
sounds : This means to use the sounds object that is provided by Pygame Zero.
sneakingaround : This is the name of my sound file. You may have a different filename, so change this accordingly. You don't need to include the file extension.
play(-1) : This tells it to repeat the sound forever. You can also use play() if you want it to play only once.
This line should be outside of any functions. We want it to start playing at the start of the game, and repeat forever.
Footsteps
The footstep sound is a little more tricky. We want it to play only if these two conditions are met...
- Player is moving
- Footstep sound isn't already playing
We can fulfill the first condition by modifying the movement code into this...
play_walking_sound = False
if keyboard.up:
    player.y -= 5
    play_walking_sound = True
if keyboard.down:
    player.y += 5
    play_walking_sound = True
if keyboard.left:
    player.x -= 5
    play_walking_sound = True
if keyboard.right:
    player.x += 5
    play_walking_sound = True
Now we can check if play_walking_sound is true. It will be true if the player has pressed any of the arrow keys.
For the second condition, we can use the get_num_channels() function of the sound. This will tell us how many channels it is playing on. If it is not playing at all, this value will be zero. Now we can combine both conditions together...
if play_walking_sound:
    if sounds.footsteps.get_num_channels() == 0:
        sounds.footsteps.play()
Completed Code
Right now your code should look like this (new lines are highlighted in yellow)...
import pgzrun
import random
WIDTH = 800
HEIGHT = 600
game_over = False
score = 0
background = Actor('water')
player = Actor('p1_front')
player.x = 400
player.y = 300
enemies = []
sounds.sneakingaround.play(-1)
def update():
    global score, game_over
    if game_over:
        return
    score += 1 / 60
    play_walking_sound = False
    if keyboard.up:
        player.y -= 5
        play_walking_sound = True
    if keyboard.down:
        player.y += 5
        play_walking_sound = True
    if keyboard.left:
        player.x -= 5
        play_walking_sound = True
    if keyboard.right:
        player.x += 5
        play_walking_sound = True
    if play_walking_sound:
        if sounds.footsteps.get_num_channels() == 0:
            sounds.footsteps.play()
    if random.randint(0, 60) == 0:
        side = random.randint(1, 4)
        enemy = Actor('worm.png')
        if side == 1:
            enemy.y = random.randint(0, 600)
            enemy.x = 850
            enemy.angle = 0
        elif side == 2:
            enemy.y = random.randint(0, 600)
            enemy.x = -50
            enemy.angle = 180
        elif side == 3:
            enemy.y = 650
            enemy.x = random.randint(0, 800)
            enemy.angle = 270
        elif side == 4:
            enemy.y = -50
            enemy.x = random.randint(0, 800)
            enemy.angle = 90
        enemies.append(enemy)
    for enemy in enemies:
        if enemy.angle == 0:
            enemy.x -= 3
        elif enemy.angle == 180:
            enemy.x += 3
        elif enemy.angle == 270:
            enemy.y -= 3
        elif enemy.angle == 90:
            enemy.y += 3
        if enemy.x < -50 or enemy.x > 850 or enemy.y < -50 or enemy.y > 650:
            enemies.remove(enemy)
    if player.collidelist(enemies) != -1:
        game_over = True
def draw():
    if game_over:
        screen.clear()
        screen.draw.text('Game Over', (350,270), color=(255,255,255), fontsize=30)
        screen.draw.text('Score: ' + str(round(score)), (350,330), color=(255,255,255), fontsize=30)
    else:
        background.draw()
        player.draw()
        for enemy in enemies:
            enemy.draw()
        screen.draw.text('Score: ' + str(round(score)), (15,10), color=(255,255,255), fontsize=30)
pgzrun.go()
