From 7f5253286c0b758e892388cf8d74e492c62be373 Mon Sep 17 00:00:00 2001 From: "R. Tyler Ballance" Date: Sat, 13 Feb 2010 14:49:08 -0800 Subject: [PATCH] Working out some scrolling text and handling of user-entered strings Added the LetterSpool class to handle the current "set" of user-entered words --- ty.py | 61 +++++++++++++++++++++++++++++++++++++++++++----- typy/__init__.py | 2 ++ typy/words.py | 4 ++++ 3 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 typy/__init__.py create mode 100644 typy/words.py diff --git a/ty.py b/ty.py index 0480bda..08ecde4 100644 --- a/ty.py +++ b/ty.py @@ -1,21 +1,55 @@ #!/usr/bin/env python +import logging +import os import sys import random import pygame from pygame.locals import * -class ExitException(Exception): - pass +from typy import words + +if os.environ.get('DEBUG'): + logging.basicConfig(level=logging.DEBUG) + +class LetterSpool(object): + spooled = None + parent = None + font = None + clear_keys = (K_RETURN, K_SPACE,) + color = (255, 255, 255,) + + def __init__(self, parent, **kwargs): + self.parent = parent + self.font = pygame.font.SysFont('Courier', 32) + self.spooled = [] + + def clear(self): + logging.debug('LetterSpool.clear()') + self.spooled = [] + + def handle_key(self, event): + if event.key in self.clear_keys: + self.clear() + return + if event.key == K_BACKSPACE: + self.spooled = self.spooled[:-1] + else: + self.spooled.append(event.unicode) + self.parent.blit(self.font.render(''.join(self.spooled), 0, self.color), + (0,0,)) + class Typy(object): surface = None size = None clock = None - tick = 30 + tick = 15 background_music = False font = None + spool = None + current_letters = None def __init__(self, width, height, **kwargs): self.size = width, height @@ -28,6 +62,7 @@ class Typy(object): pygame.mouse.set_visible(False) self.font = pygame.font.SysFont('Courier', 48) + self.spool = LetterSpool(self.surface) def should_exit(self, event): if event.type == QUIT: @@ -42,19 +77,33 @@ class Typy(object): return False if event.type == KEYDOWN: self.surface.fill((0, 0, 0)) - self.surface.blit(self.font.render(event.unicode, 0, (255,255,255)), - (0,0)) + self.spool.handle_key(event) print ('handle_event', event) return True def runloop(self): + run = True if self.background_music: pygame.mixer.music.load('background.mid') pygame.mixer.music.play(-1, 0.0) - run = True + + word_x = 480 + step = 0.05 + text = 'hello' + word = self.font.render(text, 0, (255,255,255)) + f_w, f_h = self.font.size(text) + off_screen = len(text) * f_w while run: for event in pygame.event.get(): run = self.handle_event(event) + + if word_x >= -off_screen: + # Rect(left, top, width, height) + self.surface.fill((0,0,0), + rect=pygame.Rect(word_x, 100, f_w, f_h)) + self.surface.blit(word, (word_x, 100)) + word_x = word_x - step + pygame.display.update() pygame.mixer.music.stop() diff --git a/typy/__init__.py b/typy/__init__.py new file mode 100644 index 0000000..cf529d7 --- /dev/null +++ b/typy/__init__.py @@ -0,0 +1,2 @@ +#!/usr/bin/env python + diff --git a/typy/words.py b/typy/words.py new file mode 100644 index 0000000..6f836f7 --- /dev/null +++ b/typy/words.py @@ -0,0 +1,4 @@ +#!/usr/bin/env python + +def words(): + return 'four score and seven years ago'.split(' ')