Typing Tutor Game
sound
Other than giving user feedback visually, we can also provide auditory feedback.
To add some sounds, we use the Pygame.mixer.Sound()
            # play.py
# Sound types
SOUND_KEYHIT = 1
SOUND_ERROR = 2
SOUND_SUCCESS = 3
class GamePlay():
    def __init__(self, screen):
        self.screen = screen
        pygame.init()
        self.disp_surf = pygame.Surface(self.screen.get_size()).convert()
        self.width, self.height = screen.get_size()
        self.font =  pygame.font.Font('Consolas Bold.ttf', 16)
        self.playing = True
        self.game_objects = GameObjects(self.width, self.height)
        self.last_add = 0 # time of adding word
        self.add_timeout = 2000 # 2 seconds
        self.fps = 25
        self.fps_clock = pygame.time.Clock()
        self.y_delta = 1
        self.typing_flag = False
        self.key_hit = None
        self.score = 0
        self.level = 1
        self.typed_count = 0
        self.init_sound()
          
        
                def init_sound(self):
        self.type_sound = pygame.mixer.Sound("typewriter-snippet.wav")
        self.err_sound = pygame.mixer.Sound("glitch-noise.wav")
        self.success_sound = pygame.mixer.Sound("typewriter-ding.wav")
        return
          
        
                def play_sound(self, type):
        if type == SOUND_KEYHIT:
            self.type_sound.play()
        elif type == SOUND_ERROR:
            self.err_sound.play()
        elif type == SOUND_SUCCESS:
            self.success_sound.play()
          
        And then play the sound when we have a key_hit:
                def check_key_hit(self):
        '''Check user's typed key'''
        if not self.key_hit:
            return
        
        if self.typing_flag:
            for word in self.game_objects.game_words:
                if word.typed_idx != -1:
                    if word.text[word.typed_idx+1] == self.key_hit:
                        if word.typed():
                            self.typing_flag = False
                            self.add_score(len(word))
                            self.play_sound(SOUND_SUCCESS)
                        else:
                            self.play_sound(SOUND_KEYHIT)
                    else:
                        word.typed_reset()
                        self.typing_flag = False
                        self.play_sound(SOUND_ERROR)
        else:
            for word in self.game_objects.game_words:
                if word.text[0] == self.key_hit:
                    if word.typed():
                        self.add_score(1)
                        self.play_sound(SOUND_SUCCESS)
                    else:
                        self.typing_flag = True
                        self.play_sound(SOUND_KEYHIT)
                    break
        # Remove words set for removal
        self.game_objects.clean_up()
        self.key_hit = None
        return
          
        Feel free to add more sounds of your liking:
                def init_sound(self):
        self.type_sound = pygame.mixer.Sound("typewriter-snippet.wav")
        self.err_sound = pygame.mixer.Sound("glitch-noise.wav")
        self.success_sound = pygame.mixer.Sound("typewriter-ding.wav")
        self.crash_sound = pygame.mixer.Sound("concrete-hit.wav")
        return
          
        