Add support for using stories from the stories/ directory
Added a nursery rhyme for testing for now
This commit is contained in:
parent
a9732ee0b3
commit
6663c94221
|
@ -0,0 +1,10 @@
|
||||||
|
Baa, Baa, Black Sheep
|
||||||
|
---------------------------------
|
||||||
|
Baa, baa, black sheep,
|
||||||
|
Have you any wool?
|
||||||
|
Yes sir, yes sir,
|
||||||
|
Three bags full.
|
||||||
|
One for the master,
|
||||||
|
One for the dame,
|
||||||
|
And one for the little boy
|
||||||
|
Who lives down the lane.
|
50
ty.py
50
ty.py
|
@ -1,6 +1,8 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
from __future__ import with_statement
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import optparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import random
|
import random
|
||||||
|
@ -14,6 +16,8 @@ import typy.events
|
||||||
if os.environ.get('DEBUG'):
|
if os.environ.get('DEBUG'):
|
||||||
logging.basicConfig(level=logging.DEBUG)
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
|
STORIES_DIR = 'stories'
|
||||||
|
|
||||||
class LetterSpool(object):
|
class LetterSpool(object):
|
||||||
spooled = None
|
spooled = None
|
||||||
parent = None
|
parent = None
|
||||||
|
@ -63,7 +67,7 @@ class AnimatingWord(AnimatingObject):
|
||||||
self.color = (255, 255, 255,)
|
self.color = (255, 255, 255,)
|
||||||
self.parent = parent
|
self.parent = parent
|
||||||
self.parent_width, self.parent_height = parent.get_size()
|
self.parent_width, self.parent_height = parent.get_size()
|
||||||
self.word = word
|
self.word = word.strip()
|
||||||
self.step = 0.05
|
self.step = 0.05
|
||||||
self.font = pygame.font.SysFont('Courier', 42)
|
self.font = pygame.font.SysFont('Courier', 42)
|
||||||
|
|
||||||
|
@ -109,15 +113,17 @@ class GameRunner(object):
|
||||||
font = None
|
font = None
|
||||||
spool = None
|
spool = None
|
||||||
|
|
||||||
def __init__(self, width, height, **kwargs):
|
def __init__(self, width, height, story, **kwargs):
|
||||||
self.size = width, height
|
self.size = width, height
|
||||||
self.surface = pygame.display.set_mode(self.size,
|
self.surface = pygame.display.set_mode(self.size,
|
||||||
pygame.HWSURFACE | pygame.DOUBLEBUF)
|
pygame.HWSURFACE | pygame.DOUBLEBUF)
|
||||||
|
|
||||||
|
self.story = story
|
||||||
self.clock = pygame.time.Clock()
|
self.clock = pygame.time.Clock()
|
||||||
self.clock.tick(self.tick)
|
self.clock.tick(self.tick)
|
||||||
pygame.display.set_caption('Typy!')
|
pygame.display.set_caption('Typy!')
|
||||||
pygame.mouse.set_visible(False)
|
pygame.mouse.set_visible(False)
|
||||||
|
pygame.event.set_allowed(typy.events.WORD_COMPLETED)
|
||||||
|
|
||||||
self.font = pygame.font.SysFont('Courier', 48)
|
self.font = pygame.font.SysFont('Courier', 48)
|
||||||
self.spool = LetterSpool(self.surface)
|
self.spool = LetterSpool(self.surface)
|
||||||
|
@ -144,8 +150,19 @@ class GameRunner(object):
|
||||||
pygame.mixer.music.load('background.mid')
|
pygame.mixer.music.load('background.mid')
|
||||||
pygame.mixer.music.play(-1, 0.0)
|
pygame.mixer.music.play(-1, 0.0)
|
||||||
|
|
||||||
pygame.event.set_allowed(typy.events.WORD_COMPLETED)
|
story_title = None
|
||||||
scrollwords = [AnimatingWord(self.surface, w) for w in typy.words.words()]
|
scrollwords = []
|
||||||
|
surface = self.surface
|
||||||
|
with open(self.story, 'r') as fd:
|
||||||
|
lines = fd.readlines()
|
||||||
|
story_title = lines[0]
|
||||||
|
for line in lines[1:]:
|
||||||
|
if line.startswith('----'):
|
||||||
|
continue
|
||||||
|
scrollwords.extend(
|
||||||
|
(AnimatingWord(surface, w) for w in line.split(' ') if w))
|
||||||
|
|
||||||
|
|
||||||
last_word_index = 0
|
last_word_index = 0
|
||||||
while run:
|
while run:
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
|
@ -178,8 +195,29 @@ class GameRunner(object):
|
||||||
if self.background_music:
|
if self.background_music:
|
||||||
pygame.mixer.music.stop()
|
pygame.mixer.music.stop()
|
||||||
|
|
||||||
if __name__ == "__main__" :
|
def main():
|
||||||
|
options = optparse.OptionParser()
|
||||||
|
options.add_option('-s', '--story', dest='story',
|
||||||
|
help='Select a story from the `stories` folder')
|
||||||
|
opts, args = options.parse_args()
|
||||||
|
|
||||||
|
if not os.path.exists(STORIES_DIR):
|
||||||
|
print '>>> The `stories` folder is missing'
|
||||||
|
return -1
|
||||||
|
|
||||||
|
if not opts.story:
|
||||||
|
print '>>> You need a story!'
|
||||||
|
return -1
|
||||||
|
|
||||||
|
if not os.path.exists(opts.story):
|
||||||
|
print '>>> Looks like the story "%s" doesn\'t exist!' % opts.story
|
||||||
|
return -1
|
||||||
|
|
||||||
pygame.init()
|
pygame.init()
|
||||||
game = GameRunner(640, 480)
|
game = GameRunner(640, 480, opts.story)
|
||||||
game.runloop()
|
game.runloop()
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if __name__ == "__main__" :
|
||||||
|
sys.exit(main())
|
||||||
|
|
Loading…
Reference in New Issue