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.