Skip to content

Instantly share code, notes, and snippets.

@Mekire
Created June 15, 2016 15:46
Show Gist options
  • Save Mekire/72cdffd62b75e091b9a203c8ae275525 to your computer and use it in GitHub Desktop.
Save Mekire/72cdffd62b75e091b9a203c8ae275525 to your computer and use it in GitHub Desktop.
import sys
import random
import pygame as pg
SCREEN_SIZE = (500, 500)
BACKGROUND = pg.Color("slategray")
TEXT_COLOR = pg.Color("tomato")
POST_DELAY = 300
FPS = 60
KEYS = (pg.K_LEFT, pg.K_RIGHT, pg.K_UP, pg.K_DOWN)
class App(object):
def __init__(self):
self.screen = pg.display.get_surface()
self.screen_rect = self.screen.get_rect()
self.clock = pg.time.Clock()
self.done = False
self.hit_key = ""
self.timer = 0.0
self.message = None
self.rect = None
def event_loop(self):
for event in pg.event.get():
if event.type == pg.QUIT:
self.done = True
elif event.type == pg.KEYDOWN:
self.render_key(pg.key.name(event.key))
def update(self, dt):
self.timer += dt
while self.timer >= POST_DELAY:
self.timer -= POST_DELAY
key_event = pg.event.Event(pg.KEYDOWN, key=random.choice(KEYS))
pg.event.post(key_event)
def render_key(self, pressed):
if pressed != self.hit_key:
self.message = FONT.render(self.hit_key, True, TEXT_COLOR)
self.hit_key = pressed
self.rect = self.message.get_rect(center=self.screen_rect.center)
def render(self):
self.screen.fill(BACKGROUND)
if self.message:
self.screen.blit(self.message, self.rect)
pg.display.update()
def main_loop(self):
dt = 0.0
self.clock.tick()
while not self.done:
self.event_loop()
self.update(dt)
self.render()
dt = self.clock.tick(FPS)
def main():
global FONT
pg.init()
pg.display.set_mode(SCREEN_SIZE)
FONT = pg.font.Font(None, 65)
App().main_loop()
pg.quit()
sys.exit()
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment