Working out some scrolling text and handling of user-entered strings

Added the LetterSpool class to handle the current "set" of user-entered
words
This commit is contained in:
R. Tyler Ballance 2010-02-13 14:49:08 -08:00
parent 31e05ccb26
commit 7f5253286c
3 changed files with 61 additions and 6 deletions

61
ty.py
View File

@ -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()

2
typy/__init__.py Normal file
View File

@ -0,0 +1,2 @@
#!/usr/bin/env python

4
typy/words.py Normal file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env python
def words():
return 'four score and seven years ago'.split(' ')