Typing Tutor Game
Game Play
Now that we have our main loop, let us create our inner game play loop, where the playing of levels happen:
            # game.py
import pygame
from play import GamePlay
 . 
 . 
 . 
class TypingTutor():
    def __init__(self):
        pygame.init() # initialises Pygame libraries
        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        self.disp_surf = self.init_display()
        self.size = WIDTH, HEIGHT
        self.running = True if self.disp_surf else False
        self.state = START
        self.font = pygame.font.Font('Consolas Bold.ttf', 36)
        self.game = None
        return
 . 
 . 
 . 
    def execute(self):
        # Event loop
        while self.running:
            self.check_events()
            if self.state == PLAYING:
                self.game = GamePlay(self.screen)
                self.game.execute()
                self.state += 1
            else:
                self.render()
        return
          
        Let's create a new script, play.py.
So that we have a class to store our game play settings and status.
The base code of our play.py is almost identical to our game.py, it just requires a few adjustments:
            # play.py
import pygame
# Colours        R    G    B
BLUE        = (  0,   0, 128)
WHITE       = (255, 255, 255)
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
        
    def execute(self):
        while self.playing:
            self.check_events()
            self.loop()
            self.render()
        return
    
    def check_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    self.playing = False
        return
    
    def loop(self):
        pass
        
    def render(self):
        '''Render surface'''
        self.disp_surf.fill(BLUE) # Fill background
        # Draw some text
        self.draw_word('Playing...', WHITE, (0, 0))
        
        # Blit everything to screen
        self.screen.blit(self.disp_surf, (0,0))
        pygame.display.flip()
        return
    def draw_word(self, text, colour, coord):
        '''Display given text'''
        text_surf = self.font.render(text, True, colour)
        text_rect = text_surf.get_rect()
        text_rect.topleft = coord
        self.disp_surf.blit(text_surf, text_rect)
        return
          
        We use a different sized font and background colour for our inner play loop.
And instead of checking for spacebar, we now check for the quit button to advance to the next state.
Further difference is instead of center of our text, we draw from the top left corner of our text surf.
