Audio added, game completed

This commit is contained in:
maxneedspats 2022-08-01 11:57:14 -05:00
parent f95288736c
commit d1c265eac9
5 changed files with 67 additions and 11 deletions

54
audio.py Normal file
View file

@ -0,0 +1,54 @@
from pygame import mixer
class Audio:
background_music = 0
click_sound = 0
match_made_sound = 0
no_match_sound = 0
game_success_sound = 0
@staticmethod
def start_audio():
mixer.init()
# Background music is Fisticuffs in Frederick Street, by Christophe Saunière
mixer.music.load('audio/background.wav')
# Click sound... I don't remember where I got it. Sorry for no link.
Audio.click_sound = mixer.Sound('audio/mouse_click.wav')
# Match made sound
# https://pixabay.com/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=43637
Audio.match_made_sound = mixer.Sound('audio/match_made.wav')
# no_match sound is from https://freesound.org/people/distillerystudio/sounds/327738/
Audio.no_match_sound = mixer.Sound('audio/no_match.wav')
# game_success_sound is from https://freesound.org/people/jimhancock/sounds/376318/
Audio.game_success_sound = mixer.Sound('audio/game_success.wav')
@staticmethod
def play_background_music():
mixer.music.play(-1)
mixer.music.set_volume(0.5)
@staticmethod
def stop_background_music():
mixer.music.stop()
@staticmethod
def click():
Audio.click_sound.play()
@staticmethod
def match_made():
Audio.match_made_sound.play()
@staticmethod
def no_match():
Audio.no_match_sound.play()
@staticmethod
def game_success():
Audio.game_success_sound.play()

BIN
audio/game_success.wav Normal file

Binary file not shown.

BIN
audio/mouse_click.wav Normal file

Binary file not shown.

BIN
audio/no_match.wav Normal file

Binary file not shown.

24
main.py
View file

@ -1,3 +1,5 @@
from audio import Audio
try: try:
import os import os
import random import random
@ -14,8 +16,12 @@ try:
screen = turtle.Screen() screen = turtle.Screen()
turtle.bgcolor('#46a38d') turtle.bgcolor('#46a38d')
screen.setup(WIDTH, HEIGHT) screen.setup(WIDTH, HEIGHT)
score_text = turtle.Turtle()
Audio.start_audio()
Audio.play_background_music()
# Scoreboard
score_text = turtle.Turtle()
score_text.hideturtle() score_text.hideturtle()
score_text.penup() score_text.penup()
score_text.goto((WIDTH - HEIGHT) // 2, HEIGHT * .25) score_text.goto((WIDTH - HEIGHT) // 2, HEIGHT * .25)
@ -42,7 +48,6 @@ try:
cards = [] cards = []
for file in image_files: for file in image_files:
path = f'images/{file}' path = f'images/{file}'
print(path)
cards.append(Card(path)) cards.append(Card(path))
# Move sprites # Move sprites
@ -53,32 +58,29 @@ try:
x, y = coord_translation((210 * (i % 4)) + 105, (210 * int(i / 4)) + 105) x, y = coord_translation((210 * (i % 4)) + 105, (210 * int(i / 4)) + 105)
cards[i].goto(x, y) cards[i].goto(x, y)
score = 0
game_is_running = True
clicked_cards = []
def clicked_card(x, y): def clicked_card(x, y):
""" """
:return: The card which was clicked :return: The card which was clicked
""" """
Audio.click()
global clicked_cards global clicked_cards
for card in cards: for card in cards:
if card.is_mouse_over(x, y): if card.is_mouse_over(x, y):
if len(clicked_cards) == 2: if len(clicked_cards) == 2:
clicked_cards = [] clicked_cards = []
print(cards.index(card))
card.to_front() card.to_front()
clicked_cards.append(card) clicked_cards.append(card)
score = 0
def update_score(): def update_score():
score_text.clear() score_text.clear()
score_text.write(f'Score: {score}', font=('Arial', 24, 'bold')) score_text.write(f'Score: {score}', font=('Arial', 24, 'bold'))
game_is_running = True
clicked_cards = []
screen.onclick(fun=clicked_card) screen.onclick(fun=clicked_card)
while game_is_running: while game_is_running:
@ -88,13 +90,13 @@ try:
time.sleep(1) time.sleep(1)
clicked_cards[0].to_back() clicked_cards[0].to_back()
clicked_cards[1].to_back() clicked_cards[1].to_back()
print('Wrong!')
score -= 1 score -= 1
update_score() update_score()
Audio.no_match()
else: else:
print('Correct!')
score += 5 score += 5
update_score() update_score()
Audio.match_made()
clicked_cards = [] clicked_cards = []
screen.update() screen.update()